Beispiel #1
0
        private static Texture2D GetStatHazardConditionLevelClient(SurvivalStatHazardLevel level,
                                                                   Texture2D[] orderedTextures)
        {
            var defaultBackground = orderedTextures[0];

            switch (level)
            {
            case SurvivalStatHazardLevel.Lesser:
                return(orderedTextures[0]);

            case SurvivalStatHazardLevel.Strong:
                return(orderedTextures[1]);

            case SurvivalStatHazardLevel.Max:
                return(orderedTextures[2]);

            case SurvivalStatHazardLevel.Undefined:
                Debug.Fail("Undefined value can't be assigned.");
                return(defaultBackground);

            default:
                Debug.Fail($"Value {level} is unknown.");
                return(defaultBackground);
            }
        }
Beispiel #2
0
        public SurvivalStatHazardEffect(SurvivalStatType type, SurvivalStatHazardLevel level)
        {
            Type  = type;
            Level = level;

            Rules = CalcRules();
        }
Beispiel #3
0
 public void Init(SurvivalStatType type, SurvivalStatHazardLevel level)
 {
     Type  = type;
     Level = level;
     SelectIcon(type);
     HighlightLevel(level);
 }
        public void Update_StatNearKeyPoint_RaiseEventWithCorrectValues()
        {
            // ARRANGE
            const SurvivalStatType STAT_TYPE = SurvivalStatType.Satiety;

            const int MIN_STAT_VALUE   = 0;
            const int MAX_STAT_VALUE   = 1;
            const int START_STAT_VALUE = MAX_STAT_VALUE;

            const int LESSER_SURVIVAL_STAT_KEYPOINT = 0;
            const SurvivalStatHazardLevel LESSER_SURVIVAL_STAT_KEYPOINT_TYPE = SurvivalStatHazardLevel.Lesser;

            const int STAT_RATE = 1;

            const int EXPECTED_SURVIVAL_STAT_KEYPOINT = LESSER_SURVIVAL_STAT_KEYPOINT;

            const int FAKE_ROLL_SURVIVAL_RESULT = 6;

            var survivalRandomSourceMock = new Mock <ISurvivalRandomSource>();

            survivalRandomSourceMock.Setup(x => x.RollSurvival(It.IsAny <SurvivalStat>()))
            .Returns(FAKE_ROLL_SURVIVAL_RESULT);
            var survivalRandomSource = survivalRandomSourceMock.Object;

            var survivalStats = new SurvivalStat[] {
                new SurvivalStat(START_STAT_VALUE, MIN_STAT_VALUE, MAX_STAT_VALUE)
                {
                    Type      = STAT_TYPE,
                    Rate      = STAT_RATE,
                    KeyPoints = new[] {
                        new SurvivalStatKeyPoint(
                            LESSER_SURVIVAL_STAT_KEYPOINT_TYPE,
                            LESSER_SURVIVAL_STAT_KEYPOINT)
                    }
                }
            };

            var survivalData = new HumanSurvivalData(_personScheme,
                                                     survivalStats,
                                                     survivalRandomSource);



            // ACT
            using (var monitor = survivalData.Monitor())
            {
                survivalData.Update();



                // ASSERT
                monitor.Should().Raise(nameof(ISurvivalData.StatCrossKeyValue))
                .WithArgs <SurvivalStatChangedEventArgs>(args =>
                                                         args.Stat.Type == STAT_TYPE &&
                                                         args.KeyPoints.FirstOrDefault().Level == LESSER_SURVIVAL_STAT_KEYPOINT_TYPE &&
                                                         args.KeyPoints.FirstOrDefault().Value == EXPECTED_SURVIVAL_STAT_KEYPOINT);
            }
        }
        /// <summary>
        /// Конструктор.
        /// </summary>
        /// <param name="start">Начальное значение сегмента в долях от 0.0f до 1.0f.</param>
        /// <param name="end">Конечное значение сегмента в долях от 0.0f до 1.0f.</param>
        /// <param name="level">Уровень влияния на характеристику.</param>
        public SurvivalStatKeySegment(float start, float end, SurvivalStatHazardLevel level)
        {
            if (start > end)
            {
                throw new ArgumentException("Начальная точка должна быть меньше или равно конечной точки.");
            }

            Start = start;
            End   = end;
            Level = level;
        }
        public SurvivalStatHazardEffect(SurvivalStatType type,
                                        SurvivalStatHazardLevel level,
                                        [NotNull] ISurvivalRandomSource survivalRandomSource)
        {
            Type  = type;
            Level = level;

            _survivalRandomSource = survivalRandomSource ?? throw new ArgumentNullException(nameof(survivalRandomSource));

            _rules = CalcRules();
        }
