public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms) { if (!pawn.DestroyedOrNull() && !pawn.Dead) { CompAbilityUserMagic compMagic = pawn.GetComp <CompAbilityUserMagic>(); CompAbilityUserMight compMight = pawn.GetComp <CompAbilityUserMight>(); bool isMage = compMagic.IsMagicUser && !pawn.story.traits.HasTrait(TorannMagicDefOf.Faceless); bool isFighter = compMight.IsMightUser; bool isPsionic = pawn.health.hediffSet.HasHediff(HediffDef.Named("TM_PsionicHD"), false); bool isBloodMage = pawn.health.hediffSet.HasHediff(HediffDef.Named("TM_BloodHD"), false); bool isBrightmage = pawn.health.hediffSet.HasHediff(TorannMagicDefOf.TM_LightCapacitanceHD); bool isMonk = pawn.health.hediffSet.HasHediff(TorannMagicDefOf.TM_ChiHD, false); bool isEnchantedItem = this.iComp != null; Hediff hediff = null; for (int h = 0; h < pawn.health.hediffSet.hediffs.Count; h++) { if (pawn.health.hediffSet.hediffs[h].def.defName.Contains("TM_HateHD")) { hediff = pawn.health.hediffSet.hediffs[h]; } } bool isDeathKnight = hediff != null; //bool isLich = pawn.story.traits.HasTrait(TorannMagicDefOf.Lich); float barCount = 0; float boostPsiSev = 100; float boostHateSev = 100; float boostBloodSev = 100; float boostChiSev = 100; if (isFighter) { barCount++; } if (isMage) { barCount++; } if (isPsionic) { barCount++; Hediff hediffBoost = pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_Artifact_PsionicBoostHD); if (hediffBoost != null) { boostPsiSev += hediffBoost.Severity; } } if (isDeathKnight) { barCount++; Hediff hediffBoost = pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_Artifact_HateBoostHD); if (hediffBoost != null) { boostHateSev += hediffBoost.Severity; } } if (isBloodMage) { barCount++; Hediff hediffBoost = pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_Artifact_BloodBoostHD); if (hediffBoost != null) { boostBloodSev += hediffBoost.Severity; } } if (isBrightmage) { barCount++; } if (isMonk) { barCount++; } if (isEnchantedItem) { barCount++; } float barHeight; float initialShift = 0; float barSpacing = 0f; float contractionAmount = 6f; if (barCount == 1) { initialShift = 15f; } else if (barCount >= 2) { initialShift = 5f; barSpacing = 2f; contractionAmount -= barCount; } if (barCount > 0 && ((isFighter && compMight.Stamina != null) || (isMage && compMagic.Mana != null) || (isEnchantedItem && iComp.NecroticEnergy > 0))) { Rect overRect = new Rect(topLeft.x + 2, topLeft.y, this.GetWidth(100), 75); //overall rect size (shell) if (parms.highLight) { QuickSearchWidget.DrawStrongHighlight(overRect.ExpandedBy(12f)); } Find.WindowStack.ImmediateWindow(984698, overRect, WindowLayer.GameUI, delegate { barHeight = (((75 - (2 * contractionAmount)) - (2 * initialShift) - (barSpacing * (barCount - 1))) / (barCount)); Rect rect = overRect.AtZero().ContractedBy(contractionAmount); //inner, smaller rect rect.height = barHeight; Rect rect2 = rect; //label rect, starts at top Text.Font = GameFont.Tiny; float fillPercent = 0; float yShift = initialShift; Text.Anchor = TextAnchor.MiddleCenter; if (isPsionic) { rect2.y = rect.y + yShift; try { fillPercent = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("TM_PsionicHD"), false).Severity / (boostPsiSev); Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullPsionicTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("TM_PsionicHD"), false).Severity).ToString("F0") + " / " + boostPsiSev.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullPsionicTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isDeathKnight) { rect2.y = rect.y + yShift; try { fillPercent = hediff.Severity / boostHateSev; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullDeathKnightTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + hediff.Severity.ToString("F0") + " / " + boostHateSev.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullDeathKnightTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isMonk) { rect2.y = rect.y + yShift; try { fillPercent = pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_ChiHD, false).Severity / boostChiSev; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullChiTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_ChiHD, false).Severity).ToString("F0") + " / " + boostChiSev.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullChiTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isFighter) { rect2.y = rect.y + yShift; try { fillPercent = compMight.Stamina.CurInstantLevel / compMight.maxSP; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullStaminaTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (compMight.Stamina.CurInstantLevel * 100).ToString("F0") + " / " + (compMight.maxSP * 100).ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullStaminaTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isBloodMage) { rect2.y = rect.y + yShift; try { fillPercent = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("TM_BloodHD"), false).Severity / boostBloodSev; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullBloodMageTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (pawn.health.hediffSet.GetFirstHediffOfDef(HediffDef.Named("TM_BloodHD"), false).Severity).ToString("F0") + " / " + boostBloodSev.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullBloodMageTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isBrightmage) { rect2.y = rect.y + yShift; try { if (compMagic.SoL != null) { fillPercent = compMagic.SoL.LightEnergy / compMagic.SoL.LightEnergyMax; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullSoLTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); //Widgets.Label(rect2, "" + compMagic.SoL.LightEnergy.ToString("F0") + " / " + compMagic.SoL.LightEnergyMax.ToString("F0")); } Hediff hd = pawn.health.hediffSet.GetFirstHediffOfDef(TorannMagicDefOf.TM_LightCapacitanceHD); HediffComp_LightCapacitance hdlc = hd.TryGetComp <HediffComp_LightCapacitance>(); fillPercent = hdlc.LightEnergy / hdlc.LightEnergyMax; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullBrightmageTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + hdlc.LightEnergy.ToString("F0") + " / " + hdlc.LightEnergyMax.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullBrightmageTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isMage) { rect2.y = rect.y + yShift; try { fillPercent = compMagic.Mana.CurInstantLevel / compMagic.maxMP; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullManaTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (compMagic.Mana.CurInstantLevel * 100).ToString("F0") + " / " + (compMagic.maxMP * 100).ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullManaTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } if (isEnchantedItem) { rect2.y = rect.y + yShift; try { fillPercent = iComp.NecroticEnergy / 100f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullNecroticTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (iComp.NecroticEnergy).ToString("F0") + " / " + (100).ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullNecroticTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + barSpacing; } Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; }, true, false, 1f); } } else { Rect overRect = new Rect(topLeft.x + 2, topLeft.y, this.GetWidth(100), 75); //overall rect size (shell) float barHeight; float initialShift = 0; Find.WindowStack.ImmediateWindow(984698, overRect, WindowLayer.GameUI, delegate { barHeight = ((75 - 5) / 1); Rect rect = overRect.AtZero().ContractedBy(6f); //inner, smaller rect rect.height = barHeight; Rect rect2 = rect; //label rect, starts at top Text.Font = GameFont.Tiny; float fillPercent = 0; float yShift = initialShift; Text.Anchor = TextAnchor.MiddleCenter; rect2.y += yShift; fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_EnergyStatus.FullPsionicTex, Gizmo_EnergyStatus.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); yShift += (barHeight) + 5f; }, true, false, 1f); } return(new GizmoResult(GizmoState.Clear)); }
public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms) { if (!pawn.DestroyedOrNull() && !pawn.Dead && itemComp != null) { Rect overRect = new Rect(topLeft.x + 2, topLeft.y, this.GetWidth(75), 75); //overall rect size (shell) if (parms.highLight) { QuickSearchWidget.DrawStrongHighlight(overRect.ExpandedBy(12f)); } Find.WindowStack.ImmediateWindow(984798, overRect, WindowLayer.GameUI, delegate { int barHeight = ((75 - 5)); Rect rect = overRect.AtZero().ContractedBy(6f); //inner, smaller rect rect.height = barHeight; Rect rect2 = rect; //label rect, starts at top Text.Font = GameFont.Tiny; float fillPercent = 0; float yShift = 0f; Text.Anchor = TextAnchor.MiddleCenter; if (itemComp.NecroticEnergy != 0) { rect2.y += yShift; try { fillPercent = itemComp.NecroticEnergy / 100f; Widgets.FillableBar(rect2, fillPercent, Gizmo_StatusBar.FullTex, Gizmo_StatusBar.EmptyShieldBarTex, false); Widgets.Label(rect2, "" + (itemComp.NecroticEnergy.ToString("F0")) + " / " + 100f.ToString("F0")); } catch { fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_StatusBar.FullTex, Gizmo_StatusBar.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); } yShift += (barHeight) + 5f; } Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; }, true, false, 1f); } else { Rect overRect = new Rect(topLeft.x + 2, topLeft.y, this.GetWidth(100), 75); //overall rect size (shell) float barHeight; float initialShift = 0; Find.WindowStack.ImmediateWindow(984798, overRect, WindowLayer.GameUI, delegate { barHeight = ((75 - 5) / 1); Rect rect = overRect.AtZero().ContractedBy(6f); //inner, smaller rect rect.height = barHeight; Rect rect2 = rect; //label rect, starts at top Text.Font = GameFont.Tiny; float fillPercent = 0; float yShift = initialShift; Text.Anchor = TextAnchor.MiddleCenter; rect2.y += yShift; fillPercent = 0f; Widgets.FillableBar(rect2, fillPercent, Gizmo_StatusBar.FullTex, Gizmo_StatusBar.EmptyShieldBarTex, false); Widgets.Label(rect2, ""); yShift += (barHeight) + 5f; }, true, false, 1f); } return(new GizmoResult(GizmoState.Clear)); }