// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.ChromaHotkeyPainter // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using ReLogic.Peripherals.RGB; using System; using System.Collections.Generic; using System.Linq; using Terraria.GameInput; namespace Terraria.GameContent { public class ChromaHotkeyPainter { private readonly Dictionary _keys = new Dictionary(); private readonly List _reactiveKeys = new List(); private List _xnaKeysInUse = new List(); private Player _player; private int _quickHealAlert; private List _wasdKeys = new List(); private ChromaHotkeyPainter.PaintKey _healKey; private ChromaHotkeyPainter.PaintKey _mountKey; private ChromaHotkeyPainter.PaintKey _jumpKey; private ChromaHotkeyPainter.PaintKey _grappleKey; private ChromaHotkeyPainter.PaintKey _throwKey; private ChromaHotkeyPainter.PaintKey _manaKey; private ChromaHotkeyPainter.PaintKey _buffKey; private ChromaHotkeyPainter.PaintKey _smartCursorKey; private ChromaHotkeyPainter.PaintKey _smartSelectKey; public bool PotionAlert => (uint) this._quickHealAlert > 0U; public void CollectBoundKeys() { foreach (KeyValuePair key in this._keys) key.Value.Unbind(); this._keys.Clear(); foreach (KeyValuePair> keyStatu in PlayerInput.CurrentProfile.InputModes[InputMode.Keyboard].KeyStatus) this._keys.Add(keyStatu.Key, new ChromaHotkeyPainter.PaintKey(keyStatu.Key, keyStatu.Value)); foreach (KeyValuePair key in this._keys) key.Value.Bind(); this._wasdKeys = new List() { this._keys["Up"], this._keys["Down"], this._keys["Left"], this._keys["Right"] }; this._healKey = this._keys["QuickHeal"]; this._mountKey = this._keys["QuickMount"]; this._jumpKey = this._keys["Jump"]; this._grappleKey = this._keys["Grapple"]; this._throwKey = this._keys["Throw"]; this._manaKey = this._keys["QuickMana"]; this._buffKey = this._keys["QuickBuff"]; this._smartCursorKey = this._keys["SmartCursor"]; this._smartSelectKey = this._keys["SmartSelect"]; this._reactiveKeys.Clear(); this._xnaKeysInUse.Clear(); foreach (KeyValuePair key in this._keys) this._xnaKeysInUse.AddRange((IEnumerable) key.Value.GetXNAKeysInUse()); this._xnaKeysInUse = this._xnaKeysInUse.Distinct().ToList(); } public void PressKey(Keys key) { } private ChromaHotkeyPainter.ReactiveRGBKey FindReactiveKey(Keys keyTarget) => this._reactiveKeys.FirstOrDefault((Func) (x => x.XNAKey == keyTarget)); public void Update() { this._player = Main.LocalPlayer; if (!Main.hasFocus) { this.Step_ClearAll(); } else { if (this.PotionAlert) { foreach (KeyValuePair key in this._keys) { if (key.Key != "QuickHeal") key.Value.SetClear(); } this.Step_QuickHeal(); } else { this.Step_Movement(); this.Step_QuickHeal(); } if (Main.InGameUI.CurrentState == Main.ManageControlsMenu) { this.Step_ClearAll(); this.Step_KeybindsMenu(); } this.Step_UpdateReactiveKeys(); } } private void SetGroupColorBase(List keys, Color color) { foreach (ChromaHotkeyPainter.PaintKey key in keys) key.SetSolid(color); } private void SetGroupClear(List keys) { foreach (ChromaHotkeyPainter.PaintKey key in keys) key.SetClear(); } private void Step_KeybindsMenu() { this.SetGroupColorBase(this._wasdKeys, ChromaHotkeyPainter.PainterColors.MovementKeys); this._jumpKey.SetSolid(ChromaHotkeyPainter.PainterColors.MovementKeys); this._grappleKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickGrapple); this._mountKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickMount); this._quickHealAlert = 0; this._healKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickHealReady); this._manaKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickMana); this._throwKey.SetSolid(ChromaHotkeyPainter.PainterColors.Throw); this._smartCursorKey.SetSolid(ChromaHotkeyPainter.PainterColors.SmartCursor); this._smartSelectKey.SetSolid(ChromaHotkeyPainter.PainterColors.SmartSelect); } private void Step_UpdateReactiveKeys() { foreach (ChromaHotkeyPainter.ReactiveRGBKey reactiveRgbKey in this._reactiveKeys.FindAll((Predicate) (x => x.Expired))) { ChromaHotkeyPainter.ReactiveRGBKey key = reactiveRgbKey; key.Clear(); if (!this._keys.Any>((Func, bool>) (x => x.Value.UsesKey(key.XNAKey)))) key.Unbind(); } this._reactiveKeys.RemoveAll((Predicate) (x => x.Expired)); foreach (ChromaHotkeyPainter.ReactiveRGBKey reactiveKey in this._reactiveKeys) reactiveKey.Update(); } private void Step_ClearAll() { foreach (KeyValuePair key in this._keys) key.Value.SetClear(); } private void Step_SmartKeys() { ChromaHotkeyPainter.PaintKey smartCursorKey = this._smartCursorKey; ChromaHotkeyPainter.PaintKey smartSelectKey = this._smartSelectKey; if (this._player.DeadOrGhost || this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned || this._player.noItems) { smartCursorKey.SetClear(); smartSelectKey.SetClear(); } else { if (Main.SmartCursorEnabled) smartCursorKey.SetSolid(ChromaHotkeyPainter.PainterColors.SmartCursor); else smartCursorKey.SetClear(); if (this._player.nonTorch >= 0) smartSelectKey.SetSolid(ChromaHotkeyPainter.PainterColors.SmartSelect); else smartSelectKey.SetClear(); } } private void Step_Movement() { List wasdKeys = this._wasdKeys; bool flag = this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned; if (this._player.DeadOrGhost) this.SetGroupClear(wasdKeys); else if (flag) this.SetGroupColorBase(wasdKeys, ChromaHotkeyPainter.PainterColors.DangerKeyBlocked); else this.SetGroupColorBase(wasdKeys, ChromaHotkeyPainter.PainterColors.MovementKeys); } private void Step_Mount() { ChromaHotkeyPainter.PaintKey mountKey = this._mountKey; if (this._player.QuickMount_GetItemToUse() == null || this._player.DeadOrGhost) mountKey.SetClear(); else if (this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned || (double) this._player.gravDir == -1.0 || this._player.noItems) { mountKey.SetSolid(ChromaHotkeyPainter.PainterColors.DangerKeyBlocked); if ((double) this._player.gravDir != -1.0) return; mountKey.SetSolid(ChromaHotkeyPainter.PainterColors.DangerKeyBlocked * 0.6f); } else mountKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickMount); } private void Step_Grapple() { ChromaHotkeyPainter.PaintKey grappleKey = this._grappleKey; if (this._player.QuickGrapple_GetItemToUse() == null || this._player.DeadOrGhost) grappleKey.SetClear(); else if (this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned || this._player.noItems) grappleKey.SetSolid(ChromaHotkeyPainter.PainterColors.DangerKeyBlocked); else grappleKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickGrapple); } private void Step_Jump() { ChromaHotkeyPainter.PaintKey jumpKey = this._jumpKey; if (this._player.DeadOrGhost) jumpKey.SetClear(); else if (this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned) jumpKey.SetSolid(ChromaHotkeyPainter.PainterColors.DangerKeyBlocked); else jumpKey.SetSolid(ChromaHotkeyPainter.PainterColors.MovementKeys); } private void Step_QuickHeal() { ChromaHotkeyPainter.PaintKey healKey = this._healKey; if (this._player.QuickHeal_GetItemToUse() == null || this._player.DeadOrGhost) { healKey.SetClear(); this._quickHealAlert = 0; } else if (this._player.potionDelay > 0) { float lerpValue = Utils.GetLerpValue((float) this._player.potionDelayTime, 0.0f, (float) this._player.potionDelay, true); Color color = Color.Lerp(ChromaHotkeyPainter.PainterColors.DangerKeyBlocked, ChromaHotkeyPainter.PainterColors.QuickHealCooldown, lerpValue) * lerpValue * lerpValue * lerpValue; healKey.SetSolid(color); this._quickHealAlert = 0; } else if (this._player.statLife == this._player.statLifeMax2) { healKey.SetClear(); this._quickHealAlert = 0; } else if ((double) this._player.statLife <= (double) this._player.statLifeMax2 / 4.0) { if (this._quickHealAlert == 1) return; this._quickHealAlert = 1; healKey.SetAlert(Color.Black, ChromaHotkeyPainter.PainterColors.QuickHealReadyUrgent, -1f, 2f); } else if ((double) this._player.statLife <= (double) this._player.statLifeMax2 / 2.0) { if (this._quickHealAlert == 2) return; this._quickHealAlert = 2; healKey.SetAlert(Color.Black, ChromaHotkeyPainter.PainterColors.QuickHealReadyUrgent, -1f, 2f); } else { healKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickHealReady); this._quickHealAlert = 0; } } private void Step_QuickMana() { ChromaHotkeyPainter.PaintKey manaKey = this._manaKey; if (this._player.QuickMana_GetItemToUse() == null || this._player.DeadOrGhost || this._player.statMana == this._player.statManaMax2) manaKey.SetClear(); else manaKey.SetSolid(ChromaHotkeyPainter.PainterColors.QuickMana); } private void Step_Throw() { ChromaHotkeyPainter.PaintKey throwKey = this._throwKey; Item heldItem = this._player.HeldItem; if (this._player.DeadOrGhost || this._player.HeldItem.favorited || this._player.noThrow > 0) throwKey.SetClear(); else if (this._player.frozen || this._player.tongued || this._player.webbed || this._player.stoned || this._player.noItems) throwKey.SetClear(); else throwKey.SetSolid(ChromaHotkeyPainter.PainterColors.Throw); } private class ReactiveRGBKey { public readonly Keys XNAKey; private readonly Color _color; private readonly TimeSpan _duration; private TimeSpan _startTime; private TimeSpan _expireTime; private RgbKey _rgbKey; public bool Expired => this._expireTime < Main.gameTimeCache.TotalGameTime; public ReactiveRGBKey(Keys key, Color color, TimeSpan duration) { this._color = color; this.XNAKey = key; this._duration = duration; this._startTime = Main.gameTimeCache.TotalGameTime; } public void Update() => this._rgbKey.SetSolid(Color.Lerp(this._color, Color.Black, (float) Utils.GetLerpValue(this._startTime.TotalSeconds, this._expireTime.TotalSeconds, Main.gameTimeCache.TotalGameTime.TotalSeconds, true))); public void Clear() => this._rgbKey.Clear(); public void Unbind() => Main.Chroma.UnbindKey(this.XNAKey); public void Bind() => this._rgbKey = Main.Chroma.BindKey(this.XNAKey); public void Refresh() { this._startTime = Main.gameTimeCache.TotalGameTime; this._expireTime = this._startTime; this._expireTime.Add(this._duration); } } private class PaintKey { private string _trigger; private List _xnaKeys; private List _rgbKeys; public PaintKey(string triggerName, List keys) { this._trigger = triggerName; this._xnaKeys = new List(); foreach (string key in keys) { Keys result; if (Enum.TryParse(key, true, out result)) this._xnaKeys.Add(result); } this._rgbKeys = new List(); } public void Unbind() { foreach (RgbKey rgbKey in this._rgbKeys) Main.Chroma.UnbindKey((Keys) rgbKey.Key); } public void Bind() { foreach (Keys xnaKey in this._xnaKeys) this._rgbKeys.Add(Main.Chroma.BindKey(xnaKey)); this._rgbKeys = ((IEnumerable) this._rgbKeys).Distinct().ToList(); } public void SetSolid(Color color) { foreach (RgbKey rgbKey in this._rgbKeys) rgbKey.SetSolid(color); } public void SetClear() { foreach (RgbKey rgbKey in this._rgbKeys) rgbKey.Clear(); } public bool UsesKey(Keys key) => this._xnaKeys.Contains(key); public void SetAlert(Color colorBase, Color colorFlash, float time, float flashesPerSecond) { if ((double) time == -1.0) time = 10000f; foreach (RgbKey rgbKey in this._rgbKeys) rgbKey.SetFlashing(colorBase, colorFlash, time, flashesPerSecond); } public List GetXNAKeysInUse() => new List((IEnumerable) this._xnaKeys); } private static class PainterColors { private const float HOTKEY_COLOR_MULTIPLIER = 1f; public static readonly Color MovementKeys = Color.Gray * 1f; public static readonly Color QuickMount = Color.RoyalBlue * 1f; public static readonly Color QuickGrapple = Color.Lerp(Color.RoyalBlue, Color.Blue, 0.5f) * 1f; public static readonly Color QuickHealReady = Color.Pink * 1f; public static readonly Color QuickHealReadyUrgent = Color.DeepPink * 1f; public static readonly Color QuickHealCooldown = Color.HotPink * 0.5f * 1f; public static readonly Color QuickMana = new Color(40, 0, 230) * 1f; public static readonly Color Throw = Color.Red * 0.2f * 1f; public static readonly Color SmartCursor = Color.Gold; public static readonly Color SmartSelect = Color.Goldenrod; public static readonly Color DangerKeyBlocked = Color.Red * 1f; } } }