Beispiel #7
0
    public void Init(SurvivalStatType type, SurvivalStatHazardLevel level)
    {
        var currentLanguage = _uiSettingService.CurrentLanguage;

        Type  = type;
        Level = level;
        SelectIcon(type);
        HighlightLevel(level);

        if (UiElementTooltip != null)
        {
            var effectText = GetEffectText(currentLanguage);
            UiElementTooltip.text = effectText;
        }
    }
        private static void AddKeyPointFromScheme(
            SurvivalStatHazardLevel segmentLevel,
            PersonSurvivalStatKeypointLevel schemeSegmentLevel,
            IPersonSurvivalStatKeySegmentSubScheme[] keyPoints,
            List <SurvivalStatKeySegment> keyPointList)
        {
            var schemeKeySegment = GetKeyPointSchemeValue(schemeSegmentLevel, keyPoints);

            if (schemeKeySegment == null)
            {
                return;
            }

            var keySegment = new SurvivalStatKeySegment(schemeKeySegment.Start, schemeKeySegment.End, segmentLevel);

            keyPointList.Add(keySegment);
        }
Beispiel #9
0
    private void HighlightLevel(SurvivalStatHazardLevel level)
    {
        switch (level)
        {
        case SurvivalStatHazardLevel.Lesser:
            Background.color = Color.white;
            break;

        case SurvivalStatHazardLevel.Strong:
            Background.color = new Color(0.3f, 0, 0, 1);
            break;

        case SurvivalStatHazardLevel.Max:
            Background.color = new Color(1f, 0, 0, 1);
            break;

        default:
            throw new InvalidOperationException();
        }
    }
Beispiel #10
0
    private void HighlightLevel(SurvivalStatHazardLevel level)
    {
        switch (level)
        {
        case SurvivalStatHazardLevel.Lesser:
            Background.color = new Color32(0xff, 0xcc, 0x5e, 255);
            break;

        case SurvivalStatHazardLevel.Strong:
            Background.color = new Color32(0xff, 0x7c, 0x24, 255);
            break;

        case SurvivalStatHazardLevel.Max:
            Background.color = new Color32(0xf3, 0x28, 0x13, 255);
            break;

        default:
            throw new InvalidOperationException();
        }
    }
Beispiel #11
0
        private static void GetEffectStatAndLevelByName(string effectName, out SurvivalStatType stat,
                                                        out SurvivalStatHazardLevel level)
        {
            switch (effectName)
            {
            case "нет":
                level = SurvivalStatHazardLevel.Undefined;
                stat  = SurvivalStatType.Undefined;
                break;

            case "Слабый голод":
                level = SurvivalStatHazardLevel.Lesser;
                stat  = SurvivalStatType.Satiety;
                break;

            case "Голод":
                level = SurvivalStatHazardLevel.Strong;
                stat  = SurvivalStatType.Satiety;
                break;

            case "Голодание":
                level = SurvivalStatHazardLevel.Max;
                stat  = SurvivalStatType.Satiety;
                break;

            case "Слабая жажда":
                level = SurvivalStatHazardLevel.Lesser;
                stat  = SurvivalStatType.Hydration;
                break;

            case "Жажда":
                level = SurvivalStatHazardLevel.Strong;
                stat  = SurvivalStatType.Hydration;
                break;

            case "Обезвоживание":
                level = SurvivalStatHazardLevel.Max;
                stat  = SurvivalStatType.Hydration;
                break;

            case "Слабая токсикация":
                level = SurvivalStatHazardLevel.Lesser;
                stat  = SurvivalStatType.Intoxication;
                break;

            case "Сильная токсикация":
                level = SurvivalStatHazardLevel.Strong;
                stat  = SurvivalStatType.Intoxication;
                break;

            case "Смертельная токсикация":
                level = SurvivalStatHazardLevel.Max;
                stat  = SurvivalStatType.Intoxication;
                break;

            case "Слабая рана":
                level = SurvivalStatHazardLevel.Lesser;
                stat  = SurvivalStatType.Health;
                break;

            case "Сильная рана":
                level = SurvivalStatHazardLevel.Strong;
                stat  = SurvivalStatType.Health;
                break;

            case "Смертельная рана":
                level = SurvivalStatHazardLevel.Max;
                stat  = SurvivalStatType.Health;
                break;

            default:
                throw new NotSupportedException("Неизветный тип ожидаемого эффекта.");
            }
        }
 public SurvivalStatKeyPoint(SurvivalStatHazardLevel level, int value)
 {
     Level = level;
     Value = value;
 }