rework Attribute to track its own bonuses
This commit is contained in:
@@ -2,35 +2,26 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public struct Attribute
|
||||
public class Attribute : ScriptableObject
|
||||
{
|
||||
[SerializeField]
|
||||
private long _base;
|
||||
public long Base { get; set; }
|
||||
public long BaseBonus { get; set; }
|
||||
public long PermyriadBonus { get; set; }
|
||||
public long FlatBonus { get; set; }
|
||||
|
||||
public Attribute(long stat)
|
||||
{
|
||||
_base = stat;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Permanently increase the stat value.
|
||||
/// </summary>
|
||||
/// <param name="by">Increase amount.</param>
|
||||
public void LevelUp(long by)
|
||||
{
|
||||
_base += by;
|
||||
}
|
||||
public long Value => Calc(Base, BaseBonus, PermyriadBonus, FlatBonus);
|
||||
|
||||
/// <summary>
|
||||
/// Calculates the stat value with accumulated buff and debuff modifiers.
|
||||
/// </summary>
|
||||
/// <param name="baseValue">Base value.</param>
|
||||
/// <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 long Calc(long baseBonus, long permyriadBonus, long flatBonus)
|
||||
public static long Calc(long baseValue, long baseBonus, long permyriadBonus, long flatBonus)
|
||||
{
|
||||
var r = _base + baseBonus;
|
||||
var r = baseValue + baseBonus;
|
||||
var m = permyriadBonus + 10000;
|
||||
r = r * (m / 10000) + (r / 10000) * (m % 10000) + flatBonus;
|
||||
if (r <= 0)
|
||||
|
Reference in New Issue
Block a user