Example #1
0
        public WorkMenu(TieredFloatMenu parentWindow, ColonistGroup colonistGroup, Rect originRect, Texture2D backgroundTexture)
            : base(parentWindow, colonistGroup, originRect, backgroundTexture)
        {
            this.options = new List <TieredFloatMenuOption>();

            var takeFive = new TieredFloatMenuOption(Strings.TakeFive, null, Textures.LookBusyButton, Textures.LookBusyButtonHover, null, TextAnchor.MiddleCenter, MenuOptionPriority.High, 0f,
                                                     Textures.LookBusyButton.width - 2f, Strings.TakeFiveTooltip);

            takeFive.action = delegate
            {
                TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                WorkSearchUtility.TakeABreak(BreakType.None, this.colonistGroup.ActivePawns);
            };
            options.Add(takeFive);

            breakIconStates[Textures.ChowHallButton]  = BreakType.ChowHall;
            breakIconStates[Textures.LightsOutButton] = BreakType.LightsOut;

            tooltips[Textures.ChowHallButton]  = Strings.ChowHallToolTip;
            tooltips[Textures.LightsOutButton] = Strings.SleepTooltip;

            for (int i = 0; i < options.Count; i++)
            {
                options[i].SetSizeMode(SizeMode);
            }
        }
Example #2
0
 private static void EndCurrentJobPostfix(Pawn ___pawn, Dictionary <WorkType, WorkState> __state)
 {
     if (__state?.Count > 0)
     {
         foreach (var state in __state.InRandomOrder())
         {
             if (state.Value != WorkState.Inactive && CanWork(___pawn))
             {
                 if (state.Value == WorkState.Active && !CanWorkActive(___pawn))
                 {
                     continue;
                 }
                 var curJob = ___pawn.CurJob;
                 WorkSearchUtility.SearchForWork(state.Key, new List <Pawn> {
                     ___pawn
                 });
                 if (curJob != ___pawn.CurJob)
                 {
                     break;
                 }
                 else if (state.Value == WorkState.Temporary && ___pawn.TryGetGroups(out HashSet <ColonistGroup> groups))
                 {
                     foreach (var group in groups)
                     {
                         group.temporaryWorkers.Remove(___pawn);
                     }
                 }
             }
         }
     }
 }
