Exemplo n.º 1
0
        public static void DrawInterest(InterestDef id, ref Rect root, Listing_Standard ls)
        {
            if (!learnRates.ContainsKey(id.defName))
            {
                learnRates.Add(id.defName, (int)Math.Round((id.learnFactor * 100f)));
            }
            if (!canAppear.ContainsKey(id.defName))
            {
                canAppear.Add(id.defName, id.canAppear);
            }
            int  learnRate = learnRates[id.defName];
            bool appears   = canAppear[id.defName];

            Texture2D image = id.GetTexture();
            Rect      labelRect;
            Rect      rectLine = ls.GetRect(Text.LineHeight);

            if (image != null)
            {
                Rect imageRect = rectLine.LeftPartPixels(Text.LineHeight);
                labelRect = rectLine.RightPartPixels(rectLine.width - Text.LineHeight - 5);
                GUI.DrawTexture(imageRect, image);
            }
            else
            {
                labelRect = rectLine;
            }

            TextAnchor buffer = Text.Anchor;

            Text.Anchor = TextAnchor.MiddleLeft;
            Widgets.Label(labelRect, id.LabelCap);
            Text.Anchor = buffer;

            if (id != InterestBase.interestList.GetDefault())
            {
                ls.CheckboxLabeled("Enabled", ref appears, "Allow this interest to appear on new pawns?");
            }

            Rect learnLine  = ls.GetRect(Text.LineHeight);
            Rect learnLabel = learnLine.LeftHalf();
            Rect learnField = learnLine.RightHalf();

            buffer = Text.Anchor;
            string lr = "Learn rate";

            if (defaults.ContainsKey(id.defName))
            {
                lr += " (default = " + defaults[id.defName] + ")";
            }
            lr += ": ";
            Widgets.Label(learnLabel, lr);
            Text.Anchor = buffer;
            string stringBuffer = learnRate.ToString();

            Widgets.TextFieldNumeric(learnField, ref learnRate, ref stringBuffer, 0, 10000);

            learnRates[id.defName] = learnRate;
            canAppear[id.defName]  = appears;
        }
Exemplo n.º 2
0
        private static bool Prefix(Passion passion, ref Color __result)
        {
            int         p        = (int)passion;
            InterestDef interest = InterestBase.interestList[p];
            float       val      = interest.GetValue();

            if (val < 0)
            {
                if (val / 75.0f < 1.0f)
                {
                    __result = veryNegativeColor;
                }
                else
                {
                    __result = negativeColor;
                }
            }
            else if (val == 0)
            {
                __result = neutralColor;
            }
            else
            {
                if (val / 75.0f > 1.0f)
                {
                    __result = veryPositiveColor;
                }
                else
                {
                    __result = positiveColor;
                }
            }
            return(false);
        }
        private static void Postfix(Object model, SkillDef def, object __instance)
        {
            var  r = AccessTools.PropertyGetter(Patch_RimHUDBase.hudPawnModel, "Base");
            Pawn b = (Pawn)r.Invoke(model, null);
            Pawn_SkillTracker st = b.skills;

            SkillRecord skillRecord = (st != null) ? st.GetSkill(def) : null;

            if (skillRecord == null)
            {
                return;
            }

            var label = AccessTools.Field(Patch_RimHUDBase.hudSkillModel, "<Label>k__BackingField");

            if (label == null)
            {
                return;
            }

            InterestDef i   = InterestBase.interestList[(int)skillRecord.passion];
            string      end = "";
            float       val = i.GetValue();

            if (val < 0)
            {
                end = new string('-', -(int)Math.Floor(val / 75.0f));
            }
            else if (val > 0)
            {
                end = new string('+', (int)Math.Floor(val / 75.0f));
            }
            string l = def.LabelCap + end;

            label.SetValue(__instance, l);
        }