Пример #1
0
        public static void DrawColonistsMenu(ref Rect inRect, float margin, List <Pawn> colonists, Action <Pawn> set)
        {
            const int perRow = 3;
            var       gap    = (int)margin;

            inRect.width += gap;

            Log.Message("Open " + colonists.Count);

            UITools.DrawBoxGridView(out _, out _, ref inRect, ref _scrollPosition, perRow, gap, (i, boxRect) =>
            {
                var colonist = colonists[i];

                Widgets.DrawAltRect(boxRect);
                Widgets.DrawHighlightIfMouseover(boxRect);

                var portraitSize = new Vector2(boxRect.width / 2, boxRect.height);
                var portraitRect = new Rect(boxRect.x + boxRect.width * 0.5f - portraitSize.x / 2, boxRect.y, portraitSize.x, portraitSize.y);

                Texture pawnTexture = PortraitsCache.Get(colonist, portraitSize);

                GUI.DrawTexture(portraitRect, pawnTexture);
                TooltipHandler.TipRegion(portraitRect, colonist.Name.ToStringFull);

                if (Widgets.ButtonInvisible(boxRect))
                {
                    set(colonist);
                }

                return(true);
            }, colonists.Count);
        }
Пример #2
0
        protected override bool CanDoNext()
        {
            bool flag;

            if (NewGameRules.floCurItemPoints < 0f || NewGameRules.floCurPawnPoints < 0f)
            {
                Messages.Message("You do not have enough points to continue.", MessageSound.RejectInput);
                flag = false;
                return(flag);
            }
            if (!base.CanDoNext())
            {
                return(false);
            }
            List <Pawn> .Enumerator enumerator = Find.GameInitData.startingPawns.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    if (enumerator.Current.Name.IsValid)
                    {
                        continue;
                    }
                    Messages.Message("EveryoneNeedsValidName".Translate(), MessageSound.RejectInput);
                    flag = false;
                    return(flag);
                }
                PortraitsCache.Clear();
                return(true);
            }
            finally
            {
                ((IDisposable)(object)enumerator).Dispose();
            }
        }
Пример #3
0
 public virtual void Update()
 {
     try
     {
         ResolutionUtility.Update();
         RealTime.Update();
         LongEventHandler.LongEventsUpdate(out var sceneChanged);
         if (sceneChanged)
         {
             destroyed = true;
         }
         else if (!LongEventHandler.ShouldWaitForEvent)
         {
             Rand.EnsureStateStackEmpty();
             Widgets.EnsureMousePositionStackEmpty();
             SteamManager.Update();
             PortraitsCache.PortraitsCacheUpdate();
             AttackTargetsCache.AttackTargetsCacheStaticUpdate();
             Pawn_MeleeVerbs.PawnMeleeVerbsStaticUpdate();
             Storyteller.StorytellerStaticUpdate();
             CaravanInventoryUtility.CaravanInventoryUtilityStaticUpdate();
             uiRoot.UIRootUpdate();
             if (Time.frameCount > 3 && !prefsApplied)
             {
                 prefsApplied = true;
                 Prefs.Apply();
             }
             soundRoot.Update();
         }
     }
     catch (Exception arg)
     {
         Log.Error("Root level exception in Update(): " + arg);
     }
 }
Пример #4
0
        public void DrawColonistMouseAttachment(int index, Vector2 dragStartPos, int entryGroup)
        {
            Pawn    pawn   = null;
            Vector2 vector = default(Vector2);
            int     num    = 0;

            for (int i = 0; i < cachedEntries.Count; i++)
            {
                if (cachedEntries[i].group == entryGroup && cachedEntries[i].pawn != null)
                {
                    if (num == index)
                    {
                        pawn   = cachedEntries[i].pawn;
                        vector = new Vector2(cachedDrawLocs[i].x, cachedDrawLocs[i].y);
                        break;
                    }
                    num++;
                }
            }
            if (pawn != null)
            {
                RenderTexture iconTex         = PortraitsCache.Get(pawn, ColonistBarColonistDrawer.PawnTextureSize, ColonistBarColonistDrawer.PawnTextureCameraOffset, 1.28205f);
                Rect          rect            = new Rect(vector.x, vector.y, Size.x, Size.y);
                Rect          pawnTextureRect = drawer.GetPawnTextureRect(rect.position);
                pawnTextureRect.position += Event.current.mousePosition - dragStartPos;
                GenUI.DrawMouseAttachment(iconTex, "", 0f, default(Vector2), pawnTextureRect);
            }
        }
