Ejemplo n.º 1
0
 static void ProxySyncer(SyncWorker sync, ref ExtendedOutfitProxy proxy)
 {
     if (!sync.isWriting)
     {
         proxy = Instance;
     }
 }
Ejemplo n.º 2
0
        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;
        }