using System; namespace Models; /// /// 状态值 (StatusValue) /// 设计说明: /// 1) 这是“带阈值的数值”,用于压力、体力、忠诚等需要触发事件的状态。 /// 2) 当前值由 PropertyValue 承担“范围约束”,阈值只负责触发行为。 /// 3) 事件由 Model 层抛出,Controller/系统层订阅,View 不直接耦合。 /// 注意事项: /// - Upper/Lower 默认等于当前范围的上/下限,保持语义直观。 /// - 如果需要“软阈值”,请在系统中根据 Normalized 手动判断。 /// 未来扩展: /// - 可增加“阈值触发冷却/抑制器”,避免频繁触发。 /// - 可加入“变化速率”以支持回合/时间驱动的增减。 /// public sealed class StatusValue { private PropertyValue _current; public event Action OnUpperThresholdReached; public event Action OnLowerThresholdReached; public PropertyValue Current { get => _current; set { _current = value; CheckThresholds(); } } public float UpperThreshold { get; set; } public float LowerThreshold { get; set; } public StatusValue(int current = 0, int upper = 100, int lower = 0) { _current = new PropertyValue(current, lower, upper); UpperThreshold = upper; LowerThreshold = lower; } public StatusValue(float current, float upper, float lower) { _current = new PropertyValue(current, lower, upper); UpperThreshold = upper; LowerThreshold = lower; } public StatusValue(PropertyValue current, float upperThreshold, float lowerThreshold) { _current = current ?? new PropertyValue(0); UpperThreshold = upperThreshold; LowerThreshold = lowerThreshold; CheckThresholds(); } private void CheckThresholds() { if (_current.Value >= UpperThreshold) { OnUpperThresholdReached?.Invoke(); } if (_current.Value <= LowerThreshold) { OnLowerThresholdReached?.Invoke(); } } public void Add(float value) { _current.Add(value); CheckThresholds(); } public void Subtract(float value) { _current.Subtract(value); CheckThresholds(); } }