idle-survivors/Assets/Scripts/Attribute.cs

34 lines
1.3 KiB
C#
Raw Normal View History

2023-07-28 17:29:45 -05:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Attribute : ScriptableObject
2023-07-28 17:29:45 -05:00
{
public long Base { get; set; }
public long BaseBonus { get; set; }
public long PermyriadBonus { get; set; }
public long FlatBonus { get; set; }
2023-07-28 17:29:45 -05:00
public long Value => Calc(Base, BaseBonus, PermyriadBonus, FlatBonus);
2023-07-28 17:29:45 -05:00
/// <summary>
/// Calculates the stat value with accumulated buff and debuff modifiers.
/// </summary>
/// <param name="baseValue">Base value.</param>
2023-07-28 17:29:45 -05:00
/// <param name="baseBonus">Additive bonus applied before multiplicative scaling.</param>
/// <param name="permyriadBonus">Multiplicative scaling in hundredths of a percent. E.g., 625 permyriad corresponds to 6.25%.</param>
/// <param name="flatBonus">Additive bonus applied after multiplicative scaling.</param>
/// <returns>(base + baseBonus) * (100% + permyriadBonus) + flatBonus, bounded below by 0.</returns>
public static long Calc(long baseValue, long baseBonus, long permyriadBonus, long flatBonus)
2023-07-28 17:29:45 -05:00
{
var r = baseValue + baseBonus;
2023-07-28 17:29:45 -05:00
var m = permyriadBonus + 10000;
r = r * (m / 10000) + (r / 10000) * (m % 10000) + flatBonus;
if (r <= 0)
{
return 0;
}
return r;
}
}