private static Color AssignmentColor(StatPriority statPriority)
 {
     return(statPriority.IsManual ? Color.white :
            statPriority.IsDefault?Color.grey:
            statPriority.IsOverride ? new Color(0.75f, 0.69f, 0.33f) : Color.cyan);
 }
        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 static void DrawStatRow(ExtendedOutfit selectedOutfit, StatPriority statPriority, ref Vector2 cur,
                                        float width)
        {
            // set up rects
            var labelRect  = new Rect(cur.x, cur.y, (width - 24) / 2f, 30f);
            var sliderRect = new Rect(labelRect.xMax + 4f, cur.y + 5f, labelRect.width, 25f);
            var 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 = AssignmentColor(statPriority);
            Verse.Widgets.Label(labelRect, statPriority.Stat.LabelCap);
            Text.Font = GameFont.Small;

            // draw button
            // if manually added, delete the priority
            var buttonTooltip = string.Empty;

            if (statPriority.IsManual)
            {
                buttonTooltip = ResourceBank.Strings.StatPriorityDelete(statPriority.Stat.LabelCap);
                if (Verse.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 (Verse.Widgets.ButtonImage(buttonRect, ResourceBank.Textures.ResetButton))
                {
                    statPriority.Weight = statPriority.Default;
                }
            }

            // draw line behind slider
            GUI.color = new Color(.3f, .3f, .3f);
            for (var y = (int)cur.y; y < cur.y + 30; y += 5)
            {
                Verse.Widgets.DrawLineVertical((sliderRect.xMin + sliderRect.xMax) / 2f, y, 3f);
            }

            // draw slider
            GUI.color = AssignmentColor(statPriority);
            var weight = GUI.HorizontalSlider(sliderRect, statPriority.Weight, -DefaultWorkTypePriorities.MaxStatWeight,
                                              DefaultWorkTypePriorities.MaxStatWeight);

            if (Mathf.Abs(weight - statPriority.Weight) > 1e-4)
            {
                statPriority.Weight = weight;
            }
            GUI.color = Color.white;
            // tooltips
            TooltipHandler.TipRegion(labelRect, statPriority.Stat.LabelCap + "\n\n" + statPriority.Stat.description);
            if (!string.IsNullOrEmpty(buttonTooltip))
            {
                TooltipHandler.TipRegion(buttonRect, buttonTooltip);
            }
            TooltipHandler.TipRegion(sliderRect, statPriority.Weight.ToStringByStyle(ToStringStyle.FloatTwo));

            // advance row
            cur.y += 30f;
        }