diff --git a/Languages/English/Keyed/Keyed-English.xml b/Languages/English/Keyed/Keyed-English.xml index 1d18a97..42e612b 100644 --- a/Languages/English/Keyed/Keyed-English.xml +++ b/Languages/English/Keyed/Keyed-English.xml @@ -27,6 +27,8 @@ Play a crunchy sound when a pawn is assigned to a job they are not skilled at? Disable Scrollwheel Disable the scrollwheel functions (when hovering over skills) + Highlight Active Work Cells + Highlight the grid squares in the work tab when the pawn is actually working that job right now. Vertical labels Display work labels vertically Fix vertical fonts diff --git a/Source/Core/Settings.cs b/Source/Core/Settings.cs index f0cb3cc..44855dc 100644 --- a/Source/Core/Settings.cs +++ b/Source/Core/Settings.cs @@ -13,6 +13,7 @@ public class Settings: ModSettings { public static bool playSounds = true; public static bool TwentyFourHourMode = true; public static bool verticalLabels = true; + public static bool highlightActiveWorkCells; private static string _defaultPriorityBuffer = defaultPriority.ToString(); // public static bool sharedFavourites = true; @@ -51,6 +52,8 @@ public static void DoWindowContents(Rect rect) { "WorkTab.PlayCrunchTip".Translate()); options.CheckboxLabeled("WorkTab.DisableScrollwheel".Translate(), ref disableScrollwheel, "WorkTab.DisableScrollwheelTip".Translate()); + options.CheckboxLabeled("WorkTab.HighlightActiveWorkCells".Translate(), ref highlightActiveWorkCells, + "WorkTab.HighlightActiveWorkCellsTip".Translate()); bool verticalLabelsBuffer = verticalLabels; options.CheckboxLabeled("WorkTab.VerticalLabels".Translate(), ref verticalLabelsBuffer, "WorkTab.VerticalLabelsTip".Translate()); @@ -87,6 +90,7 @@ public override void ExposeData() { Scribe_Values.Look(ref playCrunch, "PlayCrunch", true); Scribe_Values.Look(ref disableScrollwheel, "DisableScrollwheel"); Scribe_Values.Look(ref verticalLabels, "VerticalLabels", true); + Scribe_Values.Look(ref highlightActiveWorkCells, "HighlightActiveWorkCells"); Scribe_Values.Look(ref _fontFix, "FontFix", true); // apply font-fix on load diff --git a/Source/PawnColumns/PawnColumnWorker_WorkGiver.cs b/Source/PawnColumns/PawnColumnWorker_WorkGiver.cs index f8dd1c1..6b0b9f6 100644 --- a/Source/PawnColumns/PawnColumnWorker_WorkGiver.cs +++ b/Source/PawnColumns/PawnColumnWorker_WorkGiver.cs @@ -57,6 +57,16 @@ public override void DoCell(Rect rect, Pawn pawn, PawnTable table) { WorkGiverDef workgiver = WorkGiver; + if (Settings.highlightActiveWorkCells) + { + bool doingNow = (pawn.CurJob?.workGiverDef?.defName == workgiver?.defName); + if (doingNow) + { + GUI.color = Color.white; + GUI.DrawTexture(rect.ContractedBy(-2f), DrawUtilities.getActiveHighlightBox()); + } + } + // create rect in centre of cell, slightly offsetting left to give the appearance of aligning to worktype. Vector2 pos = rect.center - (new Vector2( WorkGiverBoxSize, WorkGiverBoxSize ) / 2f); Rect box = new Rect( pos.x - 2f, pos.y, WorkGiverBoxSize, WorkGiverBoxSize ); diff --git a/Source/PawnColumns/PawnColumnWorker_WorkType.cs b/Source/PawnColumns/PawnColumnWorker_WorkType.cs index d1d2524..3356ba1 100644 --- a/Source/PawnColumns/PawnColumnWorker_WorkType.cs +++ b/Source/PawnColumns/PawnColumnWorker_WorkType.cs @@ -82,6 +82,16 @@ public override void DoCell(Rect rect, Pawn pawn, PawnTable table) { bool incapable = IncapableOfWholeWorkType( pawn ); WorkTypeDef worktype = def.workType; + if (Settings.highlightActiveWorkCells) + { + bool doingNow = (pawn.CurJob?.workGiverDef?.workType?.defName == worktype?.defName); + if (doingNow) + { + GUI.color = Color.white; + GUI.DrawTexture(rect.ContractedBy(-2f), DrawUtilities.getActiveHighlightBox()); + } + } + // create rect in centre of cell Vector2 pos = rect.center - (new Vector2( WorkTypeBoxSize, WorkTypeBoxSize ) / 2f); Rect box = new Rect( pos.x, pos.y, WorkTypeBoxSize, WorkTypeBoxSize ); diff --git a/Source/Utilities/DrawUtilities.cs b/Source/Utilities/DrawUtilities.cs index 6cd3d2b..7ae1e30 100644 --- a/Source/Utilities/DrawUtilities.cs +++ b/Source/Utilities/DrawUtilities.cs @@ -70,6 +70,25 @@ public static void DrawWorkBoxBackground(Rect box, Pawn pawn, WorkTypeDef workty _drawWorkBoxBackgroundMethodInfo.Invoke(null, new object[] { box, pawn, worktype }); } + private static Texture2D activeHighlightBox; + public static Texture2D getActiveHighlightBox() + { + if (activeHighlightBox != null) + { + return activeHighlightBox; + } + Color color = Color.magenta; + Texture2D startingExample = WidgetsWork.WorkBoxOverlay_PreceptWarning; + int width = startingExample.width; + int height = startingExample.height; + Texture2D texture = new Texture2D(width, height); + Color[] pixels = Enumerable.Repeat(color, width * height).ToArray(); + texture.SetPixels(pixels); + texture.Apply(); + activeHighlightBox = texture; + return activeHighlightBox; + } + public static string PriorityLabel(int priority) { /** * 9 8 7 6 5 4