Example #3
0
        public override void DoWindowContents(Rect rect)
        {
            base.DoWindowContents(rect);
            Text.Anchor = TextAnchor.MiddleCenter;
            var sendRect = new Rect(rect.x + 20, rect.y + 25, Textures.SetClearButton.width, Textures.SetClearButton.height);

            GUI.DrawTexture(sendRect, Textures.SetClearButton);
            Widgets.Label(sendRect, Strings.Send);
            if (Mouse.IsOver(sendRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    var window = new Dialog_FormCaravan(this.colonistGroup.Map);
                    Find.WindowStack.Add(window);
                    Traverse.Create(window).Field("autoSelectFoodAndMedicine").SetValue(this.colonistGroup.travelSuppliesEnabled);
                    List <Pawn> selectedPawns = new List <Pawn>();
                    foreach (var trad in window.transferables)
                    {
                        if (trad.AnyThing is Pawn pawn2 && this.colonistGroup.ActivePawns.Contains(pawn2))
                        {
                            trad.AdjustTo(1);
                            selectedPawns.Add(pawn2);
                        }
                    }
                    Traverse.Create(window).Method("CountToTransferChanged").GetValue();
                    if (!this.colonistGroup.travelSuppliesEnabled && this.colonistGroup.bedrollsEnabled)
                    {
                        this.SelectBedrolls(window, window.transferables, selectedPawns);
                    }
                    this.CloseAllWindows();
                    Event.current.Use();
                }
                GUI.DrawTexture(sendRect, Textures.WorkButtonHover);
            }

            var unloadRect = new Rect(sendRect.xMax - 15, sendRect.yMax + 20, Textures.SetClearButton.width, Textures.SetClearButton.height);

            GUI.DrawTexture(unloadRect, Textures.SetClearButton);
            Widgets.Label(unloadRect, Strings.Unload);
            if (Mouse.IsOver(unloadRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    this.colonistGroup.AssignTemporaryWorkers(WorkTypeEnum.UnloadCaravan);
                    WorkSearchUtility.SearchForWork(WorkTypeEnum.UnloadCaravan, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                GUI.DrawTexture(unloadRect, Textures.WorkButtonHover);
            }

            Text.Anchor = TextAnchor.UpperLeft;
            GUI.color   = Color.white;
        }
Example #4
0
        public WorkMenu(TieredFloatMenu parentWindow, ColonistGroup colonistGroup, Rect originRect, Texture2D backgroundTexture)
            : base(parentWindow, colonistGroup, originRect, backgroundTexture)
        {
            this.options = new List <TieredFloatMenuOption>();

            var lookBusy = new TieredFloatMenuOption(Strings.LookBusy, null, Textures.LookBusyButton, Textures.LookBusyButtonHover, null, TextAnchor.MiddleCenter,
                                                     MenuOptionPriority.High, 0f, Textures.LookBusyButton.width - 2f, Strings.LookBusyTooltip);

            lookBusy.action = delegate
            {
                TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();
                WorkSearchUtility.SearchForWork(WorkType.None, this.colonistGroup.ActivePawns);
            };
            lookBusy.bottomIndent = 400f;
            options.Add(lookBusy);

            var takeFive = new TieredFloatMenuOption(Strings.TakeFive, null, Textures.LookBusyButton, Textures.LookBusyButtonHover, null, TextAnchor.MiddleCenter, MenuOptionPriority.High, 0f,
                                                     Textures.LookBusyButton.width - 2f, Strings.TakeFiveTooltip);

            takeFive.action = delegate
            {
                TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                WorkSearchUtility.TakeABreak(BreakType.None, this.colonistGroup.ActivePawns);
            };
            options.Add(takeFive);

            workIconStates[Textures.ConstructButton] = WorkType.Construction;
            workIconStates[Textures.CraftButton]     = WorkType.Crafting;
            workIconStates[Textures.HaulButton]      = WorkType.Hauling;
            workIconStates[Textures.CleanButton]     = WorkType.Cleaning;
            workIconStates[Textures.HuntButton]      = WorkType.Hunting;
            workIconStates[Textures.CookButton]      = WorkType.Cooking;
            workIconStates[Textures.MineButton]      = WorkType.Mining;
            workIconStates[Textures.ChopWoodButton]  = WorkType.WoodChopping;

            workIconStates[Textures.TailorButton]         = WorkType.Tailor;
            workIconStates[Textures.SmithButton]          = WorkType.Smith;
            workIconStates[Textures.FireExtinguishButton] = WorkType.FireExtinguish;
            workIconStates[Textures.ArtButton]            = WorkType.Art;

            workIconStates[Textures.FarmButton]      = WorkType.Plants;
            workIconStates[Textures.HandleButton]    = WorkType.Handle;
            workIconStates[Textures.WardenButton]    = WorkType.Warden;
            workIconStates[Textures.ClearSnowButton] = WorkType.ClearSnow;

            breakIconStates[Textures.ChowHallButton]  = BreakType.ChowHall;
            breakIconStates[Textures.LightsOutButton] = BreakType.LightsOut;

            tooltips[Textures.ConstructButton] = Strings.WorkTaskTooltipConstruction;
            tooltips[Textures.CraftButton]     = Strings.WorkTaskTooltipCraft;
            tooltips[Textures.HaulButton]      = Strings.WorkTaskTooltipHaul;
            tooltips[Textures.CleanButton]     = Strings.WorkTaskTooltipClean;
            tooltips[Textures.HuntButton]      = Strings.WorkTaskTooltipHunt;
            tooltips[Textures.CookButton]      = Strings.WorkTaskTooltipCook;
            tooltips[Textures.MineButton]      = Strings.WorkTaskTooltipMine;
            tooltips[Textures.ChopWoodButton]  = Strings.WorkTaskTooltipChopWood;
            tooltips[Textures.FarmButton]      = Strings.WorkTaskTooltipFarm;
            tooltips[Textures.ClearSnowButton] = Strings.WorkTaskTooltipClearSnow;
            tooltips[Textures.WardenButton]    = Strings.WorkTaskTooltipWarden;

            tooltips[Textures.TailorButton]         = Strings.WorkTaskTooltipTailor;
            tooltips[Textures.SmithButton]          = Strings.WorkTaskTooltipSmith;
            tooltips[Textures.HandleButton]         = Strings.WorkTaskTooltipHandle;
            tooltips[Textures.FireExtinguishButton] = Strings.WorkTaskTooltipFireExtinguish;
            tooltips[Textures.ArtButton]            = Strings.WorkTaskTooltipArt;

            tooltips[Textures.ChowHallButton]  = Strings.ChowHallToolTip;
            tooltips[Textures.LightsOutButton] = Strings.SleepTooltip;


            for (int i = 0; i < options.Count; i++)
            {
                options[i].SetSizeMode(SizeMode);
            }
        }
Example #5
0
        public override void DoWindowContents(Rect rect)
        {
            base.DoWindowContents(rect);
            Vector2 zero = Vector2.zero;

            zero += InitialFloatOptionPositionShift;
            for (int i = 0; i < options.Count; i++)
            {
                TieredFloatMenuOption floatMenuOption = options[i];
                Rect rect2 = new Rect(zero.x, zero.y, (this.backgroundTexture.width - InitialFloatOptionPositionShift.x) / 1.2f, floatMenuOption.curIcon.height);
                if (floatMenuOption.DoGUI(rect2, this))
                {
                    Find.WindowStack.TryRemove(this);
                    break;
                }
                zero.y += floatMenuOption.bottomIndent;
            }

            var rect3    = new Rect(rect.x + zero.x, rect.y + 75f, rect.width, rect.height);
            var iconRows = GetWorkIconRows(2);

            for (var i = 0; i < iconRows.Count; i++)
            {
                for (var j = 0; j < iconRows[i].Count; j++)
                {
                    Rect iconRect = new Rect(rect3.x + (j * iconRows[i][j].width) + j * 10, rect3.y + (i * iconRows[i][j].height) + i * 7,
                                             iconRows[i][j].width, iconRows[i][j].height);
                    GUI.DrawTexture(iconRect, iconRows[i][j]);
                    if (this.colonistGroup.activeWorkTypes.TryGetValue(workIconStates[iconRows[i][j]], out WorkState state2))
                    {
                        if (state2 == WorkState.Active)
                        {
                            GUI.DrawTexture(iconRect, Textures.Clock);
                        }
                        else if (state2 == WorkState.ForcedLabor)
                        {
                            GUI.DrawTexture(iconRect, Textures.ClockSlave);
                        }
                    }
                    TooltipHandler.TipRegion(iconRect, tooltips[iconRows[i][j]] + "\n" + Strings.ForcedLaborTooltip);
                    if (Mouse.IsOver(iconRect))
                    {
                        GUI.DrawTexture(iconRect, Textures.WorkButtonHover);
                        if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                        {
                            this.colonistGroup.RemoveWorkState(workIconStates[iconRows[i][j]]);
                            TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();
                            WorkSearchUtility.SearchForWork(workIconStates[iconRows[i][j]], this.colonistGroup.ActivePawns);
                            Event.current.Use();
                        }
                        else if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Event.current.clickCount == 1)
                        {
                            this.colonistGroup.ChangeWorkState(workIconStates[iconRows[i][j]]);
                            if (this.colonistGroup.activeWorkTypes[workIconStates[iconRows[i][j]]] == WorkState.ForcedLabor)
                            {
                                TacticDefOf.TG_SlaveLaborSFX.PlayOneShotOnCamera();
                            }
                            else
                            {
                                TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                            }
                            WorkSearchUtility.SearchForWork(workIconStates[iconRows[i][j]], this.colonistGroup.ActivePawns);
                            Event.current.Use();
                        }
                    }
                }
            }

            var rect4     = new Rect(rect.x + zero.x, rect.y + 475f, rect.width, rect.height);
            var iconRows2 = GetBreakIconRows(2);

            for (var i = 0; i < iconRows2.Count; i++)
            {
                for (var j = 0; j < iconRows2[i].Count; j++)
                {
                    Rect iconRect = new Rect(rect4.x + (j * iconRows2[i][j].width) + j * 10, rect4.y + (i * iconRows2[i][j].height) + i * 7,
                                             iconRows2[i][j].width, iconRows2[i][j].height);
                    GUI.DrawTexture(iconRect, iconRows2[i][j]);
                    TooltipHandler.TipRegion(iconRect, tooltips[iconRows2[i][j]]);

                    if (Mouse.IsOver(iconRect))
                    {
                        GUI.DrawTexture(iconRect, Textures.WorkButtonHover);
                        if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                        {
                            if (breakIconStates[iconRows2[i][j]] == BreakType.LightsOut)
                            {
                                TacticDefOf.TG_LightsOutSFX.PlayOneShotOnCamera();
                            }
                            else if (breakIconStates[iconRows2[i][j]] == BreakType.ChowHall)
                            {
                                TacticDefOf.TG_ChowTimeSFX.PlayOneShotOnCamera();
                            }
                            WorkSearchUtility.TakeABreak(breakIconStates[iconRows2[i][j]], this.colonistGroup.ActivePawns);
                            Event.current.Use();
                        }
                    }
                }
            }

            var workRows     = GetWorkTypeRows(2);
            var initialRect  = new Rect((rect.x + rect.width) - 245, rect.y + 75, 240, rect.height - 95);
            var workMenuRect = new Rect(initialRect);

            workMenuRect.height -= 103;

            DoManualPrioritiesCheckbox(new Rect(workMenuRect.x, rect.y + 30, workMenuRect.width, 40));
            float listHeight = workRows.Count * 33 + (workRows.Count * 2);
            Rect  rect5      = new Rect(0f, 0f, workMenuRect.width - 16f, listHeight);

            Widgets.BeginScrollView(workMenuRect, ref scrollPosition, rect5);

            for (var i = 0; i < workRows.Count; i++)
            {
                for (var j = 0; j < workRows[i].Count; j++)
                {
                    Rect workRect = new Rect(rect5.x + (j * 20) + j * 91.5f, rect5.y + (i * 17) + i * 17, 24, 24);
                    this.DoWorkCell(workRect, workRows[i][j]);
                    this.DoWorkHeader(workRect, workRows[i][j]);
                }
            }
            Widgets.EndScrollView();
            DrawExtraGui(rect);


            var caravanButtonRect = new Rect(initialRect.x + 155, rect.y + 23, Textures.CaravanButton.width, Textures.CaravanButton.height);

            GUI.DrawTexture(caravanButtonRect, Textures.CaravanButton);
            if (Mouse.IsOver(caravanButtonRect))
            {
                GUI.DrawTexture(caravanButtonRect, Textures.CaravanHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();

                    var floatMenu = new CaravanMenu(this, this.colonistGroup, this.windowRect, Textures.CaravanMenu);
                    this.OpenNewMenu(floatMenu);
                    Event.current.Use();
                }
            }


            var researchWorkRect = new Rect(rect.x + 253, rect.y + 459, Textures.ResearchWorkButton.width, Textures.ResearchWorkButton.height);

            GUI.DrawTexture(researchWorkRect, Textures.ResearchWorkButton);
            if (this.colonistGroup.activeWorkTypes.TryGetValue(WorkType.Research, out WorkState state))
            {
                if (state == WorkState.Active)
                {
                    GUI.DrawTexture(researchWorkRect, Textures.Clock, ScaleMode.ScaleToFit);
                }
                else if (state == WorkState.ForcedLabor)
                {
                    GUI.DrawTexture(researchWorkRect, Textures.ClockSlave, ScaleMode.ScaleToFit);
                }
            }

            Text.Anchor = TextAnchor.MiddleCenter;
            var researchLabel = new Rect(researchWorkRect.x + 30, researchWorkRect.y - 25, 80, 24);

            Widgets.Label(researchLabel, Strings.WorkTaskTooltipResearch);
            Text.Anchor = TextAnchor.UpperLeft;

            TooltipHandler.TipRegion(researchWorkRect, Strings.WorkTaskTooltipResearch + "\n" + Strings.ForcedLaborTooltip);
            if (Mouse.IsOver(researchWorkRect))
            {
                GUI.DrawTexture(researchWorkRect, Textures.ResearchHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ResearchSFX.PlayOneShotOnCamera();
                    this.colonistGroup.RemoveWorkState(WorkType.Research);
                    WorkSearchUtility.SearchForWork(WorkType.Research, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                else if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    this.colonistGroup.ChangeWorkState(WorkType.Research);
                    WorkSearchUtility.SearchForWork(WorkType.Research, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
            }
            var researchMenuRect = new Rect(researchWorkRect.x + 89, researchWorkRect.y, Textures.ResearchMenuButton.width, Textures.ResearchMenuButton.height);

            GUI.DrawTexture(researchMenuRect, Textures.ResearchMenuButton);
            if (Mouse.IsOver(researchMenuRect))
            {
                GUI.DrawTexture(researchMenuRect, Textures.ResearchHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    Find.MainTabsRoot.ToggleTab(MainButtonDefOf.Research);
                    Event.current.Use();
                }
            }
            TooltipHandler.TipRegion(researchMenuRect, Strings.WorkTaskTooltipResearchMenu);
            GUI.color = Color.white;
        }
Example #6
0
        public override void DrawExtraGui(Rect rect)
        {
            base.DrawExtraGui(rect);
            Vector2 zero        = Vector2.zero + InitialFloatOptionPositionShift;
            var     tendWounded = new Rect(zero.x + 10, rect.y + 407, Textures.TendWounded.width, Textures.TendWounded.height);

            GUI.DrawTexture(tendWounded, Textures.TendWounded);
            if (this.colonistGroup.activeWorkTypes.TryGetValue(WorkType.TendWounded, out WorkState state))
            {
                if (state == WorkState.Active)
                {
                    GUI.DrawTexture(tendWounded, Textures.Clock);
                }
                else if (state == WorkState.ForcedLabor)
                {
                    GUI.DrawTexture(tendWounded, Textures.ClockSlave);
                }
            }
            if (Mouse.IsOver(tendWounded))
            {
                GUI.DrawTexture(tendWounded, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    this.colonistGroup.RemoveWorkState(WorkType.TendWounded);
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    WorkSearchUtility.SearchForWork(WorkType.TendWounded, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                else if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Event.current.clickCount == 1)
                {
                    this.colonistGroup.ChangeWorkState(WorkType.TendWounded);
                    if (this.colonistGroup.activeWorkTypes[WorkType.TendWounded] == WorkState.ForcedLabor)
                    {
                        TacticDefOf.TG_SlaveLaborSFX.PlayOneShotOnCamera();
                    }
                    else
                    {
                        TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();
                    }
                    WorkSearchUtility.SearchForWork(WorkType.TendWounded, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                TooltipHandler.TipRegion(tendWounded, Strings.ForcedLaborTooltip);
            }
            TooltipHandler.TipRegion(tendWounded, Strings.TendWoundedTooltip);
            var rescureFallen = new Rect(((zero.x + Textures.LookBusyButton.width) - (Textures.RescueFallen.width + 11f)) - 10f, tendWounded.y, Textures.RescueFallen.width, Textures.RescueFallen.height);

            GUI.DrawTexture(rescureFallen, Textures.RescueFallen);
            if (this.colonistGroup.activeWorkTypes.TryGetValue(WorkType.RescueFallen, out WorkState state2))
            {
                if (state2 == WorkState.Active)
                {
                    GUI.DrawTexture(rescureFallen, Textures.Clock);
                }
                else if (state2 == WorkState.ForcedLabor)
                {
                    GUI.DrawTexture(rescureFallen, Textures.ClockSlave);
                }
            }
            if (Mouse.IsOver(rescureFallen))
            {
                GUI.DrawTexture(rescureFallen, Textures.RescueTendHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    this.colonistGroup.RemoveWorkState(WorkType.RescueFallen);
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    WorkSearchUtility.SearchForWork(WorkType.RescueFallen, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                else if (Event.current.type == EventType.MouseDown && Event.current.button == 1 && Event.current.clickCount == 1)
                {
                    this.colonistGroup.ChangeWorkState(WorkType.RescueFallen);
                    if (this.colonistGroup.activeWorkTypes[WorkType.RescueFallen] == WorkState.ForcedLabor)
                    {
                        TacticDefOf.TG_SlaveLaborSFX.PlayOneShotOnCamera();
                    }
                    else
                    {
                        TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();
                    }
                    WorkSearchUtility.SearchForWork(WorkType.RescueFallen, this.colonistGroup.ActivePawns);
                    Event.current.Use();
                }
                GUI.DrawTexture(rescureFallen, Textures.RescueTendHover);
                TooltipHandler.TipRegion(rescureFallen, Strings.ForcedLaborTooltip);
            }
            TooltipHandler.TipRegion(rescureFallen, Strings.RescueDownedTooltip);
            var shooterIconRect = new Rect(rect.x + 10, rect.y + 25f, Textures.ShootingIcon.width, Textures.ShootingIcon.height);

            GUI.DrawTexture(shooterIconRect, Textures.ShootingIcon);
            if (Mouse.IsOver(shooterIconRect))
            {
                GUI.DrawTexture(shooterIconRect, Textures.ShootingMeleeHover);
            }
            var shooters         = this.colonistGroup.ActivePawns.Where(x => x.equipment?.Primary?.def.IsRangedWeapon ?? false);
            var shooterCountRect = new Rect(shooterIconRect.x + shooterIconRect.width + 2f, shooterIconRect.y, 30, shooterIconRect.height);

            Text.Anchor = TextAnchor.MiddleLeft;
            Widgets.Label(shooterCountRect, shooters.Count().ToString());
            var totalShooterRect = new Rect(shooterIconRect.x, shooterIconRect.y, Textures.ShootingIcon.width + 25, shooterIconRect.height).ExpandedBy(5f);

            TooltipHandler.TipRegion(totalShooterRect, Strings.ShootersToolTip);
            if (Mouse.IsOver(totalShooterRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    Find.Selector.ClearSelection();
                    foreach (var shooter in shooters)
                    {
                        Find.Selector.Select(shooter);
                    }
                    Event.current.Use();
                }
            }
            Text.Anchor = TextAnchor.MiddleCenter;
            var middlePawnCountRect = new Rect(totalShooterRect.x + totalShooterRect.width, totalShooterRect.y, 70, totalShooterRect.height);
            var capablePawns        = this.colonistGroup.ActivePawns.Where(x => !x.IsDownedOrIncapable());

            Widgets.Label(middlePawnCountRect, capablePawns.Count() + " / " + this.colonistGroup.ActivePawns.Count);

            TooltipHandler.TipRegion(middlePawnCountRect, Strings.MiddlePawnCountToolTip);
            if (Mouse.IsOver(middlePawnCountRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    Find.Selector.ClearSelection();
                    foreach (var pawn in capablePawns)
                    {
                        Find.Selector.Select(pawn);
                    }
                    Event.current.Use();
                }
            }

            var meleeIconRect = new Rect((rect.x + rect.width) - 35, rect.y + 25f, Textures.MeleeIcon.width, Textures.MeleeIcon.height);

            GUI.DrawTexture(meleeIconRect, Textures.MeleeIcon);
            if (Mouse.IsOver(meleeIconRect))
            {
                GUI.DrawTexture(meleeIconRect, Textures.ShootingMeleeHover);
            }

            var melees         = this.colonistGroup.ActivePawns.Where(x => x.equipment?.Primary?.def.IsMeleeWeapon ?? false);
            var meleeCountRect = new Rect(meleeIconRect.x - (Textures.MeleeIcon.width + 5f), meleeIconRect.y, 30, meleeIconRect.height);

            Text.Anchor = TextAnchor.MiddleRight;
            Widgets.Label(meleeCountRect, melees.Count().ToString());

            var totalMeleeRect = new Rect(meleeCountRect.x, meleeIconRect.y, meleeIconRect.width + meleeCountRect.width, meleeIconRect.height).ExpandedBy(5f);

            TooltipHandler.TipRegion(totalMeleeRect, Strings.MeleeToolTip);

            if (Mouse.IsOver(totalMeleeRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    Find.Selector.ClearSelection();
                    foreach (var melee in melees)
                    {
                        Find.Selector.Select(melee);
                    }
                    Event.current.Use();
                }
            }
            Text.Anchor = TextAnchor.MiddleCenter;

            var rectY   = (rect.height / 2f) - 30f;
            var setRect = new Rect(zero.x, rectY, Textures.SetClearButton.width, Textures.SetClearButton.height);

            GUI.DrawTexture(setRect, Textures.SetClearButton);
            Widgets.Label(setRect, Strings.Set);
            TooltipHandler.TipRegion(setRect, Strings.BattleStationsSetTooltip);

            if (Mouse.IsOver(setRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    this.colonistGroup.SetBattleStations();
                    Event.current.Use();
                }
                GUI.DrawTexture(setRect, Textures.WorkButtonHover);
            }
            var clearRect = new Rect((zero.x + (Textures.MenuButton.width - Textures.SetClearButton.width)) - 12f, rectY, Textures.SetClearButton.width, Textures.SetClearButton.height);

            GUI.DrawTexture(clearRect, Textures.SetClearButton);
            Widgets.Label(clearRect, Strings.Clear);
            TooltipHandler.TipRegion(clearRect, Strings.BattleStationsClearTooltip);
            if (Mouse.IsOver(clearRect))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    this.colonistGroup.ClearBattleStations();
                    Event.current.Use();
                }
                GUI.DrawTexture(clearRect, Textures.WorkButtonHover);
            }

            var upgradeArmorRect = new Rect(zero.x - 8f, rect.height / 1.76f, Textures.UpgradeArmorIcon.width, Textures.UpgradeArmorIcon.height);

            GUI.DrawTexture(upgradeArmorRect, Textures.UpgradeArmorIcon);
            TooltipHandler.TipRegion(upgradeArmorRect, Strings.UpgradeArmorTooltip);

            if (Mouse.IsOver(upgradeArmorRect))
            {
                GUI.DrawTexture(upgradeArmorRect, Textures.UpgradeIconHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_UpgradeArmorWeaponsSFX.PlayOneShotOnCamera();
                    foreach (var pawn in this.colonistGroup.ActivePawns)
                    {
                        var thing = TacticUtils.PickBestArmorFor(pawn);
                        if (thing != null)
                        {
                            var job = JobMaker.MakeJob(JobDefOf.Wear, thing);
                            job.locomotionUrgency = LocomotionUrgency.Sprint;
                            pawn.jobs.TryTakeOrderedJob(job);
                        }
                    }
                    Event.current.Use();
                }
            }

            var takeBuffRect = new Rect(upgradeArmorRect.x + 56, upgradeArmorRect.y, Textures.TakeBuffButton.width, Textures.TakeBuffButton.height);

            GUI.DrawTexture(takeBuffRect, Textures.TakeBuffButton);
            TooltipHandler.TipRegion(takeBuffRect, Strings.TakeBuffTooltip);
            if (Mouse.IsOver(takeBuffRect))
            {
                GUI.DrawTexture(takeBuffRect, Textures.TakeBuffButtonHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_TakeBuffSFX.PlayOneShotOnCamera();
                    foreach (var pawn in this.colonistGroup.ActivePawns)
                    {
                        var jbg    = new JobGiver_TakeCombatEnhancingDrug();
                        var result = jbg.TryIssueJobPackage(pawn, default(JobIssueParams));
                        if (result.Job != null)
                        {
                            pawn.jobs.TryTakeOrderedJob(result.Job);
                        }
                    }
                    Event.current.Use();
                }
            }

            var upgradeWeaponRect = new Rect((rect.x + rect.width) - (20 + Textures.UpgradeWeaponIcon.width), upgradeArmorRect.y, Textures.UpgradeWeaponIcon.width, Textures.UpgradeWeaponIcon.height);

            GUI.DrawTexture(upgradeWeaponRect, Textures.UpgradeWeaponIcon);
            TooltipHandler.TipRegion(upgradeWeaponRect, Strings.UpgradeWeaponTooltip);
            if (Mouse.IsOver(upgradeWeaponRect))
            {
                GUI.DrawTexture(upgradeWeaponRect, Textures.UpgradeIconHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_UpgradeWeaponSFX.PlayOneShotOnCamera();
                    foreach (var pawn in this.colonistGroup.ActivePawns)
                    {
                        var thing = TacticUtils.PickBestWeaponFor(pawn);
                        if (thing != null)
                        {
                            if (pawn.inventory?.innerContainer?.InnerListForReading?.Contains(thing) ?? false)
                            {
                                TacticUtils.TrySwitchToWeapon(thing as ThingWithComps, pawn);
                            }
                            else if (thing != pawn.equipment?.Primary)
                            {
                                var job = JobMaker.MakeJob(JobDefOf.Equip, thing);
                                job.locomotionUrgency = LocomotionUrgency.Sprint;
                                pawn.jobs.TryTakeOrderedJob(job);
                            }
                        }
                    }
                    Event.current.Use();
                }
            }

            var totalArmorRect = new Rect(rect.x + 10f, rect.height - 43, Textures.ArmorIcon.width, Textures.ArmorIcon.height);

            GUI.DrawTexture(totalArmorRect, Textures.ArmorIcon);
            Text.Anchor = TextAnchor.LowerLeft;
            var totalArmorLabel = new Rect(totalArmorRect.x + totalArmorRect.width + 2, totalArmorRect.y - 3, 30, 24);
            var armorValues     = new List <float>();

            foreach (var pawn in this.colonistGroup.ActivePawns)
            {
                if (pawn.apparel.WornApparel != null)
                {
                    var armorValue = TacticUtils.OverallArmorValue(pawn);
                    armorValues.Add(armorValue);
                }
            }
            var averageArmor = armorValues.Sum() / this.colonistGroup.ActivePawns.Count();

            Widgets.Label(totalArmorLabel, averageArmor.ToStringDecimalIfSmall());
            TooltipHandler.TipRegion(totalArmorLabel, Strings.ArmorTooltip);

            Text.Anchor = TextAnchor.MiddleCenter;
            var totalDPSLabel = new Rect(totalArmorRect.x + totalArmorRect.width + 50, totalArmorRect.y - 3, 30, 24);
            var dpsValues     = new List <float>();

            foreach (var pawn in this.colonistGroup.ActivePawns)
            {
                if (pawn.equipment.Primary != null)
                {
                    dpsValues.Add(TacticUtils.WeaponScoreGain(pawn.equipment.Primary));
                }
                else
                {
                    dpsValues.Add(pawn.GetStatValue(StatDefOf.MeleeDPS));
                }
            }

            var averageDPS = dpsValues.Average();

            Widgets.Label(totalDPSLabel, averageDPS.ToStringDecimalIfSmall());
            TooltipHandler.TipRegion(totalDPSLabel, Strings.DPSTooltip);
            var rankTexture = GetCurRank(averageDPS + averageArmor);
            var rankRect    = new Rect((rect.x + rect.width) - (rankTexture.width + 12f), totalArmorRect.y - 10f, rankTexture.width, rankTexture.height);

            GUI.DrawTexture(rankRect, rankTexture);
            TooltipHandler.TipRegion(rankRect, Strings.RankTooltip);
            Text.Anchor = TextAnchor.UpperLeft;
        }
Example #7
0
        public override void DoWindowContents(Rect rect)
        {
            base.DoWindowContents(rect);
            Vector2 zero = Vector2.zero;

            zero += InitialFloatOptionPositionShift;
            for (int i = 0; i < options.Count; i++)
            {
                TieredFloatMenuOption floatMenuOption = options[i];
                Rect rect2 = new Rect(zero.x, zero.y, (this.backgroundTexture.width - InitialFloatOptionPositionShift.x) / 1.2f, floatMenuOption.curIcon.height);
                if (floatMenuOption.DoGUI(rect2, this))
                {
                    Find.WindowStack.TryRemove(this);
                    break;
                }
                zero.y += floatMenuOption.bottomIndent;
            }

            var getBreakIconRect = new Rect(rect.x + zero.x, rect.y + 475f, rect.width, rect.height);
            var iconRows         = GetBreakIconRows(2);

            for (var i = 0; i < iconRows.Count; i++)
            {
                for (var j = 0; j < iconRows[i].Count; j++)
                {
                    Rect iconRect = new Rect(getBreakIconRect.x + (j * iconRows[i][j].width) + j * 10, getBreakIconRect.y + (i * iconRows[i][j].height) + i * 7,
                                             iconRows[i][j].width, iconRows[i][j].height);
                    GUI.DrawTexture(iconRect, iconRows[i][j]);
                    TooltipHandler.TipRegion(iconRect, tooltips[iconRows[i][j]]);

                    if (Mouse.IsOver(iconRect))
                    {
                        GUI.DrawTexture(iconRect, Textures.WorkButtonHover);
                        if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                        {
                            if (breakIconStates[iconRows[i][j]] == BreakType.LightsOut)
                            {
                                TacticDefOf.TG_LightsOutSFX.PlayOneShotOnCamera();
                            }
                            else if (breakIconStates[iconRows[i][j]] == BreakType.ChowHall)
                            {
                                TacticDefOf.TG_ChowTimeSFX.PlayOneShotOnCamera();
                            }
                            WorkSearchUtility.TakeABreak(breakIconStates[iconRows[i][j]], this.colonistGroup.ActivePawns);
                            Event.current.Use();
                        }
                    }
                }
            }

            var workRows     = GetWorkTypeRows(2);
            var initialRect  = new Rect(rect.x, rect.y + 75, 320, rect.height - 95);
            var workMenuRect = new Rect(initialRect);

            workMenuRect.height -= 103;
            var resetWorkPriorities = new Rect(workMenuRect.x + 20, rect.y + 32, Textures.ResetIcon.width, Textures.ResetIcon.height);

            GUI.DrawTexture(resetWorkPriorities, Textures.ResetIcon);
            if (Mouse.IsOver(resetWorkPriorities))
            {
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    this.colonistGroup.groupWorkPriorities?.Clear();
                    Event.current.Use();
                }
                TooltipHandler.TipRegion(resetWorkPriorities, Strings.GroupWorkPrioritiesReset);
            }

            var manualPrioritiesRect = new Rect(resetWorkPriorities.xMax + 10, rect.y + 30, 162, 40);

            DoManualPrioritiesCheckbox(manualPrioritiesRect);
            float listHeight   = workRows.Count * 33 + (workRows.Count * 2);
            Rect  workCellRect = new Rect(0f, 0f, workMenuRect.width - 16f, listHeight);

            Widgets.BeginScrollView(workMenuRect, ref scrollPosition, workCellRect);

            for (var i = 0; i < workRows.Count; i++)
            {
                for (var j = 0; j < workRows[i].Count; j++)
                {
                    Rect      workTypeRect = new Rect(workCellRect.x + (j * 72) + (j * 72) + 17.5f, (workCellRect.y + (i * 17) + (i * 17)) + 8, Textures.WorkSelectEmpty.width, Textures.WorkSelectEmpty.height);
                    var       workDictData = this.colonistGroup.activeWorkTypes.FirstOrDefault(x => x.Key.workTypeDef == workRows[i][j]);
                    WorkState workState;
                    if (workDictData.Key != null)
                    {
                        workState = workDictData.Value;
                    }
                    else
                    {
                        workState = WorkState.Inactive;
                    }

                    switch (workState)
                    {
                    case WorkState.Temporary:
                    case WorkState.Inactive:
                        GUI.DrawTexture(workTypeRect, Textures.WorkSelectEmpty);
                        TooltipHandler.TipRegion(workTypeRect, Strings.WorkTypeLeftClickToApply);
                        break;

                    case WorkState.Active:
                        GUI.DrawTexture(workTypeRect, Textures.WorkSelectBlue);
                        TooltipHandler.TipRegion(workTypeRect, Strings.WorkTypeForcedLabor);
                        break;

                    case WorkState.ForcedLabor:
                        GUI.DrawTexture(workTypeRect, Textures.WorkSelectRed);
                        TooltipHandler.TipRegion(workTypeRect, Strings.WorkTypeSlaveLabor);
                        break;
                    }

                    if (Mouse.IsOver(workTypeRect))
                    {
                        if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                        {
                            WorkSearchUtility.SearchForWork(workRows[i][j], this.colonistGroup.pawns);
                            this.colonistGroup.ChangeWorkState(workRows[i][j]);
                            Event.current.Use();
                        }
                    }
                    Rect workRect = new Rect(workTypeRect.xMax + 5, workTypeRect.y - 8, 24, 24);
                    this.DoWorkCell(workRect, workRows[i][j]);
                    this.DoWorkHeader(workRect, workRows[i][j]);
                }
            }
            Widgets.EndScrollView();
            DrawExtraGui(rect);

            var caravanButtonRect = new Rect(manualPrioritiesRect.xMax + 5, rect.y + 23, Textures.CaravanButton.width, Textures.CaravanButton.height);

            GUI.DrawTexture(caravanButtonRect, Textures.CaravanButton);
            if (Mouse.IsOver(caravanButtonRect))
            {
                GUI.DrawTexture(caravanButtonRect, Textures.CaravanHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_WorkSFX.PlayOneShotOnCamera();

                    var floatMenu = new CaravanMenu(this, this.colonistGroup, this.windowRect, Textures.CaravanMenu);
                    this.OpenNewMenu(floatMenu);
                    Event.current.Use();
                }
            }


            var researchMenuRect = new Rect(rect.x + 253, rect.y + 459, Textures.ResearchWorkButton.width, Textures.ResearchWorkButton.height);

            GUI.DrawTexture(researchMenuRect, Textures.ResearchMenuButton);
            if (Mouse.IsOver(researchMenuRect))
            {
                GUI.DrawTexture(researchMenuRect, Textures.ResearchHover);
                if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && Event.current.clickCount == 1)
                {
                    TacticDefOf.TG_ClickSFX.PlayOneShotOnCamera();
                    Find.MainTabsRoot.ToggleTab(MainButtonDefOf.Research);
                    Event.current.Use();
                }
            }
            TooltipHandler.TipRegion(researchMenuRect, Strings.WorkTaskTooltipResearchMenu);
            GUI.color = Color.white;
        }