Exemple #1
0
        private void SetLightModifier(LightModifiersBase modifier, float?zeroVal, float?fullVal)
        {
            if (zeroVal.HasValue)
            {
                modifier.Offsets[0] = SettingsHelpers.MultiPercentToMod(zeroVal.Value, true);
            }

            if (fullVal.HasValue)
            {
                modifier.Offsets[1] = SettingsHelpers.MultiPercentToMod(fullVal.Value, false);
            }
        }
Exemple #2
0
        public void Init()
        {
            if (CacheInited)
            {
                return;
            }

            MinCache    = (float)Math.Round(Settings.Store.MultiplierCaps.min * 100);
            MaxCache    = (float)Math.Round(Settings.Store.MultiplierCaps.max * 100);
            NVZeroCache = SettingsHelpers.ModToMultiPercent(LightModifiersBase.NVLightModifiers[0], true);

            NVFullCache =
                SettingsHelpers.ModToMultiPercent(LightModifiersBase.NVLightModifiers[1], false);

            PSZeroCache = SettingsHelpers.ModToMultiPercent(LightModifiersBase.PSLightModifiers[0], true);

            PSFullCache =
                SettingsHelpers.ModToMultiPercent(LightModifiersBase.PSLightModifiers[1], false);

            CacheInited = true;
        }
