Пример #1
0
        public static void Postfix(object customPawn)
        {
            var  trv  = Traverse.Create(customPawn);
            Pawn pawn = trv.Field <Pawn>("pawn").Value;

            bool  enabled;
            Color color;

            if (!PublicApi.GetGradientHair(pawn, out enabled, out color))
            {
                return;
            }

            Rect rectToggle = enabled ? rectToggleSmall : rectToggleFull;

            TooltipHandler.TipRegion(rectToggle, "GradientHairEnable".Translate());
            bool enable = GUI.Toggle(rectToggle, enabled, enabled ? "".Translate() : "GradientHairEnable".Translate());

            if (enable != enabled)
            {
                PublicApi.SetGradientHair(pawn, enable, color);
                trv.Method("MarkPortraitAsDirty").GetValue();
            }

            if (!enable)
            {
                return;
            }

            Rect rect = new Rect(40, 381, 27, 27);

            GUI.color = Color.white;
            GUI.DrawTexture(rect, BaseContent.WhiteTex);
            GUI.color = color;
            GUI.DrawTexture(GenUI.ContractedBy(rect, 1f), BaseContent.WhiteTex);

            GUI.color = Color.red;
            float r  = color.r;
            float vr = GUI.HorizontalSlider(new Rect(rect.x + 34f, rect.y - 3f, 136f, 11f), color.r, 0f, 1f);

            GUI.color = Color.green;
            float g  = color.g;
            float vg = GUI.HorizontalSlider(new Rect(rect.x + 34f, rect.y + 8f, 136f, 11f), color.g, 0f, 1f);

            GUI.color = Color.blue;
            float b  = color.b;
            float vb = GUI.HorizontalSlider(new Rect(rect.x + 34f, rect.y + 19f, 136f, 11f), color.b, 0f, 1f);

            if (!CloseEnough(vr, r) || !CloseEnough(vg, g) || !CloseEnough(vb, b))
            {
                PublicApi.SetGradientHair(pawn, true, new Color(vr, vg, vb));
                trv.Method("MarkPortraitAsDirty").GetValue();
            }

            GUI.color = Color.white;
        }