using System; using System.Collections.Generic; using LudeonTK; using UnityEngine; using Verse; using Verse.Sound; namespace RimWorld { // Token: 0x0200136E RID: 4974 [StaticConstructorOnStartup] public class PsychicEntropyGizmo : Gizmo { // Token: 0x060076A0 RID: 30368 RVA: 0x0028CB38 File Offset: 0x0028AD38 public PsychicEntropyGizmo(Pawn_PsychicEntropyTracker tracker) { this.tracker = tracker; this.Order = -100f; this.targetValue = tracker.TargetPsyfocus; this.LimitedTex = ContentFinder.Get("UI/Icons/EntropyLimit/Limited", true); this.UnlimitedTex = ContentFinder.Get("UI/Icons/EntropyLimit/Unlimited", true); } // Token: 0x060076A1 RID: 30369 RVA: 0x0028CB98 File Offset: 0x0028AD98 private void DrawThreshold(Rect rect, float percent, float entropyValue) { Rect position = new Rect { x = rect.x + 3f + (rect.width - 8f) * percent, y = rect.y + rect.height - 9f, width = 2f, height = 6f }; if (entropyValue < percent) { GUI.DrawTexture(position, BaseContent.GreyTex); return; } GUI.DrawTexture(position, BaseContent.BlackTex); } // Token: 0x060076A2 RID: 30370 RVA: 0x0028CC24 File Offset: 0x0028AE24 private void DrawPsyfocusTarget(Rect rect, float percent) { float num = Mathf.Round((rect.width - 8f) * percent); GUI.DrawTexture(new Rect { x = rect.x + 3f + num, y = rect.y, width = 2f, height = rect.height }, PsychicEntropyGizmo.PsyfocusTargetTex); float num2 = UIScaling.AdjustCoordToUIScalingFloor(rect.x + 2f + num); float xMax = UIScaling.AdjustCoordToUIScalingCeil(num2 + 4f); Rect rect2 = new Rect { y = rect.y - 3f, height = 5f, xMin = num2, xMax = xMax }; GUI.DrawTexture(rect2, PsychicEntropyGizmo.PsyfocusTargetTex); Rect position = rect2; position.y = rect.yMax - 2f; GUI.DrawTexture(position, PsychicEntropyGizmo.PsyfocusTargetTex); } // Token: 0x060076A3 RID: 30371 RVA: 0x0028CD20 File Offset: 0x0028AF20 public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms) { Rect rect = new Rect(topLeft.x, topLeft.y, this.GetWidth(maxWidth), 75f); Rect rect2 = rect.ContractedBy(6f); MainTabWindow_Inspect mainTabWindow_Inspect = (MainTabWindow_Inspect)MainButtonDefOf.Inspect.TabWindow; Command_Psycast command_Psycast = ((mainTabWindow_Inspect != null) ? mainTabWindow_Inspect.LastMouseoverGizmo : null) as Command_Psycast; float num = Mathf.Repeat(Time.time, 0.85f); float num2 = 1f; if (num < 0.1f) { num2 = num / 0.1f; } else if (num >= 0.25f) { num2 = 1f - (num - 0.25f) / 0.6f; } Widgets.DrawWindowBackground(rect); Text.Font = GameFont.Small; Rect rect3 = rect2; rect3.y += 6f; rect3.height = Text.LineHeight; Widgets.Label(rect3, "PsychicEntropyShort".Translate()); Rect rect4 = rect2; rect4.y += 38f; rect4.height = Text.LineHeight; Widgets.Label(rect4, "PsyfocusLabelGizmo".Translate()); Rect rect5 = rect2; rect5.x += 63f; rect5.y += 6f; rect5.width = 100f; rect5.height = 22f; float entropyRelativeValue = this.tracker.EntropyRelativeValue; Widgets.FillableBar(rect5, Mathf.Min(entropyRelativeValue, 1f), PsychicEntropyGizmo.EntropyBarTex, PsychicEntropyGizmo.EmptyBarTex, true); if (this.tracker.EntropyValue > this.tracker.MaxEntropy) { Widgets.FillableBar(rect5, Mathf.Min(entropyRelativeValue - 1f, 1f), PsychicEntropyGizmo.OverLimitBarTex, PsychicEntropyGizmo.EntropyBarTex, true); } if (command_Psycast != null) { Ability ability = command_Psycast.Ability; if (ability.def.EntropyGain > 1E-45f) { Rect rect6 = rect5.ContractedBy(3f); float width = rect6.width; float num3 = this.tracker.EntropyToRelativeValue(this.tracker.EntropyValue + ability.def.EntropyGain); float num4 = entropyRelativeValue; if (num4 > 1f) { num4 -= 1f; num3 -= 1f; } rect6.xMin = UIScaling.AdjustCoordToUIScalingFloor(rect6.xMin + num4 * width); rect6.width = UIScaling.AdjustCoordToUIScalingFloor(Mathf.Max(Mathf.Min(num3, 1f) - num4, 0f) * width); GUI.color = new Color(1f, 1f, 1f, num2 * 0.7f); GenUI.DrawTextureWithMaterial(rect6, PsychicEntropyGizmo.EntropyBarTexAdd, null, default(Rect)); GUI.color = Color.white; } } if (this.tracker.EntropyValue > this.tracker.MaxEntropy) { foreach (KeyValuePair keyValuePair in Pawn_PsychicEntropyTracker.EntropyThresholds) { if (keyValuePair.Value > 1f && keyValuePair.Value < 2f) { this.DrawThreshold(rect5, keyValuePair.Value - 1f, entropyRelativeValue); } } } string label = this.tracker.EntropyValue.ToString("F0") + " / " + this.tracker.MaxEntropy.ToString("F0"); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(rect5, label); Text.Anchor = TextAnchor.UpperLeft; Text.Font = GameFont.Tiny; GUI.color = Color.white; Rect rect7 = rect2; rect7.width = 175f; rect7.height = 38f; TooltipHandler.TipRegion(rect7, delegate() { float f = this.tracker.EntropyValue / this.tracker.RecoveryRate; TaggedString t = string.Concat(new object[] { ("PsychicEntropy".Translate() + ": ").Colorize(ColoredText.TipSectionTitleColor), Mathf.Round(this.tracker.EntropyValue), " / ", Mathf.Round(this.tracker.MaxEntropy) }); t += "\n" + "PawnTooltipPsychicEntropyStats".Translate(this.tracker.RecoveryRate.ToString("0.#"), Mathf.Round(f)); return (t + ("\n\n" + "PawnTooltipPsychicEntropyDesc".Translate())).Resolve(); }, Gen.HashCombineInt(this.tracker.GetHashCode(), 133858)); Rect rect8 = rect2; rect8.x += 63f; rect8.y += 38f; rect8.width = 100f; rect8.height = 22f; this.lastTargetValue = this.targetValue; if (this.tracker.Pawn.IsColonistPlayerControlled) { Widgets.DraggableBar(rect8, PsychicEntropyGizmo.PsyfocusBarTex, PsychicEntropyGizmo.PsyfocusBarHighlightTex, PsychicEntropyGizmo.EmptyBarTex, PsychicEntropyGizmo.PsyfocusTargetTex, ref PsychicEntropyGizmo.draggingBar, this.tracker.CurrentPsyfocus, ref this.targetValue, Pawn_PsychicEntropyTracker.PsyfocusBandPercentages, 16, 0f, 1f); if (this.lastTargetValue != this.targetValue) { this.tracker.SetPsyfocusTarget(this.targetValue); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.MeditationDesiredPsyfocus, KnowledgeAmount.Total); } } else { Widgets.FillableBar(rect8, this.tracker.CurrentPsyfocus, PsychicEntropyGizmo.PsyfocusBarTex, PsychicEntropyGizmo.EmptyBarTex, true); } UIHighlighter.HighlightOpportunity(rect8, "PsyfocusBar"); if (command_Psycast != null) { float min = command_Psycast.Ability.def.PsyfocusCostRange.min; if (min > 1E-45f) { Rect rect9 = rect8.ContractedBy(3f); float num5 = Mathf.Max(this.tracker.CurrentPsyfocus - min, 0f); float width2 = rect9.width; rect9.xMin = UIScaling.AdjustCoordToUIScalingFloor(rect9.xMin + num5 * width2); rect9.width = UIScaling.AdjustCoordToUIScalingCeil((this.tracker.CurrentPsyfocus - num5) * width2); GUI.color = new Color(1f, 1f, 1f, num2); GenUI.DrawTextureWithMaterial(rect9, PsychicEntropyGizmo.PsyfocusBarTexReduce, null, default(Rect)); GUI.color = Color.white; } } Rect rect10 = rect2; rect10.y += 38f; rect10.width = 175f; rect10.height = 38f; TooltipHandler.TipRegion(rect10, () => this.tracker.PsyfocusTipString(this.selectedPsyfocusTarget), Gen.HashCombineInt(this.tracker.GetHashCode(), 133873)); if (this.tracker.Pawn.IsColonistPlayerControlled) { float num6 = 32f; float num7 = 4f; float num8 = rect2.height / 2f - num6 + num7; float num9 = rect2.width - num6; Rect rect11 = new Rect(rect2.x + num9, rect2.y + num8, num6, num6); if (Widgets.ButtonImage(rect11, this.tracker.limitEntropyAmount ? this.LimitedTex : this.UnlimitedTex, true, null)) { this.tracker.limitEntropyAmount = !this.tracker.limitEntropyAmount; if (this.tracker.limitEntropyAmount) { SoundDefOf.Tick_Low.PlayOneShotOnCamera(null); } else { SoundDefOf.Tick_High.PlayOneShotOnCamera(null); } } TooltipHandler.TipRegionByKey(rect11, "PawnTooltipPsychicEntropyLimit"); } float num10; if (this.TryGetPainMultiplier(this.tracker.Pawn, out num10)) { Text.Font = GameFont.Small; Text.Anchor = TextAnchor.MiddleCenter; string recoveryBonus = (num10 - 1f).ToStringPercent("F0"); string recoveryBonus2 = recoveryBonus; float widthCached = recoveryBonus2.GetWidthCached(); Rect rect12 = rect2; rect12.x += rect2.width - widthCached / 2f - 16f; rect12.y += 38f; rect12.width = widthCached; rect12.height = Text.LineHeight; GUI.color = PsychicEntropyGizmo.PainBoostColor; Widgets.Label(rect12, recoveryBonus2); GUI.color = Color.white; Text.Font = GameFont.Tiny; Text.Anchor = TextAnchor.UpperLeft; TooltipHandler.TipRegion(rect12.ContractedBy(-1f), () => "PawnTooltipPsychicEntropyPainFocus".Translate(this.tracker.Pawn.health.hediffSet.PainTotal.ToStringPercent("F0"), recoveryBonus), Gen.HashCombineInt(this.tracker.GetHashCode(), 133878)); } return new GizmoResult(GizmoState.Clear); } // Token: 0x060076A4 RID: 30372 RVA: 0x0028D508 File Offset: 0x0028B708 private bool TryGetPainMultiplier(Pawn pawn, out float painMultiplier) { List parts = StatDefOf.PsychicEntropyRecoveryRate.parts; for (int i = 0; i < parts.Count; i++) { StatPart_Pain statPart_Pain; if ((statPart_Pain = (parts[i] as StatPart_Pain)) != null) { painMultiplier = statPart_Pain.PainFactor(this.tracker.Pawn); return true; } } painMultiplier = 0f; return false; } // Token: 0x060076A5 RID: 30373 RVA: 0x0028D55E File Offset: 0x0028B75E public override float GetWidth(float maxWidth) { return 212f; } // Token: 0x04004692 RID: 18066 private Pawn_PsychicEntropyTracker tracker; // Token: 0x04004693 RID: 18067 private float selectedPsyfocusTarget = -1f; // Token: 0x04004694 RID: 18068 private static bool draggingBar; // Token: 0x04004695 RID: 18069 private float lastTargetValue; // Token: 0x04004696 RID: 18070 private float targetValue; // Token: 0x04004697 RID: 18071 private Texture2D LimitedTex; // Token: 0x04004698 RID: 18072 private Texture2D UnlimitedTex; // Token: 0x04004699 RID: 18073 private const string LimitedIconPath = "UI/Icons/EntropyLimit/Limited"; // Token: 0x0400469A RID: 18074 private const string UnlimitedIconPath = "UI/Icons/EntropyLimit/Unlimited"; // Token: 0x0400469B RID: 18075 public const float CostPreviewFadeIn = 0.1f; // Token: 0x0400469C RID: 18076 public const float CostPreviewSolid = 0.15f; // Token: 0x0400469D RID: 18077 public const float CostPreviewFadeInSolid = 0.25f; // Token: 0x0400469E RID: 18078 public const float CostPreviewFadeOut = 0.6f; // Token: 0x0400469F RID: 18079 private static readonly Color PainBoostColor = new Color(0.2f, 0.65f, 0.35f); // Token: 0x040046A0 RID: 18080 private static readonly Texture2D EntropyBarTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.46f, 0.34f, 0.35f)); // Token: 0x040046A1 RID: 18081 private static readonly Texture2D EntropyBarTexAdd = SolidColorMaterials.NewSolidColorTexture(new Color(0.78f, 0.72f, 0.66f)); // Token: 0x040046A2 RID: 18082 private static readonly Texture2D OverLimitBarTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.75f, 0.2f, 0.15f)); // Token: 0x040046A3 RID: 18083 private static readonly Texture2D PsyfocusBarTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.34f, 0.42f, 0.43f)); // Token: 0x040046A4 RID: 18084 private static readonly Texture2D PsyfocusBarTexReduce = SolidColorMaterials.NewSolidColorTexture(new Color(0.65f, 0.83f, 0.83f)); // Token: 0x040046A5 RID: 18085 private static readonly Texture2D PsyfocusBarHighlightTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.43f, 0.54f, 0.55f)); // Token: 0x040046A6 RID: 18086 private static readonly Texture2D EmptyBarTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.03f, 0.035f, 0.05f)); // Token: 0x040046A7 RID: 18087 private static readonly Texture2D PsyfocusTargetTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.74f, 0.97f, 0.8f)); } }