public static void DrawStatRow(ref Vector2 cur, float width, StatPriority stat, Pawn pawn, out bool stop_ui) { // sent a signal if the statlist has changed stop_ui = false; // set up rects Rect labelRect = new Rect(cur.x, cur.y, (width - 24) / 2f, 30f); Rect sliderRect = new Rect(labelRect.xMax + 4f, cur.y + 5f, labelRect.width, 25f); Rect buttonRect = new Rect(sliderRect.xMax + 4f, cur.y + 3f, 16f, 16f); // draw label Text.Font = Text.CalcHeight(stat.Stat.LabelCap, labelRect.width) > labelRect.height ? GameFont.Tiny : GameFont.Small; Widgets.Label(labelRect, stat.Stat.LabelCap); Text.Font = GameFont.Small; // draw button // if manually added, delete the priority string buttonTooltip = String.Empty; if (stat.Assignment == StatAssignment.Manual) { buttonTooltip = "StatPriorityDelete".Translate(stat.Stat.LabelCap); if (Widgets.ImageButton(buttonRect, ITab_Pawn_Outfitter.deleteButton)) { stat.Delete(pawn); stop_ui = true; } } // if overridden auto assignment, reset to auto if (stat.Assignment == StatAssignment.Override) { buttonTooltip = "StatPriorityReset".Translate(stat.Stat.LabelCap); if (Widgets.ImageButton(buttonRect, ITab_Pawn_Outfitter.resetButton)) { stat.Reset(pawn); stop_ui = true; } } // draw line behind slider GUI.color = new Color(.3f, .3f, .3f); for (int y = (int)cur.y; y < cur.y + 30; y += 5) { Widgets.DrawLineVertical((sliderRect.xMin + sliderRect.xMax) / 2f, y, 3f); } // draw slider GUI.color = stat.Assignment == StatAssignment.Automatic ? Color.grey : Color.white; float weight = GUI.HorizontalSlider(sliderRect, stat.Weight, -10f, 10f); if (Mathf.Abs(weight - stat.Weight) > 1e-4) { stat.Weight = weight; if (stat.Assignment == StatAssignment.Automatic) { stat.Assignment = StatAssignment.Override; } } GUI.color = Color.white; // tooltips TooltipHandler.TipRegion(labelRect, stat.Stat.LabelCap + "\n\n" + stat.Stat.description); if (buttonTooltip != String.Empty) { TooltipHandler.TipRegion(buttonRect, buttonTooltip); } TooltipHandler.TipRegion(sliderRect, stat.Weight.ToStringByStyle(ToStringStyle.FloatTwo)); // advance row cur.y += 30f; }
private void DrawStatRow( ref Vector2 cur, float width, [NotNull] StatPriority statPriority, Pawn pawn, out bool stopUI) { // sent a signal if the statlist has changed stopUI = false; // set up rects Rect labelRect = new Rect(cur.x, cur.y, (width - 24) / 2f, 30f); Rect sliderRect = new Rect(labelRect.xMax + 4f, cur.y + 5f, labelRect.width, 25f); Rect buttonRect = new Rect(sliderRect.xMax + 4f, cur.y + 3f, 16f, 16f); // draw label Text.Font = Text.CalcHeight(statPriority.Stat.LabelCap, labelRect.width) > labelRect.height ? GameFont.Tiny : GameFont.Small; switch (statPriority.Assignment) { case StatAssignment.Automatic: GUI.color = Color.grey; break; case StatAssignment.Individual: GUI.color = Color.cyan; break; case StatAssignment.Manual: GUI.color = Color.white; break; case StatAssignment.Override: GUI.color = new Color(0.75f, 0.69f, 0.33f); break; default: GUI.color = Color.white; break; } // if (!ApparelStatsHelper.AllStatDefsModifiedByAnyApparel.Contains(statPriority.Stat)) // { // GUI.color *= new Color(0.8f, 0.8f, 0.8f); // } Widgets.Label(labelRect, statPriority.Stat.LabelCap); Text.Font = GameFont.Small; // draw button // if manually added, delete the priority string buttonTooltip = string.Empty; if (statPriority.Assignment == StatAssignment.Manual) { buttonTooltip = "StatPriorityDelete".Translate(statPriority.Stat.LabelCap); if (Widgets.ButtonImage(buttonRect, OutfitterTextures.DeleteButton)) { statPriority.Delete(pawn); stopUI = true; } } // if overridden auto assignment, reset to auto if (statPriority.Assignment == StatAssignment.Override) { buttonTooltip = "StatPriorityReset".Translate(statPriority.Stat.LabelCap); if (Widgets.ButtonImage(buttonRect, OutfitterTextures.ResetButton)) { statPriority.Reset(pawn); stopUI = true; } } // draw line behind slider GUI.color = new Color(.3f, .3f, .3f); for (int y = (int)cur.y; y < cur.y + 30; y += 5) { Widgets.DrawLineVertical((sliderRect.xMin + sliderRect.xMax) / 2f, y, 3f); } // draw slider switch (statPriority.Assignment) { case StatAssignment.Automatic: GUI.color = Color.grey; break; case StatAssignment.Individual: GUI.color = Color.cyan; break; case StatAssignment.Manual: GUI.color = Color.white; break; case StatAssignment.Override: GUI.color = new Color(0.75f, 0.69f, 0.33f); break; default: GUI.color = Color.white; break; } float weight = GUI.HorizontalSlider( sliderRect, statPriority.Weight, ApparelStatCache.SpecialStats.Contains(statPriority.Stat) ? 0.01f : -ApparelStatCache.MaxValue, ApparelStatCache.MaxValue); if (Mathf.Abs(weight - statPriority.Weight) > 1e-4) { statPriority.Weight = weight; if (statPriority.Assignment == StatAssignment.Automatic || statPriority.Assignment == StatAssignment.Individual) { statPriority.Assignment = StatAssignment.Override; } } if (GUI.changed) { pawn.GetApparelStatCache().RawScoreDict.Clear(); } GUI.color = Color.white; // tooltips TooltipHandler.TipRegion(labelRect, statPriority.Stat.LabelCap + "\n\n" + statPriority.Stat.description); if (buttonTooltip != string.Empty) { TooltipHandler.TipRegion(buttonRect, buttonTooltip); } TooltipHandler.TipRegion(sliderRect, statPriority.Weight.ToStringByStyle(ToStringStyle.FloatTwo)); // advance row cur.y += 30f; }