Example #1
0
        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);
        }
Example #2
0
        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));
 }
Example #9
0
        private void DoStatCrossKeyPoint(SurvivalStat stat, SurvivalStatKeyPoint keyPoint)
        {
            var args = new SurvivalStatChangedEventArgs(stat, keyPoint);

            StatCrossKeyValue?.Invoke(this, args);
        }
Example #10
0
 public SurvivalStatChangedEventArgs([NotNull] SurvivalStat stat)
 {
     Stat = stat ?? throw new ArgumentNullException(nameof(stat));
 }
Example #11
0
        private void ChangeStatInner(SurvivalStat stat, int value)
        {
            stat.Value += value;

            ProcessIfHealth(stat);
        }
 public SurvivalStatChangedEventArgs(SurvivalStat stat, SurvivalStatKeyPoint keyPoint)
 {
     Stat     = stat;
     KeyPoint = keyPoint;
 }