private static void DrawAnimalIcons([NotNull] Pawn animal) { if (!animal.Spawned || animal.Dead) { return; } int iconNum = 0; Vector3 bodyLoc = animal.DrawPos; if (animal.Faction?.IsPlayer == true) { if (animal.health.HasHediffsNeedingTend()) { if (animal.health?.hediffSet != null) { float hediffSetBleedRateTotal = animal.health.hediffSet.BleedRateTotal; if (hediffSetBleedRateTotal > 0.01f) { PSIDrawer.DrawIconOnColonist( bodyLoc, ref iconNum, Icon.Bloodloss, Statics.GradientRedAlertToNeutral.Evaluate(1.0f - hediffSetBleedRateTotal), Settings.ViewOpacityCrit); } } if (animal.health?.summaryHealth != null) { float summaryHealthSummaryHealthPercent = 1f - animal.health.summaryHealth.SummaryHealthPercent; if (summaryHealthSummaryHealthPercent > 0.01f) { PSIDrawer.DrawIconOnColonist( bodyLoc, ref iconNum, Icon.Health, Statics.Gradient4.Evaluate(summaryHealthSummaryHealthPercent), Settings.ViewOpacityCrit); } } } } if (!animal.InAggroMentalState) { return; } if (!Settings.PSISettings.ShowAggressive) { return; } PSIDrawer.DrawIconOnColonist(bodyLoc, ref iconNum, Icon.Aggressive, ColVermillion, Settings.ViewOpacityCrit); }
private static void DrawColonistRelationIconsPSI([NotNull] Pawn pawn) { // Log.Message("Begin Drawing"); if (pawn.Dead || !pawn.Spawned || pawn.holdingOwner == null || pawn.Map == null) { return; } CompPSI pawnStats = pawn.GetComp <CompPSI>(); if (pawnStats == null) { return; } // Log.Message("Relations checked"); if (!pawnStats.HasRelationWithColonist) { return; } // Log.Message("Has relation"); int iconNum = 0; // Pawn is no colonist, thus no further stat checks Vector3 bodyLoc = pawn.DrawPos; { float hediffSetBleedRateTotal = pawn.health.hediffSet.BleedRateTotal; if (hediffSetBleedRateTotal > 0.01f) { PSIDrawer.DrawIconOnColonist( bodyLoc, ref iconNum, Icon.Bloodloss, Statics.GradientRedAlertToNeutral.Evaluate(1.0f - hediffSetBleedRateTotal), Settings.ViewOpacityCrit); } Color color = Statics.Gradient4.Evaluate(1f - pawn.health.summaryHealth.SummaryHealthPercent); PSIDrawer.DrawIconOnColonist( bodyLoc, ref iconNum, Icon.Health, color, Settings.ViewOpacityCrit); } }
public static void Reinit(bool reloadSettings = true, bool reloadIconSet = true, bool recalcIconPos = true) { PawnCapacities = new[] { PawnCapacityDefOf.BloodFiltration, PawnCapacityDefOf.BloodPumping, PawnCapacityDefOf.Breathing, PawnCapacityDefOf.Consciousness, PawnCapacityDefOf.Eating, PawnCapacityDefOf.Hearing, PawnCapacityDefOf.Manipulation, PawnCapacityDefOf.Metabolism, PawnCapacityDefOf.Moving, PawnCapacityDefOf.Sight, PawnCapacityDefOf.Talking }; if (reloadSettings) { Settings.BarSettings = Settings.LoadBarSettings(); Settings.PSISettings = Settings.LoadPSISettings(); HarmonyPatches.MarkColonistsDirty_Postfix(); } if (recalcIconPos) { BarIconDrawer.RecalcBarPositionAndSize(); PSIDrawer.RecalcIconPositionsPSI(); } if (reloadIconSet) { LongEventHandler.ExecuteWhenFinished( () => { PSIMaterials = new Materials(Settings.PSISettings.IconSet); // PSISettings SettingsPSI = // XmlLoader.ItemFromXmlFile<PSISettings>(GenFilePaths.CoreModsFolderPath + "/RW_PawnStateIcons/Textures/UI/Overlays/PawnStateIcons/" + PSI.SettingsPSI.IconSet + "/iconset.cfg"); // PSI.PSISettings.IconSizeMult = SettingsPSI.IconSizeMult; PSIMaterials.ReloadTextures(true); SkinMat = PSIMaterials[Icon.TargetSkin]; HairMat = PSIMaterials[Icon.TargetHair]; TargetMat = PSIMaterials[Icon.Target]; // Log.Message(GenFilePaths.CoreModsFolderPath + "/RW_PawnStateIcons/Textures/UI/Overlays/PawnStateIcons/" + ColBarSettings.IconSet + "/iconset.cfg"); }); } }
private static void DrawColonistIconsPSI([NotNull] Pawn pawn) { if (pawn.Dead || !pawn.Spawned || pawn.holdingOwner == null || pawn.Map == null) { return; } CompPSI pawnStats = pawn.GetComp <CompPSI>(); if (pawnStats == null) { return; } SettingsPSI psiSettings = Settings.PSISettings; float viewOpacity = psiSettings.IconOpacity; int iconNum = 0; Vector3 bodyLoc = pawn.DrawPos; // Target Point if (psiSettings.ShowTargetPoint && pawnStats.TargetPos != Vector3.zero) { if (psiSettings.UseColoredTarget) { Color skinColor = pawn.story.SkinColor; Color hairColor = pawn.story.hairColor; if (SkinMat == null) { return; } if (HairMat == null) { return; } PSIDrawer.DrawIcon_posOffset(pawnStats.TargetPos, Vector3.zero, SkinMat, skinColor, 1f); PSIDrawer.DrawIcon_posOffset(pawnStats.TargetPos, Vector3.zero, HairMat, hairColor, 1f); } else { if (TargetMat == null) { return; } PSIDrawer.DrawIcon_posOffset(pawnStats.TargetPos, Vector3.zero, TargetMat, ColorNeutralStatus, viewOpacity); } } // Drafted if (psiSettings.ShowDraft && pawn.Drafted) { if (pawnStats.IsPacifist) { PSIDrawer.DrawIconOnColonist(bodyLoc, ref iconNum, Icon.Pacific, ColYellow, Settings.ViewOpacityCrit); } else { PSIDrawer.DrawIconOnColonist(bodyLoc, ref iconNum, Icon.Draft, ColVermillion, Settings.ViewOpacityCrit); } } List <IconEntryPSI> drawIconEntries = pawnStats.PSIIconList; if (!drawIconEntries.NullOrEmpty()) { for (int index = 0; index < drawIconEntries.Count; index++) { IconEntryPSI iconEntryBar = drawIconEntries[index]; PSIDrawer.DrawIconOnColonist(bodyLoc, iconEntryBar, index + iconNum); } } }