using System; using Sirenix.OdinInspector; using VOID.Generic.Dict; namespace VOID.Generic.Objects.Unit.Data { [Serializable] public record SubAttributes { [MinValue(1f)] public int damageMin = 1; [MinValue(1f)] public int damageMax = 1; [MinValue(0f)] public float criticalDamageChance = 0f; [MinValue(0f)] public float criticalDamageMultiplier = 2f; public float accuracy = 0.6f; public float dodge = 0.05f; [MinValue(0f)] public float carryCapacity = 50f; [MinValue(0f)] public float sight = 0f; [MinValue(0f)] public float hear = 0f; [MinValue(0f)] public float move = 0f; public float initiative = 0f; public float Get(SubAttributeType type) { return type switch { SubAttributeType.DamageMin => damageMin, SubAttributeType.DamageMax => damageMax, SubAttributeType.CriticalDamageChance => criticalDamageChance, SubAttributeType.CriticalDamageMultiplier => criticalDamageMultiplier, SubAttributeType.Accuracy => accuracy, SubAttributeType.Dodge => dodge, SubAttributeType.CarryCapacity => carryCapacity, SubAttributeType.Sight => sight, SubAttributeType.Hear => hear, SubAttributeType.Move => move, SubAttributeType.Initiative => initiative, _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; } public void Set(SubAttributeType type, float value) { switch(type) { case SubAttributeType.DamageMin: damageMin = (int)value; return; case SubAttributeType.DamageMax: damageMax = (int)value; return; case SubAttributeType.CriticalDamageChance: criticalDamageChance = value; return; case SubAttributeType.CriticalDamageMultiplier: criticalDamageMultiplier = value; return; case SubAttributeType.Accuracy: accuracy = value; return; case SubAttributeType.Dodge: dodge = value; return; case SubAttributeType.CarryCapacity: carryCapacity = value; return; case SubAttributeType.Sight: sight = value; return; case SubAttributeType.Hear: hear = value; return; case SubAttributeType.Move: move = value; return; case SubAttributeType.Initiative: initiative = value; return; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } } } }