private static SurvivalStat CreateStat(SurvivalStatType type) { var stat = new SurvivalStat(50) { Type = type, Range = new Range <int>(-100, 100), Rate = 1, KeyPoints = new[] { new SurvivalStatKeyPoint { Level = SurvivalStatHazardLevel.Lesser, Value = 0 }, new SurvivalStatKeyPoint { Level = SurvivalStatHazardLevel.Strong, Value = -25 }, new SurvivalStatKeyPoint { Level = SurvivalStatHazardLevel.Max, Value = -50 } } }; return(stat); }
private void ChangeStatInner(SurvivalStat stat, int value) { var oldValue = stat.Value; stat.Value += value; // TODO Это можно вынести в сеттер if (stat.Value >= stat.Range.Max) { stat.Value = stat.Range.Max; } if (stat.Value <= stat.Range.Min) { stat.Value = stat.Range.Min; } var diff = RangeHelper.CreateNormalized <int>(oldValue, stat.Value); foreach (var keyPoint in stat.KeyPoints) { if (diff.Contains(keyPoint.Value)) { DoStatCrossKeyPoint(stat, keyPoint); } } }
private void CheckStatKeyPoints(SurvivalStat stat, int oldValue) { var crossedKeyPoints = stat.KeyPoints.CalcKeyPointsInRange(oldValue, stat.Value); if (crossedKeyPoints.Any()) { DoStatCrossKeyPoint(stat, crossedKeyPoints); } }
private void ChangeStatInner(SurvivalStat stat, int value) { var oldValue = stat.Value; stat.Value += value; if (stat.KeyPoints != null) { CheckStatKeyPoints(stat, oldValue); } ProcessIfHealth(stat); }
private static SurvivalStat CreateStat(SurvivalStatType type) { var stat = new SurvivalStat(START_SURVIVAL_STAT, MIN_SURVIVAL_STAT, MAX_SURVIVAL_STAT) { Type = type, Rate = 1, KeyPoints = new[] { new SurvivalStatKeyPoint(SurvivalStatHazardLevel.Max, MAX_SURVIVAL_STAT_KEYPOINT), new SurvivalStatKeyPoint(SurvivalStatHazardLevel.Strong, STRONG_SURVIVAL_STAT_KEYPOINT), new SurvivalStatKeyPoint(SurvivalStatHazardLevel.Lesser, LESSER_SURVIVAL_STAT_KEYPOINT) } }; return(stat); }
/// <summary> /// Индивидуально обрабатывает характеристику, если это здоровье. /// </summary> /// <param name="stat"> Обрабатываемая характеристика. </param> private void ProcessIfHealth(SurvivalStat stat) { if (stat.Type != SurvivalStatType.Health) { return; } var hp = stat.Value; if (hp <= 0) { IsDead = true; DoDead(); } }
private void DoStatCrossKeyPoint(SurvivalStat stat, IEnumerable <SurvivalStatKeyPoint> keyPoints) { var args = new SurvivalStatChangedEventArgs(stat, keyPoints); StatCrossKeyValue?.Invoke(this, args); }
public int RollSurvival(SurvivalStat stat) { return(_dice.Roll(6)); }
private void DoStatCrossKeyPoint(SurvivalStat stat, SurvivalStatKeyPoint keyPoint) { var args = new SurvivalStatChangedEventArgs(stat, keyPoint); StatCrossKeyValue?.Invoke(this, args); }
public SurvivalStatChangedEventArgs([NotNull] SurvivalStat stat) { Stat = stat ?? throw new ArgumentNullException(nameof(stat)); }
private void ChangeStatInner(SurvivalStat stat, int value) { stat.Value += value; ProcessIfHealth(stat); }
public SurvivalStatChangedEventArgs(SurvivalStat stat, SurvivalStatKeyPoint keyPoint) { Stat = stat; KeyPoint = keyPoint; }