Exemple #3
0
        public void DrawTab(Rect inRect)
        {
            var raceCount = Settings.Store.RaceLightMods.Count;

            if (_numberOfCustomRaces == null)
            {
                _numberOfCustomRaces =
                    Settings.Store.RaceLightMods.Count(rlm => rlm.Value.IntSetting == VisionType.NVCustom);
            }

            inRect = inRect.AtZero();
            SettingsHelpers.DrawLightModifiersHeader(ref inRect, "NVRaces".Translate(), "NVRaceNote".Translate());

            var heightMarker = inRect.y + 3f;

            var viewRect = new Rect(
                inRect.x,
                inRect.y,
                inRect.width * 0.9f,
                raceCount
                * (Constants.ROW_HEIGHT + Constants.ROW_GAP)
                + (float)_numberOfCustomRaces * 100f
                );

            var rowRect = new Rect(inRect.x + 6f, heightMarker, inRect.width - 12f, Constants.ROW_HEIGHT);

            Widgets.BeginScrollView(inRect, ref _raceScrollPosition, viewRect);
            var count = 0;

            foreach (KeyValuePair <ThingDef, Race_LightModifiers> kvp in Settings.Store.RaceLightMods)
            {
                var givenColor = GUI.color;
                rowRect.y = heightMarker;

                if (!kvp.Value.ShouldShowInSettings)
                {
                    if (!Prefs.DevMode)
                    {
                        continue;
                    }

                    GUI.color = Color.grey;
                    Widgets.Label(rowRect.TopPartPixels(20f), "NVDevModeOnly".Translate());
                    rowRect.y    += 20;
                    heightMarker += 20;
                }

                _numberOfCustomRaces +=
                    SettingsHelpers.DrawLightModifiersRow(kvp.Key, kvp.Value, rowRect, ref heightMarker, true);

                if (!kvp.Value.ShouldShowInSettings)
                {
                    GUI.color = givenColor;
                }

                count++;
                heightMarker += Constants.ROW_HEIGHT + Constants.ROW_GAP;

                if (count < raceCount)
                {
                    Widgets.DrawLineHorizontal(rowRect.x + 6f, heightMarker - 5.5f, rowRect.width - 12f);
                }
            }

            Widgets.EndScrollView();
        }
        public static void DebugTab(
            Rect inRect
            )
        {
            bool playing = Current.ProgramState == ProgramState.Playing;

            inRect    = inRect.AtZero();
            Text.Font = GameFont.Tiny;
            float listingY = default;

#if DEBUG
            var listing = new Listing_Standard();
            listing.Begin(inRect);
            listing.CheckboxLabeled("NVDebugLogComps".Translate(), ref LogPawnComps);
            listing.GapLine();
            listing.LabelDouble("NVDebugAverageTime".Translate(),
                                (NVHarmonyPatcher.TotalGlFactorNanoSec / NVHarmonyPatcher.TotalTicks).ToString("00 ns/tick"));
            listing.Label($"1 tick = {1000000000 / 60:00} ns");
            listing.GapLine();
            listingY = listing.CurHeight;
            listing.End();
#endif

            var rowRect = new Rect(
                inRect.width * 0.05f,
                inRect.height * 0.05f + listingY,
                inRect.width * 0.9f,
                Constants.RowHeight
                );

            Text.Anchor = TextAnchor.MiddleLeft;
            //Multiplier Limits
            Widgets.CheckboxLabeled(rowRect, "NVCustomCapsEnabled".Translate(), ref Storage.CustomCapsEnabled);

            if (Storage.CustomCapsEnabled)
            {
                rowRect.y += Constants.RowHeight;
                Text.Font  = GameFont.Tiny;
                Widgets.Label(rowRect, "NVCapsExp".Translate());
                //Text.Font =  GameFont.Small;
                rowRect.y += Constants.RowHeight /*+ Constants.RowGap*/;

                SettingsCache.MinCache = Widgets.HorizontalSlider(
                    rowRect,
                    (float)SettingsCache.MinCache,
                    1f,
                    100f,
                    true,
                    "NVSettingsMinCapLabel".Translate(
                        SettingsCache
                        .MinCache
                        ),
                    "1%",
                    "100%",
                    1
                    );

                SettingsHelpers.DrawIndicator(
                    rowRect.TopPart(0.9f),
                    Constants.DefaultMinCap,
                    0f,
                    1f,
                    100f,
                    IndicatorTex.DefIndicator
                    );

                rowRect.y += Constants.RowHeight;

                SettingsCache.MaxCache = Widgets.HorizontalSlider(
                    rowRect,
                    (float)SettingsCache.MaxCache,
                    100f,
                    200f,
                    true,
                    "NVSettingsMaxCapLabel".Translate(
                        SettingsCache
                        .MaxCache
                        ),
                    "100%",
                    "200%",
                    1
                    );

                SettingsHelpers.DrawIndicator(
                    rowRect.TopPart(0.9f),
                    Constants.DefaultMaxCap,
                    0f,
                    100f,
                    200f,
                    IndicatorTex.DefIndicator
                    );
            }

            rowRect.y += Constants.RowHeight;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            float endY = rowRect.yMax;

            if (playing)
            {
                if (DrawSettings._allPawns == null)
                {
                    DrawSettings._allPawns = PawnsFinder.AllMaps_Spawned.Where(pwn => pwn.RaceProps.Humanlike).ToList();
                }

                float height;

                if (Math.Abs(DrawSettings._maxY) < 0.001)
                {
                    height = 25 * DrawSettings._allPawns.Count
                             + 200
                             * DrawSettings._allPawns
                             .FindAll(
                        pawn => pawn.GetComp <Comp_NightVision>()
                        != null
                        )
                             .Count;
                }
                else
                {
                    height = DrawSettings._maxY;
                }

                var remainRect = new Rect(
                    inRect.x,
                    endY + 5f,
                    inRect.width,
                    inRect.yMax - endY + 5f
                    );

                var viewRect = new Rect(remainRect.x + 6f, remainRect.y, remainRect.width - 12f, height);

                rowRect = new Rect(
                    remainRect.x + 10f,
                    remainRect.y + 3f,
                    remainRect.width - 20f,
                    Constants.RowHeight / 2
                    );

                Widgets.BeginScrollView(remainRect, ref DrawSettings._debugScrollPos, viewRect);
                Text.Font = GameFont.Tiny;

                foreach (Pawn pawn in DrawSettings._allPawns)
                {
                    Widgets.Label(rowRect.LeftPart(0.1f), pawn.Name.ToStringShort);

                    if (pawn.GetComp <Comp_NightVision>() is Comp_NightVision comp)
                    {
                        Rect rightRect = rowRect.RightPart(0.8f);

                        Widgets.Label(
                            rightRect,
                            $"Number of eyes: {comp.NumberOfRemainingEyes}/{comp.RaceSightParts.Count}   Natural modifier: {comp.NaturalLightModifiers.IntSetting}"
                            );

                        rightRect.y += Constants.RowHeight / 2;

                        Widgets.Label(
                            rightRect,
                            $"0% light modifier: {comp.ZeroLightModifier}   100% light modifier: {comp.FullLightModifier}"
                            );

                        rightRect.y += Constants.RowHeight / 2;

                        Widgets.Label(
                            rightRect,
                            $"Psych: {comp.PsychDark}      Apparel: NightVis: {comp.ApparelGrantsNV}   Anti-brightness: {comp.ApparelNullsPS}"
                            );

                        rightRect.y += Constants.RowHeight / 2;

                        Widgets.Label(
                            rightRect,
                            $"Health (pre-cap) [0%,100%] : NightV mod: [{comp.NvhediffMods[0]}, {comp.NvhediffMods[1]}]   PhotoS mod: [{comp.PshediffMods[0]}, {comp.PshediffMods[1]}]   Custom: [{comp.HediffMods[0]},{comp.HediffMods[1]}]"
                            );

                        rightRect.y += Constants.RowHeight / 2;
                        Widgets.Label(rightRect, "Body Parts & their hediffs");

                        foreach (KeyValuePair <string, List <HediffDef> > hedifflist in comp.PawnsNVHediffs
                                 )
                        {
                            rightRect.y += Constants.RowHeight / 2;

                            Widgets.Label(
                                rightRect,
                                $"  Body part: {hedifflist.Key} has hediffs: "
                                );

                            foreach (HediffDef hediff in hedifflist.Value)
                            {
                                if (Storage.HediffLightMods.TryGetValue(
                                        hediff,
                                        out Hediff_LightModifiers value
                                        ))
                                {
                                    rightRect.y += Constants.RowHeight / 2;

                                    Widgets.Label(
                                        rightRect,
                                        $"    {hediff.LabelCap}: current setting = {value.IntSetting}"
                                        );
                                }
                                else
                                {
                                    rightRect.y += Constants.RowHeight / 2;

                                    Widgets.Label(
                                        rightRect,
                                        $"    {hediff.LabelCap}: No Setting"
                                        );
                                }
                            }
                        }

                        rightRect.y += Constants.RowHeight / 2;
                        Widgets.Label(rightRect, "Eye covering or nightvis Apparel:");

                        foreach (Apparel apparel in comp.PawnsNVApparel)
                        {
                            if (Storage.NVApparel.TryGetValue(
                                    apparel.def,
                                    out ApparelVisionSetting appSet
                                    ))
                            {
                                rightRect.y += Constants.RowHeight / 2;

                                Widgets.Label(
                                    rightRect,
                                    $"  {apparel.LabelCap}: nightvis: {appSet.GrantsNV}  anti-bright: {appSet.NullifiesPS}  - def file setting: NV:{appSet.CompGrantsNV} A-B:{appSet.CompNullifiesPS}"
                                    );
                            }
                            else
                            {
                                rightRect.y += Constants.RowHeight / 2;
                                Widgets.Label(rightRect, $"  {apparel.LabelCap}: No Setting");
                            }
                        }

                        rightRect.y += Constants.RowHeight / 2;
                        rowRect.y    = rightRect.y;
                    }
                    else
                    {
                        Widgets.Label(rowRect.RightHalf(), "No Night Vision component found.");
                    }

                    rowRect.y += Constants.RowHeight / 2;
                    Widgets.DrawLineHorizontal(rowRect.x + 10f, rowRect.y, rowRect.width - 20f);
                    rowRect.y += Constants.RowHeight / 2;
                }

                if (Math.Abs(DrawSettings._maxY) < 0.001)
                {
                    DrawSettings._maxY = rowRect.yMax;
                }

                Widgets.EndScrollView();
            }
        }
        public static void HediffTab(
            Rect inRect
            )
        {
            int hediffcount = SettingsCache.GetAllHediffs.Count;

            if (DrawSettings._numberOfCustomHediffs == null)
            {
                DrawSettings._numberOfCustomHediffs =
                    Storage.HediffLightMods.Count(hlm => hlm.Value.IntSetting == VisionType.NVCustom);
            }

            inRect = inRect.AtZero();

            SettingsHelpers.DrawLightModifiersHeader(
                ref inRect,
                "NVHediffs".Translate(),
                "NVHediffNote".Translate() + "NVHediffNoteCont".Translate()
                );

            float num = inRect.y + 3f;

            var viewRect = new Rect(
                inRect.x,
                inRect.y,
                inRect.width * 0.9f,
                hediffcount
                * (Constants.RowHeight + Constants.RowGap)
                + (float)DrawSettings._numberOfCustomHediffs * 100f
                );

            var rowRect = new Rect(inRect.x + 6f, num, inRect.width - 12f, Constants.RowHeight);

            Widgets.BeginScrollView(inRect, ref DrawSettings._hediffScrollPosition, viewRect);

            for (var i = 0; i < hediffcount; i++)
            {
                HediffDef hediffdef = SettingsCache.GetAllHediffs[i];
                rowRect.y = num;

                if (Storage.HediffLightMods.TryGetValue(hediffdef, out Hediff_LightModifiers hediffmods))
                {
                    DrawSettings._numberOfCustomHediffs +=
                        SettingsHelpers.DrawLightModifiersRow(
                            hediffdef,
                            hediffmods,
                            rowRect,
                            ref num,
                            false
                            );
                }
                else
                {
                    Hediff_LightModifiers temp = Storage.AllEyeHediffs.Contains(hediffdef)
                                ? new Hediff_LightModifiers {
                        AffectsEye = true
                    }
                                : new Hediff_LightModifiers();

                    DrawSettings._numberOfCustomHediffs +=
                        SettingsHelpers.DrawLightModifiersRow(
                            hediffdef,
                            temp,
                            rowRect,
                            ref num,
                            false
                            );

                    if (temp.IntSetting != VisionType.NVNone)
                    {
                        temp.InitialiseNewFromSettings(hediffdef);
                        Storage.HediffLightMods[hediffdef] = temp;
                    }
                }

                num += Constants.RowHeight + Constants.RowGap;

                if (i < hediffcount)
                {
                    Widgets.DrawLineHorizontal(
                        rowRect.x + 6f,
                        num - (Constants.RowGap / 2 - 0.5f),
                        rowRect.width - 12f
                        );
                }
            }

            Widgets.EndScrollView();
        }
        public static void GeneralTab(
            Rect inRect
            )
        {
            //TODO GeneralTab: Add  thought settings?
            TextAnchor anchor    = Text.Anchor;
            float      rowHeight = Constants.GenRowHeight;

            var rowRect = new Rect(
                inRect.width * 0.05f,
                inRect.height * 0.05f,
                inRect.width * 0.9f,
                rowHeight
                );

            Text.Anchor = TextAnchor.MiddleLeft;

            Widgets.Label(rowRect, "NVVanillaMultiExp".Translate());
            rowRect.y += rowHeight + Constants.RowGap;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.RowGap;

            //Night Vision Settings

            Widgets.Label(
                rowRect,
                "NVMoveWorkSpeedMultipliers"
                .Translate(VisionType.NVNightVision.ToString().Translate())
                .ToLower()
                .CapitalizeFirst()
                );

            rowRect.y += rowHeight + Constants.RowGap;

            SettingsCache.NVZeroCache = Widgets.HorizontalSlider(
                rowRect,
                (float)SettingsCache.NVZeroCache,
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                true,
                string.Format(
                    Constants.ZeroMultiLabel,
                    SettingsCache.NVZeroCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MinCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DefaultZeroLightMultiplier,
                Constants.NVDefaultOffsets[0],
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 1.5f;

            SettingsCache.NVFullCache = Widgets.HorizontalSlider(
                rowRect,
                (float)SettingsCache.NVFullCache,
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                true,
                string.Format(
                    Constants.FullMultiLabel,
                    SettingsCache.NVFullCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MinCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DefaultFullLightMultiplier,
                Constants.NVDefaultOffsets[1],
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 2f;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.RowGap;

            //Photosensitivity settings

            Widgets.Label(
                rowRect,
                "NVMoveWorkSpeedMultipliers"
                .Translate(VisionType.NVPhotosensitivity.ToString().Translate())
                .ToLower()
                .CapitalizeFirst()
                );

            rowRect.y += rowHeight * 1.5f;

            SettingsCache.PSZeroCache = Widgets.HorizontalSlider(
                rowRect,
                (float)SettingsCache.PSZeroCache,
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                true,
                string.Format(
                    Constants.ZeroMultiLabel,
                    SettingsCache.PSZeroCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MinCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DefaultZeroLightMultiplier,
                Constants.PSDefaultOffsets[0],
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 1.5f;

            SettingsCache.PSFullCache = Widgets.HorizontalSlider(
                rowRect,
                (float)SettingsCache.PSFullCache,
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                true,
                string.Format(
                    Constants.FullMultiLabel,
                    SettingsCache.PSFullCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MinCache
                    ),
                string.Format(
                    Constants.XLabel,
                    SettingsCache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DefaultFullLightMultiplier,
                Constants.PSDefaultOffsets[1],
                (float)SettingsCache.MinCache,
                (float)SettingsCache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 2f;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.RowGap;


            if (Settings.CEDetected)
            {
                Widgets.CheckboxLabeled(rowRect, "EnableNVForCE".Translate(), ref Storage.NVEnabledForCE);
                rowRect.y += rowHeight * 2f;
                Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
                rowRect.y += Constants.RowGap;
            }



            if (DrawSettings._askToConfirmReset)
            {
                if (!DrawSettings.confirmTimer.IsRunning)
                {
                    DrawSettings.confirmTimer.Start();
                }
                Color color = GUI.color;
                GUI.color = Color.red;
                if (Widgets.ButtonText(rowRect, "NVConfirmReset"))
                {
                    Log.Message("NightVision.DrawSettings.GeneralTab: NVConfirm");

                    Storage.ResetAllSettings();
                    DrawSettings.confirmTimer.Reset();
                }
                GUI.color = color;

                if (DrawSettings.confirmTimer.ElapsedMilliseconds > 5000)
                {
                    DrawSettings._askToConfirmReset = false;
                    DrawSettings.confirmTimer.Reset();
                }
            }
            else
            {
                DrawSettings._askToConfirmReset = Widgets.ButtonText(rowRect, "NVReset");
            }

            Text.Anchor = anchor;
        }
        public static void RaceTab(
            Rect inRect
            )
        {
            int raceCount = Storage.RaceLightMods.Count;

            if (DrawSettings._numberOfCustomRaces == null)
            {
                DrawSettings._numberOfCustomRaces =
                    Storage.RaceLightMods.Count(rlm => rlm.Value.IntSetting == VisionType.NVCustom);
            }

            inRect = inRect.AtZero();
            SettingsHelpers.DrawLightModifiersHeader(ref inRect, "NVRaces".Translate(), "NVRaceNote".Translate());

            //#region Tweaks

            //Constants.RowHeight = Widgets.HorizontalSlider(new Rect(inRect.x, inRect.y, inRect.width, Constants.RowHeight),
            //    Constants.RowHeight,
            //    -100f,
            //    +100f,
            //    true,
            //    $"Tweak RowHeight: {Constants.RowHeight}");
            //inRect.y += 50f;


            //#endregion
            float num = inRect.y + 3f;

            var viewRect = new Rect(
                inRect.x,
                inRect.y,
                inRect.width * 0.9f,
                raceCount
                * (Constants.RowHeight + Constants.RowGap)
                + (float)DrawSettings._numberOfCustomRaces * 100f
                );

            var rowRect = new Rect(inRect.x + 6f, num, inRect.width - 12f, Constants.RowHeight);

            Widgets.BeginScrollView(inRect, ref DrawSettings._raceScrollPosition, viewRect);
            var count = 0;

            foreach (KeyValuePair <ThingDef, Race_LightModifiers> kvp in Storage.RaceLightMods)
            {
                Color givenColor = GUI.color;
                rowRect.y = num;

                if (!kvp.Value.ShouldShowInSettings)
                {
                    if (!Prefs.DevMode)
                    {
                        continue;
                    }

                    GUI.color = Color.grey;
                    Widgets.Label(rowRect.TopPartPixels(20f), "NVDevModeOnly".Translate());
                    rowRect.y += 20;
                    num       += 20;
                }

                DrawSettings._numberOfCustomRaces +=
                    SettingsHelpers.DrawLightModifiersRow(kvp.Key, kvp.Value, rowRect, ref num, true);

                if (!kvp.Value.ShouldShowInSettings)
                {
                    GUI.color = givenColor;
                }

                count++;
                num += Constants.RowHeight + Constants.RowGap;

                if (count < raceCount)
                {
                    Widgets.DrawLineHorizontal(rowRect.x + 6f, num - 5.5f, rowRect.width - 12f);
                }
            }

            Widgets.EndScrollView();
        }
Exemple #8
0
        public void DrawTab(Rect inRect)
        {
            TextAnchor anchor    = Text.Anchor;
            float      rowHeight = Constants.GEN_ROW_HEIGHT;
            var        cache     = Settings.Cache;

            var rowRect = new Rect(
                inRect.width * 0.05f,
                inRect.height * 0.05f,
                inRect.width * 0.9f,
                rowHeight
                );

            Text.Anchor = TextAnchor.MiddleLeft;

            Widgets.Label(rowRect, "NVVanillaMultiExp".Translate());
            rowRect.y += rowHeight + Constants.ROW_GAP;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.ROW_GAP;

            //Night Vision Settings

            Widgets.Label(
                rowRect,
                "NightVisionNVSettingDesc".Translate()
                .ToLower()
                .CapitalizeFirst()
                );

            rowRect.y += rowHeight + Constants.ROW_GAP;

            cache.NVZeroCache = Widgets.HorizontalSlider(
                rowRect,
                cache.NVZeroCache.GetValueOrDefault(),
                cache.MinCache.GetValueOrDefault(),
                cache.MaxCache.GetValueOrDefault(),
                true,
                string.Format(
                    Str.ZeroMultiLabel,
                    cache.NVZeroCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MinCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DEFAULT_ZERO_LIGHT_MULTIPLIER,
                Constants.NVDefaultOffsets[0],
                cache.MinCache.GetValueOrDefault(),
                cache.MaxCache.GetValueOrDefault(),
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 1.5f;

            cache.NVFullCache = Widgets.HorizontalSlider(
                rowRect,
                (float)cache.NVFullCache.GetValueOrDefault(),
                (float)cache.MinCache.GetValueOrDefault(),
                (float)cache.MaxCache.GetValueOrDefault(),
                true,
                string.Format(
                    Str.FullMultiLabel,
                    cache.NVFullCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MinCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DEFAULT_FULL_LIGHT_MULTIPLIER,
                Constants.NVDefaultOffsets[1],
                (float)cache.MinCache.GetValueOrDefault(),
                (float)cache.MaxCache.GetValueOrDefault(),
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 2f;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.ROW_GAP;

            // Photosensitivity settings

            Widgets.Label(
                rowRect,
                "NightVisionPSSettingsDesc".Translate()
                .ToLower()
                .CapitalizeFirst()
                );

            rowRect.y += rowHeight * 1.5f;

            cache.PSZeroCache = Widgets.HorizontalSlider(
                rowRect,
                (float)cache.PSZeroCache,
                (float)cache.MinCache,
                (float)cache.MaxCache,
                true,
                string.Format(
                    Str.ZeroMultiLabel,
                    cache.PSZeroCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MinCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DEFAULT_ZERO_LIGHT_MULTIPLIER,
                Constants.PSDefaultOffsets[0],
                (float)cache.MinCache,
                (float)cache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 1.5f;

            cache.PSFullCache = Widgets.HorizontalSlider(
                rowRect,
                (float)cache.PSFullCache.GetValueOrDefault(),
                (float)cache.MinCache.GetValueOrDefault(),
                (float)cache.MaxCache.GetValueOrDefault(),
                true,
                string.Format(
                    Str.FullMultiLabel,
                    cache.PSFullCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MinCache
                    ),
                string.Format(
                    Str.XLabel,
                    cache.MaxCache
                    ),
                1
                );

            SettingsHelpers.DrawIndicator(
                rowRect,
                Constants.DEFAULT_FULL_LIGHT_MULTIPLIER,
                Constants.PSDefaultOffsets[1],
                (float)cache.MinCache,
                (float)cache.MaxCache,
                IndicatorTex.DefIndicator
                );

            rowRect.y += rowHeight * 2f;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.ROW_GAP;


            Widgets.CheckboxLabeled(rowRect, "NightVisionFlareRaidEnabled".Translate(), ref NVGameComponent.FlareRaidIsEnabled);
            rowRect.y += rowHeight * 2f;
            Widgets.DrawLineHorizontal(rowRect.x + 24f, rowRect.y, rowRect.width - 48f);
            rowRect.y += Constants.ROW_GAP;



            if (_askToConfirmReset)
            {
                if (!confirmTimer.IsRunning)
                {
                    confirmTimer.Start();
                }

                Color color = GUI.color;
                GUI.color = Color.red;

                if (Widgets.ButtonText(rowRect, "NVConfirmReset".Translate()) && confirmTimer.ElapsedMilliseconds > 500)
                {
                    Settings.Store.ResetAllSettings();
                    confirmTimer.Reset();
                }

                GUI.color = color;

                if (confirmTimer.ElapsedMilliseconds > 5000)
                {
                    _askToConfirmReset = false;
                    confirmTimer.Reset();
                }
            }
            else
            {
                _askToConfirmReset = Widgets.ButtonText(rowRect, "NVReset".Translate());
            }

            Text.Anchor = anchor;
        }