// Decompiled with JetBrains decompiler // Type: Terraria.GameContent.UI.WiresUI // 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.Graphics; using System; using Terraria.GameInput; namespace Terraria.GameContent.UI { public class WiresUI { private static WiresUI.WiresRadial radial = new WiresUI.WiresRadial(); public static bool Open => WiresUI.radial.active; public static void HandleWiresUI(SpriteBatch spriteBatch) { WiresUI.radial.Update(); WiresUI.radial.Draw(spriteBatch); } public static class Settings { public static WiresUI.Settings.MultiToolMode ToolMode = WiresUI.Settings.MultiToolMode.Red; private static int _lastActuatorEnabled; public static bool DrawWires { get { if (Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].mech) return true; return Main.player[Main.myPlayer].InfoAccMechShowWires && Main.player[Main.myPlayer].builderAccStatus[8] == 0; } } public static bool HideWires => Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type == 3620; public static bool DrawToolModeUI { get { int type = Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type; return type == 3611 || type == 3625; } } public static bool DrawToolAllowActuators { get { int type = Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type; if (type == 3611) WiresUI.Settings._lastActuatorEnabled = 2; if (type == 3625) WiresUI.Settings._lastActuatorEnabled = 1; return WiresUI.Settings._lastActuatorEnabled == 2; } } [Flags] public enum MultiToolMode { Red = 1, Green = 2, Blue = 4, Yellow = 8, Actuator = 16, // 0x00000010 Cutter = 32, // 0x00000020 } } public class WiresRadial { public Vector2 position; public bool active; public bool OnWiresMenu; private float _lineOpacity; public void Update() { this.FlowerUpdate(); this.LineUpdate(); } private void LineUpdate() { bool flag1 = true; float min = 0.75f; Player player = Main.player[Main.myPlayer]; if (!WiresUI.Settings.DrawToolModeUI || Main.drawingPlayerChat) { flag1 = false; min = 0.0f; } bool flag2; if (player.dead || Main.mouseItem.type > 0) { flag2 = false; this._lineOpacity = 0.0f; } else if (player.cursorItemIconEnabled && player.cursorItemIconID != 0 && player.cursorItemIconID != 3625) { flag2 = false; this._lineOpacity = 0.0f; } else if (!player.cursorItemIconEnabled && (!PlayerInput.UsingGamepad && !WiresUI.Settings.DrawToolAllowActuators || player.mouseInterface || player.lastMouseInterface) || Main.ingameOptionsWindow || Main.InGameUI.IsVisible) { flag2 = false; this._lineOpacity = 0.0f; } else { float num = Utils.Clamp(this._lineOpacity + 0.05f * (float) flag1.ToDirectionInt(), min, 1f); this._lineOpacity += 0.05f * (float) Math.Sign(num - this._lineOpacity); if ((double) Math.Abs(this._lineOpacity - num) >= 0.0500000007450581) return; this._lineOpacity = num; } } private void FlowerUpdate() { Player player = Main.player[Main.myPlayer]; if (!WiresUI.Settings.DrawToolModeUI) this.active = false; else if ((player.mouseInterface || player.lastMouseInterface) && !this.OnWiresMenu) this.active = false; else if (player.dead || Main.mouseItem.type > 0) { this.active = false; this.OnWiresMenu = false; } else { this.OnWiresMenu = false; if (!Main.mouseRight || !Main.mouseRightRelease || PlayerInput.LockGamepadTileUseButton || player.noThrow != 0 || Main.HoveringOverAnNPC || player.talkNPC != -1) return; if (this.active) { this.active = false; } else { if (Main.SmartInteractShowingGenuine) return; this.active = true; this.position = Main.MouseScreen; if (!PlayerInput.UsingGamepad || !Main.SmartCursorEnabled) return; this.position = new Vector2((float) Main.screenWidth, (float) Main.screenHeight) / 2f; } } } public void Draw(SpriteBatch spriteBatch) { this.DrawFlower(spriteBatch); this.DrawCursorArea(spriteBatch); } private void DrawLine(SpriteBatch spriteBatch) { if (this.active || (double) this._lineOpacity == 0.0) return; Vector2 vector2_1 = Main.MouseScreen; Vector2 vector2_2 = new Vector2((float) (Main.screenWidth / 2), (float) (Main.screenHeight - 70)); if (PlayerInput.UsingGamepad) vector2_1 = Vector2.Zero; Vector2 v = vector2_1 - vector2_2; double num1 = (double) Vector2.Dot(Vector2.Normalize(v), Vector2.UnitX); double num2 = (double) Vector2.Dot(Vector2.Normalize(v), Vector2.UnitY); double rotation = (double) v.ToRotation(); double num3 = (double) v.Length(); bool flag1 = false; bool toolAllowActuators = WiresUI.Settings.DrawToolAllowActuators; for (int index = 0; index < 6; ++index) { if (toolAllowActuators || index != 5) { bool flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) (WiresUI.Settings.MultiToolMode) (1 << index)); if (index == 5) flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator); Vector2 vector2_3 = vector2_2 + Vector2.UnitX * (float) (45.0 * ((double) index - 1.5)); int num4 = index; if (index == 0) num4 = 3; if (index == 3) num4 = 0; switch (num4) { case 0: case 1: vector2_3 = vector2_2 + new Vector2((float) (45.0 + (toolAllowActuators ? 15.0 : 0.0)) * (float) (2 - num4), 0.0f) * this._lineOpacity; break; case 2: case 3: vector2_3 = vector2_2 + new Vector2((float) -(45.0 + (toolAllowActuators ? 15.0 : 0.0)) * (float) (num4 - 1), 0.0f) * this._lineOpacity; break; case 4: flag2 = false; vector2_3 = vector2_2 - new Vector2(0.0f, toolAllowActuators ? 22f : 0.0f) * this._lineOpacity; break; case 5: vector2_3 = vector2_2 + new Vector2(0.0f, 22f) * this._lineOpacity; break; } bool flag3 = false; if (!PlayerInput.UsingGamepad) flag3 = (double) Vector2.Distance(vector2_3, vector2_1) < 19.0 * (double) this._lineOpacity; if (flag1) flag3 = false; if (flag3) flag1 = true; Texture2D texture2D1 = TextureAssets.WireUi[(WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter) ? 8 : 0) + (flag3 ? 1 : 0)].Value; Texture2D texture2D2 = (Texture2D) null; switch (index) { case 0: case 1: case 2: case 3: texture2D2 = TextureAssets.WireUi[2 + index].Value; break; case 4: texture2D2 = TextureAssets.WireUi[WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter) ? 7 : 6].Value; break; case 5: texture2D2 = TextureAssets.WireUi[10].Value; break; } Color color1 = Color.White; Color color2 = Color.White; if (!flag2 && index != 4) { if (flag3) { color2 = new Color(100, 100, 100); color2 = new Color(120, 120, 120); color1 = new Color(200, 200, 200); } else { color2 = new Color(150, 150, 150); color2 = new Color(80, 80, 80); color1 = new Color(100, 100, 100); } } Utils.CenteredRectangle(vector2_3, new Vector2(40f)); if (flag3) { if (Main.mouseLeft && Main.mouseLeftRelease) { switch (index) { case 0: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Red; break; case 1: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Green; break; case 2: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Blue; break; case 3: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Yellow; break; case 4: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Cutter; break; case 5: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Actuator; break; } } if (!Main.mouseLeft || Main.player[Main.myPlayer].mouseInterface) Main.player[Main.myPlayer].mouseInterface = true; this.OnWiresMenu = true; } int num5 = flag3 ? 1 : 0; spriteBatch.Draw(texture2D1, vector2_3, new Rectangle?(), color1 * this._lineOpacity, 0.0f, texture2D1.Size() / 2f, this._lineOpacity, SpriteEffects.None, 0.0f); spriteBatch.Draw(texture2D2, vector2_3, new Rectangle?(), color2 * this._lineOpacity, 0.0f, texture2D2.Size() / 2f, this._lineOpacity, SpriteEffects.None, 0.0f); } } if (!Main.mouseLeft || !Main.mouseLeftRelease || flag1) return; this.active = false; } private void DrawFlower(SpriteBatch spriteBatch) { if (!this.active) return; Vector2 vector2_1 = Main.MouseScreen; Vector2 position = this.position; if (PlayerInput.UsingGamepad && Main.SmartCursorEnabled) vector2_1 = !(PlayerInput.GamepadThumbstickRight != Vector2.Zero) ? (!(PlayerInput.GamepadThumbstickLeft != Vector2.Zero) ? this.position : this.position + PlayerInput.GamepadThumbstickLeft * 40f) : this.position + PlayerInput.GamepadThumbstickRight * 40f; Vector2 v = vector2_1 - position; double num1 = (double) Vector2.Dot(Vector2.Normalize(v), Vector2.UnitX); double num2 = (double) Vector2.Dot(Vector2.Normalize(v), Vector2.UnitY); float rotation = v.ToRotation(); float num3 = v.Length(); bool flag1 = false; bool toolAllowActuators = WiresUI.Settings.DrawToolAllowActuators; float num4 = (float) (4 + toolAllowActuators.ToInt()); float num5 = toolAllowActuators ? 11f : -0.5f; for (int index = 0; index < 6; ++index) { if (toolAllowActuators || index != 5) { bool flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) (WiresUI.Settings.MultiToolMode) (1 << index)); if (index == 5) flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator); Vector2 vector2_2 = position + Vector2.UnitX * (float) (45.0 * ((double) index - 1.5)); switch (index) { case 0: case 1: case 2: case 3: float num6 = (float) index; if (index == 0) num6 = 3f; if (index == 3) num6 = 0.0f; vector2_2 = position + Vector2.UnitX.RotatedBy((double) num6 * 6.28318548202515 / (double) num4 - 3.14159274101257 / (double) num5) * 45f; break; case 4: flag2 = false; vector2_2 = position; break; case 5: vector2_2 = position + Vector2.UnitX.RotatedBy((double) (index - 1) * 6.28318548202515 / (double) num4 - 3.14159274101257 / (double) num5) * 45f; break; } bool flag3 = false; if (index == 4) flag3 = (double) num3 < 20.0; switch (index) { case 0: case 1: case 2: case 3: case 5: float num7 = (vector2_2 - position).ToRotation().AngleTowards(rotation, (float) (6.28318548202515 / ((double) num4 * 2.0))) - rotation; if ((double) num3 >= 20.0 && (double) Math.Abs(num7) < 0.00999999977648258) { flag3 = true; break; } break; case 4: flag3 = (double) num3 < 20.0; break; } if (!PlayerInput.UsingGamepad) flag3 = (double) Vector2.Distance(vector2_2, vector2_1) < 19.0; if (flag1) flag3 = false; if (flag3) flag1 = true; Texture2D texture2D1 = TextureAssets.WireUi[(WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter) ? 8 : 0) + (flag3 ? 1 : 0)].Value; Texture2D texture2D2 = (Texture2D) null; switch (index) { case 0: case 1: case 2: case 3: texture2D2 = TextureAssets.WireUi[2 + index].Value; break; case 4: texture2D2 = TextureAssets.WireUi[WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter) ? 7 : 6].Value; break; case 5: texture2D2 = TextureAssets.WireUi[10].Value; break; } Color color1 = Color.White; Color color2 = Color.White; if (!flag2 && index != 4) { if (flag3) { color2 = new Color(100, 100, 100); color2 = new Color(120, 120, 120); color1 = new Color(200, 200, 200); } else { color2 = new Color(150, 150, 150); color2 = new Color(80, 80, 80); color1 = new Color(100, 100, 100); } } Utils.CenteredRectangle(vector2_2, new Vector2(40f)); if (flag3) { if (Main.mouseLeft && Main.mouseLeftRelease) { switch (index) { case 0: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Red; break; case 1: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Green; break; case 2: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Blue; break; case 3: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Yellow; break; case 4: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Cutter; break; case 5: WiresUI.Settings.ToolMode ^= WiresUI.Settings.MultiToolMode.Actuator; break; } } Main.player[Main.myPlayer].mouseInterface = true; this.OnWiresMenu = true; } int num8 = flag3 ? 1 : 0; spriteBatch.Draw(texture2D1, vector2_2, new Rectangle?(), color1, 0.0f, texture2D1.Size() / 2f, 1f, SpriteEffects.None, 0.0f); spriteBatch.Draw(texture2D2, vector2_2, new Rectangle?(), color2, 0.0f, texture2D2.Size() / 2f, 1f, SpriteEffects.None, 0.0f); } } if (!Main.mouseLeft || !Main.mouseLeftRelease || flag1) return; this.active = false; } private void DrawCursorArea(SpriteBatch spriteBatch) { if (this.active || (double) this._lineOpacity == 0.0) return; Vector2 vector2 = Main.MouseScreen + new Vector2((float) (10 - 9 * PlayerInput.UsingGamepad.ToInt()), 25f); Color color1 = new Color(50, 50, 50); bool toolAllowActuators = WiresUI.Settings.DrawToolAllowActuators; if (!toolAllowActuators) { if (!PlayerInput.UsingGamepad) vector2 += new Vector2(-20f, 10f); else vector2 += new Vector2(0.0f, 10f); } Texture2D texture1 = TextureAssets.BuilderAcc.Value; Texture2D texture2 = texture1; Rectangle r1 = new Rectangle(140, 2, 6, 6); Rectangle r2 = new Rectangle(148, 2, 6, 6); Rectangle r3 = new Rectangle(128, 0, 10, 10); float num1 = 1f; float scale = 1f; bool flag1 = false; if (flag1 && !toolAllowActuators) num1 *= Main.cursorScale; float lineOpacity = this._lineOpacity; if (PlayerInput.UsingGamepad) lineOpacity *= Main.GamepadCursorAlpha; for (int index = 0; index < 5; ++index) { if (toolAllowActuators || index != 4) { float num2 = lineOpacity; Vector2 vec = vector2 + Vector2.UnitX * (float) (45.0 * ((double) index - 1.5)); int num3 = index; if (index == 0) num3 = 3; if (index == 1) num3 = 2; if (index == 2) num3 = 1; if (index == 3) num3 = 0; if (index == 4) num3 = 5; int num4 = num3; switch (num4) { case 1: num4 = 2; break; case 2: num4 = 1; break; } bool flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) (WiresUI.Settings.MultiToolMode) (1 << num4)); if (num4 == 5) flag2 = WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Actuator); Color color2 = Color.HotPink; switch (num3) { case 0: color2 = new Color(253, 58, 61); break; case 1: color2 = new Color(83, 180, 253); break; case 2: color2 = new Color(83, 253, 153); break; case 3: color2 = new Color(253, 254, 83); break; case 5: color2 = Color.WhiteSmoke; break; } if (!flag2) color2 = Color.Lerp(color2, Color.Black, 0.65f); if (flag1) { if (toolAllowActuators) { switch (num3) { case 0: vec = vector2 + new Vector2(-12f, 0.0f) * num1; break; case 1: vec = vector2 + new Vector2(-6f, 12f) * num1; break; case 2: vec = vector2 + new Vector2(6f, 12f) * num1; break; case 3: vec = vector2 + new Vector2(12f, 0.0f) * num1; break; case 5: vec = vector2 + new Vector2(0.0f, 0.0f) * num1; break; } } else vec = vector2 + new Vector2((float) (12 * (num3 + 1)), (float) (12 * (3 - num3))) * num1; } else if (toolAllowActuators) { switch (num3) { case 0: vec = vector2 + new Vector2(-12f, 0.0f) * num1; break; case 1: vec = vector2 + new Vector2(-6f, 12f) * num1; break; case 2: vec = vector2 + new Vector2(6f, 12f) * num1; break; case 3: vec = vector2 + new Vector2(12f, 0.0f) * num1; break; case 5: vec = vector2 + new Vector2(0.0f, 0.0f) * num1; break; } } else { float num5 = 0.7f; switch (num3) { case 0: vec = vector2 + new Vector2(0.0f, -12f) * num1 * num5; break; case 1: vec = vector2 + new Vector2(-12f, 0.0f) * num1 * num5; break; case 2: vec = vector2 + new Vector2(0.0f, 12f) * num1 * num5; break; case 3: vec = vector2 + new Vector2(12f, 0.0f) * num1 * num5; break; } } Vector2 position = vec.Floor(); spriteBatch.Draw(texture2, position, new Rectangle?(r3), color1 * num2, 0.0f, r3.Size() / 2f, scale, SpriteEffects.None, 0.0f); spriteBatch.Draw(texture1, position, new Rectangle?(r1), color2 * num2, 0.0f, r1.Size() / 2f, scale, SpriteEffects.None, 0.0f); if (WiresUI.Settings.ToolMode.HasFlag((Enum) WiresUI.Settings.MultiToolMode.Cutter)) spriteBatch.Draw(texture1, position, new Rectangle?(r2), color1 * num2, 0.0f, r2.Size() / 2f, scale, SpriteEffects.None, 0.0f); } } } } } }