static void ProxySyncer(SyncWorker sync, ref ExtendedOutfitProxy proxy) { if (!sync.isWriting) { proxy = Instance; } }
static void Postfix(Rect inRect, Outfit ___selOutfitInt) { var selectedOutfit = ___selOutfitInt as ExtendedOutfit; DrawCloneButton(selectedOutfit); if (selectedOutfit == null) { return; } Rect canvas = new Rect( marginLeft, Dialog_ManageOutfits.TopAreaHeight + marginTop, inRect.xMax - marginLeft - marginRight, inRect.yMax - Dialog_ManageOutfits.TopAreaHeight - marginTop - marginBottom ); GUI.BeginGroup(canvas); Vector2 cur = Vector2.zero; if (MP.IsInMultiplayer) { MP.WatchBegin(); ExtendedOutfitProxy.Watch(ref selectedOutfit); } DrawDeadmanToogle(selectedOutfit, ref cur, canvas); DrawAutoWorkPrioritiesToggle(selectedOutfit, ref cur, canvas); DrawAutoTempToggle(selectedOutfit, ref cur, canvas); if (!selectedOutfit.AutoTemp) { DrawTemperatureStats(selectedOutfit, ref cur, canvas); } else { DrawAutoTempOffsetInput(selectedOutfit, ref cur, canvas); } cur.y += marginVertical; DrawApparelStats(selectedOutfit, cur, canvas); if (MP.IsInMultiplayer) { MP.WatchEnd(); } else if (GUI.changed) { var affected = Find.CurrentMap.mapPawns.FreeColonists .Where(i => i.outfits.CurrentOutfit == selectedOutfit); foreach (var pawn in affected) { pawn.mindState?.Notify_OutfitChanged(); } } GUI.EndGroup(); GUI.color = Color.white; Text.Anchor = TextAnchor.UpperLeft; }
static void DrawStatRow(ExtendedOutfit selectedOutfit, StatPriority statPriority, ref Vector2 cur, float width) { // 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; GUI.color = AssigmentColor(statPriority); Widgets.Label(labelRect, statPriority.Stat.LabelCap); Text.Font = GameFont.Small; // draw button // if manually added, delete the priority string buttonTooltip = string.Empty; if (statPriority.IsManual) { buttonTooltip = ResourceBank.Strings.StatPriorityDelete(statPriority.Stat.LabelCap); if (Widgets.ButtonImage(buttonRect, ResourceBank.Textures.DeleteButton)) { selectedOutfit.RemoveStatPriority(statPriority.Stat); } } // if overridden auto assignment, reset to auto else if (statPriority.IsOverride) { buttonTooltip = ResourceBank.Strings.StatPriorityReset(statPriority.Stat.LabelCap); if (Widgets.ButtonImage(buttonRect, ResourceBank.Textures.ResetButton)) { statPriority.Weight = statPriority.Default; if (MPApi.IsInMultiplayer) { ExtendedOutfitProxy.SetStatPriority(statPriority.Stat, statPriority.Default); } } } // 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 = AssigmentColor(statPriority); float weight = GUI.HorizontalSlider(sliderRect, statPriority.Weight, -MaxValue, MaxValue); if (Mathf.Abs(weight - statPriority.Weight) > 1e-4) { statPriority.Weight = weight; if (MPApi.IsInMultiplayer) { ExtendedOutfitProxy.SetStatPriority(statPriority.Stat, weight); } } 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; }