Пример #5
0
        public static void Androidify(Pawn pawn)
        {
            ThingDef_AlienRace alien = ThingDefOf.ChjAndroid as ThingDef_AlienRace;

            pawn.story.hairColor = alien.alienRace.generalSettings.alienPartGenerator.colorChannels.FirstOrDefault(channel => channel.name == "hair").first.NewRandomizedColor();
            AlienComp alienComp = pawn.TryGetComp <AlienComp>();

            if (alienComp != null)
            {
                alienComp.ColorChannels["skin"].first = alien.alienRace.generalSettings.alienPartGenerator.colorChannels.FirstOrDefault(channel => channel.name == "skin").first.NewRandomizedColor();
            }
            PortraitsCache.SetDirty(pawn);
            PortraitsCache.PortraitsCacheUpdate();

            //Add Android Hediff.
            pawn.health.AddHediff(HediffDefOf.ChjAndroidLike);

            //Remove old wounds and bad birthday related ones.
            List <Hediff> hediffs = pawn.health.hediffSet.hediffs.ToList();

            foreach (Hediff hediff in hediffs)
            {
                if (hediff is Hediff_Injury injury && injury.IsPermanent())
                {
                    pawn.health.hediffSet.hediffs.Remove(injury);
                    injury.PostRemoved();
                    pawn.health.Notify_HediffChanged(null);
                }
Пример #6
0
        public static bool CanDoNext(ref Page original)
        {
            bool result;

            if (!CheckColonistStats())
            {
                Find.WindowStack.Add(new Page_VerifyStartConfiguration(original));
                result = false;
            }
            else
            {
                foreach (Pawn current in Find.GameInitData.startingPawns)
                {
                    if (!current.Name.IsValid)
                    {
                        Messages.Message(Translator.Translate("EveryoneNeedsValidName"), MessageSound.RejectInput);
                        result = false;
                        return(result);
                    }
                }
                PortraitsCache.Clear();
                result = true;
            }
            return(result);
        }
        public static void DrawPawnCard(Pawn pawn, Rect rect)
        {
            Text.Font = GameFont.Small;
            GUI.DrawTexture(new Rect(rect.x, rect.y, 100, 140), PortraitsCache.Get(pawn, new Vector2(100, 140)));
            Rect rect2 = rect;

            rect2.x     += 100;
            rect2.width  = 210;
            rect2.height = 30;
            Widgets.Label(rect2, pawn.Name.ToStringFull);
            rect2.y += 20;
            Widgets.DrawLineHorizontal(rect2.x, rect2.y, 210);

            Text.Font = GameFont.Tiny;
            Rect skillsRect = rect2;

            skillsRect.y     += 10;
            skillsRect.width  = 210;
            skillsRect.height = 24;
            GeoscapeWindow.DrawSkill(pawn.skills.GetSkill(SkillDefOf.Social), skillsRect);
            skillsRect.y += 30;
            GeoscapeWindow.DrawSkill(pawn.skills.GetSkill(SkillDefOf.Intellectual), skillsRect);
            skillsRect.y += 35;
            Widgets.Label(skillsRect, pawn.Faction.Name);
            if (pawn.Faction != Faction.OfPlayer)
            {
                skillsRect.y += 20;
                Widgets.Label(skillsRect, $"{pawn.Faction.PlayerRelationKind.GetLabel()}: {pawn.Faction.PlayerGoodwill.ToStringWithSign()}");
            }
        }
Пример #8
0
        public static bool DrawQueue_Prefix(object __instance, Rect canvas)
        {
            if (AltRPal)
            {
                canvas.xMax += 130f + 2 * Margin; //keep an eye on his MainTabWindow_ResearchTree.DrawTopBar method for changes to this number
                canvas       = canvas.ExpandedBy(Margin);
            }
            float   padding   = 12f;
            float   spacing   = Find.ColonistBar.SpaceBetweenColonistsHorizontal;
            float   height    = canvas.height;
            float   startPos  = canvas.xMax - height - padding;
            Vector2 size      = new Vector2(height + spacing, height - padding);
            Vector2 innerSize = new Vector2(height - padding, height - padding);
            IEnumerable <object> expertiseDisplay = new object[] { };
            bool displayActive = false;

            using (IEnumerator <Pawn> enumerator = Find.ColonistBar.GetColonistsInOrder().Where(x => x.TechBound()).AsEnumerable().Reverse().GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Vector2 position = new Vector2(startPos, canvas.y);
                    Rect    box      = new Rect(position, size);
                    Rect    innerBox = new Rect(position.x + spacing, position.y, size.x - spacing - 2 * padding, size.y);
                    Pawn    pawn     = enumerator.Current;
                    GUI.DrawTexture(box, PortraitsCache.Get(pawn, size, default, 1.4f));
Пример #9
0
        public override void CompTickRare()
        {
            Pawn pawn = base.parent as Pawn;
            Map  map  = pawn?.Map;

            if (Settings.OnlyApplyToColonists && pawn.Faction?.IsPlayer == false)
            {
                return;
            }

            if (map != null && Settings.Indoors != Indoors.ShowHats && pawn.RaceProps?.Humanlike == true && !pawn.Dead)
            {
                if (this.isIndoors == null)
                {
                    this.isIndoors = DetermineIsIndoors(pawn, map);
                    PortraitsCache.SetDirty(pawn);
                    GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
                    return;
                }

                bool orig = this.isIndoors.Value;
                this.isIndoors = this.DetermineIsIndoors(pawn, map);
                if (orig != this.isIndoors.Value)
                {
                    PortraitsCache.SetDirty(pawn);
                    GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
                }
            }
        }
        public static bool ResolveAllGraphicsWereWolf(PawnGraphicSet __instance)
        {
            if (Current.ProgramState != ProgramState.Playing)
            {
                return(true);
            }

            var pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>();

            if (!pawn.Spawned)
            {
                return(true);
            }

            var compWerewolf = pawn.GetComp <CompWerewolf>();

            if (compWerewolf == null || !compWerewolf.IsTransformed)
            {
                return(true);
            }

            compWerewolf.CurrentWerewolfForm.bodyGraphicData = compWerewolf.CurrentWerewolfForm.def.graphicData;
            __instance.nakedGraphic = compWerewolf.CurrentWerewolfForm.bodyGraphicData.Graphic;
            __instance.ResolveApparelGraphics();
            PortraitsCache.SetDirty(pawn);
            return(false);
        }
Пример #11
0
        // ReSharper disable once MissingXmlDoc
        public override void WriteSettings()
        {
            settings?.Write();

            SetMainButtons();
            if (Current.ProgramState != ProgramState.Playing)
            {
                return;
            }
            {
            }
            List <Pawn> allPawns = PawnsFinder.AllMapsWorldAndTemporary_AliveOrDead.ToList();

            for (int i = 0; i < allPawns.Count; i++)
            {
                Pawn pawn = allPawns[i];
                if (!pawn.HasCompFace())
                {
                    continue;
                }

                pawn.Drawer.renderer.graphics.nakedGraphic = null;
                PortraitsCache.SetDirty(pawn);
            }

            // Bug: Not working when called or retrieved inside a mod
            // if (Find.ColonistBar != null)
            // {
            // Find.ColonistBar.MarkColonistsDirty();
            // }
        }
        public static void DirtyCache_Postfix(HediffSet __instance)
        {
            if (Current.ProgramState != ProgramState.Playing)
            {
                return;
            }

            Pawn pawn = __instance.pawn; // Traverse.Create(__instance).Field("pawn").GetValue<Pawn>();

            if (pawn == null || !pawn.Spawned || pawn.Map == null)
            {
                return;
            }

            if (!pawn.GetCompFace(out CompFace compFace))
            {
                return;
            }


            if (!compFace.Deactivated && pawn.CheckForAddedOrMissingParts())
            {
                pawn.Drawer.renderer.graphics.nakedGraphic = null;
                PortraitsCache.SetDirty(pawn);
            }

            pawn.GetCompAnim()?.PawnBodyGraphic?.Initialize();
        }
 private void MakeUndowned()
 {
     if (!this.Downed)
     {
         Log.Error(this.pawn + " tried to do MakeUndowned when already undowned.", false);
     }
     else
     {
         this.healthState = PawnHealthState.Mobile;
         if (PawnUtility.ShouldSendNotificationAbout(this.pawn))
         {
             Messages.Message("MessageNoLongerDowned".Translate(new object[]
             {
                 this.pawn.LabelCap
             }), this.pawn, MessageTypeDefOf.PositiveEvent, true);
         }
         if (this.pawn.Spawned && !this.pawn.InBed())
         {
             this.pawn.jobs.EndCurrentJob(JobCondition.Incompletable, true);
         }
         PortraitsCache.SetDirty(this.pawn);
         if (this.pawn.guest != null)
         {
             this.pawn.guest.Notify_PawnUndowned();
         }
     }
 }
Пример #14
0
 static void Postfix(Pawn pawn)
 {
     if (!pawn.Spawned)
     {
         return;                // Should never be the case here but copied from previous logic anyway just in case
     }
     if (!(RimbrellasMod.settings.showUmbrellasInRain || RimbrellasMod.settings.showUmbrellasInSnow))
     {
         return;
     }
     if ((!RimbrellasMod.settings.showUmbrellas) || (!(ShowFoldablesNow(pawn.Map)) || (pawn.Map.roofGrid.Roofed(pawn.Position) && !RimbrellasMod.settings.showUmbrellasWhenInside)))
     {
         List <ApparelGraphicRecord> remove = new List <ApparelGraphicRecord>();
         foreach (ApparelGraphicRecord rec in pawn.Drawer.renderer.graphics.apparelGraphics)
         {
             if (UmbrellaDefMethods.HideableUmbrellaDefs.Contains(rec.sourceApparel.def) || (UmbrellaDefMethods.UmbrellaDefs.Contains(rec.sourceApparel.def) && !RimbrellasMod.settings.showUmbrellas))
             {
                 remove.Add(rec);
             }
         }
         foreach (ApparelGraphicRecord rec in remove)
         {
             pawn.Drawer.renderer.graphics.apparelGraphics.Remove(rec);
         }
         PortraitsCache.SetDirty(pawn); // this gets called twice (once in the patched method) which is a bit unfortunate but makes the portraits correct at least
     }
 }
Пример #15
0
 private void UpdatePortrate()
 {
     this.Pawn.Drawer.renderer.graphics.ResolveAllGraphics();
     PortraitsCache.Clear();
     PortraitsCache.PortraitsCacheUpdate();
     this.PortraitNeedUpdate = false;
 }
Пример #16
0
 static void Postfix(ref PawnGraphicSet __instance)
 {
     if (!__instance.pawn.Spawned)
     {
         return;
     }
     if (!(RimbrellasMod.settings.showUmbrellasInRain || RimbrellasMod.settings.showUmbrellasInSnow))
     {
         return;
     }
     if ((!RimbrellasMod.settings.showUmbrellas) || (!(ShowFoldablesNow(__instance.pawn.Map)) || (__instance.pawn.Map.roofGrid.Roofed(__instance.pawn.Position) && !RimbrellasMod.settings.showUmbrellasWhenInside)))
     {
         List <ApparelGraphicRecord> remove = new List <ApparelGraphicRecord>();
         foreach (ApparelGraphicRecord rec in __instance.apparelGraphics)
         {
             if (UmbrellaDefMethods.HideableUmbrellaDefs.Contains(rec.sourceApparel.def) || (UmbrellaDefMethods.UmbrellaDefs.Contains(rec.sourceApparel.def) && !RimbrellasMod.settings.showUmbrellas))
             {
                 remove.Add(rec);
             }
         }
         foreach (ApparelGraphicRecord rec in remove)
         {
             __instance.apparelGraphics.Remove(rec);
         }
         PortraitsCache.SetDirty(__instance.pawn); // NOTE: this is not necessarily required for when the weather changes and could be moved to only call when checking for roof above
     }
 }
Пример #17
0
 public virtual void Update()
 {
     try
     {
         RealTime.Update();
         bool flag;
         LongEventHandler.LongEventsUpdate(out flag);
         if (flag)
         {
             this.destroyed = true;
         }
         else if (!LongEventHandler.ShouldWaitForEvent)
         {
             Rand.EnsureStateStackEmpty();
             SteamManager.Update();
             PortraitsCache.PortraitsCacheUpdate();
             this.uiRoot.UIRootUpdate();
             if (Time.frameCount > 3 && !Root.prefsApplied)
             {
                 Root.prefsApplied = true;
                 Prefs.Apply();
             }
             this.soundRoot.Update();
             MemoryTracker.Update();
         }
     }
     catch (Exception e)
     {
         Log.Notify_Exception(e);
         throw;
     }
 }
Пример #18
0
        public override void DoWindowContents(Rect inRect)
        {
            // Draw the childhood stories
            Widgets.BeginScrollView(rectChildStoriesOut, ref vecChildScrollPosition, rectChildStoriesIn);
            GUI.BeginGroup(rectChildStoriesIn);
            ChildStoriesIn();
            GUI.EndGroup();
            Widgets.EndScrollView();

            // Draw the childhood equip button
            if (Widgets.ButtonText(rectChildEquip, "Apply Childhood", true, true) && intCurSelectedChildStory != 0)
            {
                pawn.story.childhood = tempStoryViewerBS;
            }

            // Draw the adulthood stories
            Widgets.BeginScrollView(rectAdultStoriesOut, ref vecAdultScrollPosition, rectAdultStoriesIn);
            GUI.BeginGroup(rectAdultStoriesIn);
            AdultStoriesIn();
            GUI.EndGroup();
            Widgets.EndScrollView();

            // Draw the adulthood equip button
            if (Widgets.ButtonText(rectAdultEquip, "Apply Adulthood", true, true) && intCurSelectedAdultStory != 0 && pawn.ageTracker.AgeBiologicalYearsFloat >= 20f)
            {
                pawn.story.adulthood = tempStoryViewerBS;
            }

            // Draw the story viewer
            Widgets.BeginScrollView(rectStoryViewerOut, ref vecViewerScrollPosition, rectStoryViewerIn);
            GUI.BeginGroup(rectStoryViewerIn);
            StoryViewerIn();
            GUI.EndGroup();
            Widgets.EndScrollView();

            // Draw pawn name
            Text.Font = GameFont.Medium;
            Widgets.Label(rectNameLabel, strName);
            Text.Font = GameFont.Small;

            // Draw the portrait
            Vector3 vector3 = new Vector3();

            GUI.DrawTexture(rectPortrait, PortraitsCache.Get(pawn, PawnPortraitSize, vector3, 1f));

            // Draw the equipped childhood label
            Widgets.Label(rectChildLabel, strChildhoodLabel);

            // Draw the equipped childhood
            Widgets.Label(rectEquippedChildLabel, pawn.story.childhood.Title);

            if (pawn.story.adulthood != null)
            {
                // Draw the equipped adulthood label
                Widgets.Label(rectAdultLabel, strAdulthoodLabel);

                // Draw the equipped adulthood
                Widgets.Label(rectEquippedAdultLabel, pawn.story.adulthood.Title);
            }
        }
Пример #19
0
 public override void PostClose()
 {
     base.PostClose();
     Prefs.HatsOnlyOnMap = this.originalHatsHideSetting;
     this.dresserDto.Pawn.Drawer.renderer.graphics.ResolveAllGraphics();
     PortraitsCache.SetDirty(this.dresserDto.Pawn);
 }
Пример #20
0
        public static Rect AddPortraitWidget(float left, float top, DresserDTO dresserDto)
        {
            // Portrait
            Rect rect = new Rect(left, top, PortraitSize.x, PortraitSize.y);

            // Draw the pawn's portrait
            GUI.BeginGroup(rect);
            Vector2       size     = new Vector2(128f, 180f);
            Rect          position = new Rect(rect.width * 0.5f - size.x * 0.5f, 10f + rect.height * 0.5f - size.y * 0.5f, size.x, size.y);
            RenderTexture image    = PortraitsCache.Get(dresserDto.Pawn, size, new Vector3(0f, 0f, 0f), 1f);

            GUI.DrawTexture(position, image);
            GUI.EndGroup();

            GUI.color = Color.white;
            Widgets.DrawBox(rect, 1);

            for (int x = 0; x < ColorPreset.width; ++x)
            {
                for (int y = 0; y < ColorPreset.height; ++y)
                {
                    ColorPreset.SetPixel(x, y, Color.white);
                }
            }

            return(rect);
        }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            // Go to hairdressing table
            var gotoToil = Toils_Goto.GotoThing(TableIndex, PathEndMode.InteractionCell);

            yield return(gotoToil);

            // Bring up interface
            yield return(new Toil()
            {
                initAction = () =>
                {
                    Find.WindowStack.Add(new Dialog_ChangeHairstyle(this));
                },
                defaultCompleteMode = ToilCompleteMode.Never
            });

            // Change hairstyle
            var hairdressToil = new Toil
            {
                tickAction = () =>
                {
                    // Work on changing hairstyle
                    restyleTicksDone += pawn.GetStatValue(RimWorld.StatDefOf.GeneralLaborSpeed);
                    if (restyleTicksDone >= ticksToRestyle)
                    {
                        if (AnyChanges)
                        {
                            FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.VHE_Filth_Hair, 3);
                        }

                        if (newHairDef != null)
                        {
                            pawn.story.hairDef = newHairDef;
                        }
                        if (newHairColour.HasValue)
                        {
                            pawn.story.hairColor = newHairColour.Value;
                        }

                        if (newBeardDef != null)
                        {
                            this.pawn.style.beardDef = newBeardDef;
                        }

                        pawn.Drawer.renderer.graphics.ResolveAllGraphics();
                        PortraitsCache.SetDirty(pawn);
                        GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(pawn);
                        pawn.jobs.EndCurrentJob(JobCondition.Succeeded);
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Never
            };

            hairdressToil.WithProgressBar(TableIndex, () => restyleTicksDone / ticksToRestyle, true);
            hairdressToil.FailOnCannotTouch(TableIndex, PathEndMode.Touch);
            hairdressToil.PlaySustainerOrSound(SoundDefOf.Recipe_Tailor);
            yield return(hairdressToil);
        }
Пример #22
0
        public SamplePawnDrawer()
        {
            var factionDef = AutomataRaceSettingCache.Get(AutomataRaceDefOf.Paniel_Race).defaultFaction;
            var faction    = factionDef != null?Find.FactionManager.FirstFactionOfDef(factionDef) : null;

            _pawn   = PawnGenerator.GeneratePawn(AutomataRaceDefOf.Paniel_Randombox_Normal, faction: faction);
            Texture = PortraitsCache.Get(_pawn, new Vector2(92f, 128f));
        }
Пример #23
0
 private static void ApparelChanged(this Pawn_ApparelTracker _this)
 {
     LongEventHandler.ExecuteWhenFinished(delegate
     {
         _this.pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
         PortraitsCache.SetDirty(_this.pawn);
     });
 }
Пример #24
0
 //fixes issue of portraits of pawns with gradient hairs having blank portraits on pawn selection screen
 public static void PreloadCacheBugfix()
 {
     for (int i = 0; i < Find.GameInitData.startingAndOptionalPawns.Count; i++)
     {
         Pawn pawn = Find.GameInitData.startingAndOptionalPawns[i];
         PortraitsCache.Get(pawn, new Vector2(70f, 110f));
         PortraitsCache.Clear();
     }
 }
Пример #25
0
        public override void DoWindowContents(Rect inRect)
        {
            Rect mainRect  = new Rect(0, 0, inRect.width, inRect.height).ContractedBy(WindowGap);
            Rect imageRect = new Rect(0, 0, 100, mainRect.height - 30);
            Rect textRect  = new Rect(100, 0, mainRect.width - 100, mainRect.height - 30);

            GUI.BeginGroup(mainRect);

            GUI.BeginGroup(imageRect);
            var   texture      = PortraitsCache.Get(pawn, ColonistBarColonistDrawer.PawnTextureSize);
            float scalledWidth = imageRect.height / ColonistBarColonistDrawer.PawnTextureSize.y * ColonistBarColonistDrawer.PawnTextureSize.x;
            var   scalledRect  = new Rect(imageRect.width - scalledWidth, 0, scalledWidth, imageRect.height);

            GUI.DrawTexture(new Rect(18, 0, imageRect.width - 36, imageRect.height), texture);
            GUI.EndGroup();

            var listing = new Listing_Standard(GameFont.Small);

            listing.Begin(textRect);
            string message = "";

            switch (type)
            {
            case AlterType.Bad:
                message = "BadPeople_TurnBadMessage";
                break;

            case AlterType.Good:
                message = "BadPeople_TurnGoodMessage";
                break;

            case AlterType.Cannibal:
                message = "BadPeople_TurnCannibalMessage";
                break;

            case AlterType.KinSlayer:
                message = "BadPeople_TurnKinSlayer";
                break;
            }
            listing.Label(message.Translate(pawn.Name.ToStringShort));
            listing.End();

            if (type == AlterType.Bad || type == AlterType.Good)
            {
                if (Widgets.ButtonText(new Rect(0, mainRect.height - 30, 200, 30), "BadPeople_Button_Details".Translate()))
                {
                    Find.WindowStack.Add(new Dialog_ActionList(actionList));
                }
            }

            if (Widgets.ButtonText(new Rect(mainRect.width - 200, mainRect.height - 30, 200, 30), "OK".Translate()))
            {
                Close();
            }

            GUI.EndGroup();
        }
Пример #26
0
        private void DrawPawnPortrait()
        {
            // Shape the portrait
            Rect    rect    = new Rect(rectCard.x + (rectCard.width * .85f), rectCard.y + (rectCard.height * .05f), PawnPortraitSize.x, PawnPortraitSize.y);
            Vector3 vector3 = new Vector3();

            // Draw the portrait
            GUI.DrawTexture(rect, PortraitsCache.Get(pawn, PawnPortraitSize, vector3, 1f));
        }
Пример #27
0
 protected void rerenderPawn(Pawn pawn)
 {
     // Tell the pawn's Drawer that the Person has had a hair-change makeover.
     // This code is from https://github.com/KiameV/rimworld-changedresser/blob/f0b8fcf9073cd1c232fcd26b0b083cb3137924a3/Source/UI/DresserUI.cs
     // Copyright (c) 2017 Travis Offtermatt
     // MIT License
     pawn.Drawer.renderer.graphics.ResolveAllGraphics();
     PortraitsCache.SetDirty(pawn);
 }
Пример #28
0
 public static void Notify_EquipmentChanged(this Pawn_EquipmentTracker tracker)
 {
     LongEventHandler.ExecuteWhenFinished(delegate
     {
         tracker.pawn.Drawer.renderer.graphics.SetApparelGraphicsDirty();
         PortraitsCache.SetDirty(tracker.pawn);
         GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(tracker.pawn);
     });
 }
Пример #29
0
        static void Postfix(Pawn_DraftController __instance)
        {
            var p = __instance.pawn;

            if (p.IsColonist && !p.Dead && p.def.race.Humanlike)
            {
                PortraitsCache.SetDirty(p);
                GlobalTextureAtlasManager.TryMarkPawnFrameSetDirty(p);
            }
        }
Пример #30
0
        private void UpdatePawnInfo()
        {
            if (Current.ProgramState == ProgramState.Playing && MutationUtilities.AllMutationsWithGraphics.Contains(def) && pawn.IsColonist)
            {
                pawn.Drawer.renderer.graphics.ResolveAllGraphics();
                PortraitsCache.SetDirty(pawn);
            }

            pawn.GetMutationTracker()?.NotifyMutationAdded(this);
        }