using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using EquinoxsDebuggingTools;
using EquinoxsModUtils;
using FluffyUnderware.DevTools.Extensions;
using HarmonyLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("QuickBuild")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("QuickBuild")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("eee8fd1d-c9a8-4a87-95ce-ced596eb7cda")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace QuickBuild;
public class MenuItem
{
public string name;
public string icon;
public string buildable;
}
internal static class QuickBuildGUI
{
internal static bool shouldShowGUI = false;
internal static string currentCategory = "Root";
internal static float sSinceClose = 0f;
internal static float sSinceClick = 0f;
private static bool initialisedGUI = false;
private static bool loggedCategory = false;
internal static Dictionary<string, List<MenuItem>> categoryOptions = new Dictionary<string, List<MenuItem>>
{
{
"Root",
new List<MenuItem>
{
new MenuItem
{
name = "Logistics",
icon = "Conveyor Belt"
},
new MenuItem
{
name = "Production",
icon = "Assembler"
},
new MenuItem
{
name = "Structures",
icon = "Calycite Platform (5x5)"
},
new MenuItem
{
name = "Supports",
icon = "Metal Rib Base (1x2)"
},
new MenuItem
{
name = "Decorations",
icon = "Ceiling Plant (1x1)"
}
}
},
{
"Root/Logistics",
new List<MenuItem>
{
new MenuItem
{
name = "Conveyors",
icon = "Conveyor Belt"
},
new MenuItem
{
name = "Inserters",
icon = "Inserter"
},
new MenuItem
{
name = "Monorails",
icon = "Monorail Depot"
},
new MenuItem
{
name = "Power",
icon = "High Voltage Cable"
},
new MenuItem
{
name = "Utility",
icon = "Container"
}
}
},
{
"Root/Logistics/Conveyors",
new List<MenuItem>
{
new MenuItem
{
name = "Mk 1",
icon = "Conveyor Belt",
buildable = "Conveyor Belt"
},
new MenuItem
{
name = "Mk 2",
icon = "Conveyor Belt MKII",
buildable = "Conveyor Belt MKII"
},
new MenuItem
{
name = "Mk 3",
icon = "Conveyor Belt MKIII",
buildable = "Conveyor Belt MKIII"
}
}
},
{
"Root/Logistics/Inserters",
new List<MenuItem>
{
new MenuItem
{
name = "Normal",
icon = "Inserter",
buildable = "Inserter"
},
new MenuItem
{
name = "Long",
icon = "Long Inserter",
buildable = "Long Inserter"
},
new MenuItem
{
name = "Filter",
icon = "Filter Inserter",
buildable = "Filter Inserter"
},
new MenuItem
{
name = "Fast",
icon = "Fast Inserter",
buildable = "Fast Inserter"
},
new MenuItem
{
name = "Stack",
icon = "Stack Inserter",
buildable = "Stack Inserter"
},
new MenuItem
{
name = "Stack Filter",
icon = "Stack Filter Inserter",
buildable = "Stack Filter Inserter"
},
new MenuItem
{
name = "Long Stack Filter",
icon = "Long Stack Filter Inserter",
buildable = "Long Stack Filter Inserter"
}
}
},
{
"Root/Logistics/Monorails",
new List<MenuItem>
{
new MenuItem
{
name = "Depot",
icon = "Monorail Depot",
buildable = "Monorail Depot"
},
new MenuItem
{
name = "Pole",
icon = "Monorail Pole",
buildable = "Monorail Pole"
},
new MenuItem
{
name = "Track",
icon = "Monorail Track",
buildable = "Monorail Track"
}
}
},
{
"Root/Logistics/Power",
new List<MenuItem>
{
new MenuItem
{
name = "Accum.",
icon = "Accumulator",
buildable = "Accumulator"
},
new MenuItem
{
name = "Voltage Stepper",
icon = "Voltage Stepper",
buildable = "Voltage Stepper"
},
new MenuItem
{
name = "HVC",
icon = "High Voltage Cable",
buildable = "High Voltage Cable"
}
}
},
{
"Root/Logistics/Utility",
new List<MenuItem>
{
new MenuItem
{
name = "Chest",
icon = "Container",
buildable = "Container"
},
new MenuItem
{
name = "Chest Mk 2",
icon = "Container MKII",
buildable = "Container MKII"
},
new MenuItem
{
name = "Nexus",
icon = "Nexus",
buildable = "Nexus"
}
}
},
{
"Root/Production",
new List<MenuItem>
{
new MenuItem
{
name = "Miners",
icon = "Mining Drill"
},
new MenuItem
{
name = "Smelters",
icon = "Smelter"
},
new MenuItem
{
name = "Assemblers",
icon = "Assembler"
},
new MenuItem
{
name = "Plants",
icon = "Thresher"
},
new MenuItem
{
name = "Power",
icon = "Crank Generator"
}
}
},
{
"Root/Production/Miners",
new List<MenuItem>
{
new MenuItem
{
name = "Mk 1",
icon = "Mining Drill",
buildable = "Mining Drill"
},
new MenuItem
{
name = "Mk 2",
icon = "Mining Drill MKII",
buildable = "Mining Drill MKII"
},
new MenuItem
{
name = "Blast",
icon = "Blast Drill",
buildable = "Blast Drill"
},
new MenuItem
{
name = "Charge",
icon = "Mining Charge",
buildable = "Mining Charge"
},
new MenuItem
{
name = "Sand Pump",
icon = "Sand Pump",
buildable = "Sand Pump"
}
}
},
{
"Root/Production/Smelters",
new List<MenuItem>
{
new MenuItem
{
name = "Mk 1",
icon = "Smelter",
buildable = "Smelter"
},
new MenuItem
{
name = "Mk 2",
icon = "Smelter MKII",
buildable = "Smelter MKII"
},
new MenuItem
{
name = "Mk 3",
icon = "Smelter MKIII",
buildable = "Smelter MKIII"
},
new MenuItem
{
name = "Blast",
icon = "Blast Smelter",
buildable = "Blast Smelter"
}
}
},
{
"Root/Production/Assemblers",
new List<MenuItem>
{
new MenuItem
{
name = "Mk 1",
icon = "Assembler",
buildable = "Assembler"
},
new MenuItem
{
name = "Mk 2",
icon = "Assembler MKII",
buildable = "Assembler MKII"
},
new MenuItem
{
name = "Crusher",
icon = "Crusher",
buildable = "Crusher"
}
}
},
{
"Root/Production/Plants",
new List<MenuItem>
{
new MenuItem
{
name = "Planter",
icon = "Planter",
buildable = "Planter"
},
new MenuItem
{
name = "Planter Mk 2",
icon = "Planter MKII",
buildable = "Planter MKII"
},
new MenuItem
{
name = "Thr. Mk 1",
icon = "Thresher",
buildable = "Thresher"
},
new MenuItem
{
name = "Thr. Mk 2",
icon = "Thresher MKII",
buildable = "Thresher MKII"
}
}
},
{
"Root/Production/Power",
new List<MenuItem>
{
new MenuItem
{
name = "Mk 1",
icon = "Crank Generator",
buildable = "Crank Generator"
},
new MenuItem
{
name = "Mk 2",
icon = "Crank Generator",
buildable = "Crank Generator MKII"
},
new MenuItem
{
name = "Water Wheel",
icon = "Water Wheel",
buildable = "Water Wheel"
}
}
},
{
"Root/Structures",
new List<MenuItem>
{
new MenuItem
{
name = "Floors",
icon = "Calycite Platform (5x5)"
},
new MenuItem
{
name = "Walls",
icon = "Calycite Wall (3x3)"
},
new MenuItem
{
name = "Caps",
icon = "Calycite Wall Cap (3x1)"
},
new MenuItem
{
name = "Gates",
icon = "Calycite Gate (5x5)"
},
new MenuItem
{
name = "Cutaways",
icon = "Calycite Wall Cutaway (5x5)"
},
new MenuItem
{
name = "Stairs",
icon = "Metal Stairs (3x5)"
},
new MenuItem
{
name = "Ramps",
icon = "Calycite Ramp (1x5)"
}
}
},
{
"Root/Structures/Floors",
new List<MenuItem>
{
new MenuItem
{
name = "Power Floor",
icon = "Power Floor",
buildable = "Power Floor"
},
new MenuItem
{
name = "1x1",
icon = "Calycite Platform (1x1)",
buildable = "Calycite Platform (1x1)"
},
new MenuItem
{
name = "3x3",
icon = "Calycite Platform (3x3)",
buildable = "Calycite Platform (3x3)"
},
new MenuItem
{
name = "5x5",
icon = "Calycite Platform (5x5)",
buildable = "Calycite Platform (5x5)"
},
new MenuItem
{
name = "Catwalk 3x9",
icon = "Catwalk (3x9)",
buildable = "Catwalk (3x9)"
},
new MenuItem
{
name = "Catwalk 5x9",
icon = "Catwalk (5x9)",
buildable = "Catwalk (5x9)"
},
new MenuItem
{
name = "Disco 1x1",
icon = "Disco Block (1x1)",
buildable = "Disco Block (1x1)"
},
new MenuItem
{
name = "Glow 1x1",
icon = "Glow Block (1x1)",
buildable = "Glow Block (1x1)"
}
}
},
{
"Root/Structures/Walls",
new List<MenuItem>
{
new MenuItem
{
name = "3x3",
icon = "Calycite Wall (3x3)",
buildable = "Calycite Wall (3x3)"
},
new MenuItem
{
name = "5x3",
icon = "Calycite Wall (5x3)",
buildable = "Calycite Wall (5x3)"
},
new MenuItem
{
name = "5x5",
icon = "Calycite Wall (5x5)",
buildable = "Calycite Wall (5x5)"
}
}
},
{
"Root/Structures/Caps",
new List<MenuItem>
{
new MenuItem
{
name = "Corner",
icon = "Calycite Wall Corner (1x1)",
buildable = "Calycite Wall Corner (1x1)"
},
new MenuItem
{
name = "3x1",
icon = "Calycite Wall Cap (3x1)",
buildable = "Calycite Wall Cap (5x1)"
},
new MenuItem
{
name = "5x1",
icon = "Calycite Wall Cap (5x1)",
buildable = "Calycite Wall Cap (5x1)"
},
new MenuItem
{
name = "3x1",
icon = "Calycite Vertical Wall Cap (3x1)",
buildable = "Calycite Vertical Wall Cap (3x1)"
},
new MenuItem
{
name = "5x1",
icon = "Calycite Vertical Wall Cap (5x1)",
buildable = "Calycite Vertical Wall Cap (5x1)"
}
}
},
{
"Root/Structures/Gates",
new List<MenuItem>
{
new MenuItem
{
name = "5x2",
icon = "Calycite Gate (5x2)",
buildable = "Calycite Gate (5x2)"
},
new MenuItem
{
name = "5x5",
icon = "Calycite Gate (5x5)",
buildable = "Calycite Gate (5x5)"
},
new MenuItem
{
name = "10x5",
icon = "Calycite Gate (10x5)",
buildable = "Calycite Gate (10x5)"
}
}
},
{
"Root/Structures/Cutaways",
new List<MenuItem>
{
new MenuItem
{
name = "2x2",
icon = "Calycite Wall Cutaway (2x2)",
buildable = "Calycite Wall Cutaway (2x2)"
},
new MenuItem
{
name = "3x3",
icon = "Calycite Wall Cutaway (3x3)",
buildable = "Calycite Wall Cutaway (3x3)"
},
new MenuItem
{
name = "5x3",
icon = "Calycite Wall Cutaway (5x3)",
buildable = "Calycite Wall Cutaway (5x3)"
},
new MenuItem
{
name = "5x5",
icon = "Calycite Wall Cutaway (5x5)",
buildable = "Calycite Wall Cutaway (5x5)"
}
}
},
{
"Root/Structures/Stairs",
new List<MenuItem>
{
new MenuItem
{
name = "1x1",
icon = "Metal Stairs (1x1)",
buildable = "Metal Stairs (1x1)"
},
new MenuItem
{
name = "3x1",
icon = "Metal Stairs (3x1)",
buildable = "Metal Stairs (3x1)"
},
new MenuItem
{
name = "3x3",
icon = "Metal Stairs (3x3)",
buildable = "Metal Stairs (3x3)"
},
new MenuItem
{
name = "3x5",
icon = "Metal Stairs (3x5)",
buildable = "Metal Stairs (3x5)"
}
}
},
{
"Root/Structures/Ramps",
new List<MenuItem>
{
new MenuItem
{
name = "1x1",
icon = "Calycite Ramp (1x1)",
buildable = "Calycite Ramp (1x1)"
},
new MenuItem
{
name = "1x3",
icon = "Calycite Ramp (1x3)",
buildable = "Calycite Ramp (1x3)"
},
new MenuItem
{
name = "1x5",
icon = "Calycite Ramp (1x5)",
buildable = "Calycite Ramp (1x5)"
}
}
},
{
"Root/Supports",
new List<MenuItem>
{
new MenuItem
{
name = "Beams",
icon = "Calycite Beam (5x1)"
},
new MenuItem
{
name = "Pillars",
icon = "Calycite Pillar (1x5)"
},
new MenuItem
{
name = "Arches",
icon = "Metal Angle Support (5x2)"
},
new MenuItem
{
name = "Ribs",
icon = "Metal Rib Base (1x2)"
}
}
},
{
"Root/Supports/Beams",
new List<MenuItem>
{
new MenuItem
{
name = "Calycite 1x1",
icon = "Calycite Beam (1x1)",
buildable = "Calycite Beam (1x1)"
},
new MenuItem
{
name = "Calycite 3x1",
icon = "Calycite Beam (3x1)",
buildable = "Calycite Beam (3x1)"
},
new MenuItem
{
name = "Calycite 5x1",
icon = "Calycite Beam (5x1)",
buildable = "Calycite Beam (5x1)"
},
new MenuItem
{
name = "Metal 1x1",
icon = "Metal Beam (1x1)",
buildable = "Metal Beam (1x1)"
},
new MenuItem
{
name = "Metal 3x1",
icon = "Metal Beam (1x3)",
buildable = "Metal Beam (1x3)"
},
new MenuItem
{
name = "Metal 5x1",
icon = "Metal Beam (1x5)",
buildable = "Metal Beam (1x5)"
}
}
},
{
"Root/Supports/Pillars",
new List<MenuItem>
{
new MenuItem
{
name = "Calycite 1x1",
icon = "Calycite Pillar (1x1)",
buildable = "Calycite Pillar (1x1)"
},
new MenuItem
{
name = "Calycite 1x3",
icon = "Calycite Pillar (1x3)",
buildable = "Calycite Pillar (1x3)"
},
new MenuItem
{
name = "Calycite 1x5",
icon = "Calycite Pillar (1x5)",
buildable = "Calycite Pillar (1x5)"
},
new MenuItem
{
name = "Metal 1x1",
icon = "Metal Pillar (1x1)",
buildable = "Metal Pillar (1x1)"
},
new MenuItem
{
name = "Metal 1x3",
icon = "Metal Pillar (1x3)",
buildable = "Metal Pillar (1x3)"
},
new MenuItem
{
name = "Metal 1x5",
icon = "Metal Pillar (1x5)",
buildable = "Metal Pillar (1x5)"
}
}
},
{
"Root/Supports/Arches",
new List<MenuItem>
{
new MenuItem
{
name = "Calycite 3x3",
icon = "Calycite Angle Support (3x3)",
buildable = "Calycite Angle Support (3x3)"
},
new MenuItem
{
name = "Metal 5x2",
icon = "Metal Angle Support (5x2)",
buildable = "Metal Angle Support (5x2)"
}
}
},
{
"Root/Supports/Ribs",
new List<MenuItem>
{
new MenuItem
{
name = "Base 1x2",
icon = "Metal Rib Base (1x2)",
buildable = "Metal Rib Base (1x2)"
},
new MenuItem
{
name = "Middle 1x3",
icon = "Metal Rib Middle (1x3)",
buildable = "Metal Rib Middle (1x3)"
}
}
},
{
"Root/Decorations",
new List<MenuItem>
{
new MenuItem
{
name = "Lights",
icon = "Wall Light (1x1)"
},
new MenuItem
{
name = "Railings",
icon = "Railing (3x1)"
},
new MenuItem
{
name = "Plants",
icon = "Ceiling Plant (1x1)"
}
}
},
{
"Root/Decorations/Lights",
new List<MenuItem>
{
new MenuItem
{
name = "Sticks",
icon = "Light Stick"
},
new MenuItem
{
name = "Overhead",
icon = "Overhead Light",
buildable = "Overhead Light"
},
new MenuItem
{
name = "Lamp",
icon = "Standing Lamp (1x5)",
buildable = "Standing Lamp (1x5)"
},
new MenuItem
{
name = "Wall 1x1",
icon = "Wall Light (1x1)",
buildable = "Wall Light (1x1)"
},
new MenuItem
{
name = "Wall 3x1",
icon = "Wall Light (3x1)",
buildable = "Wall Light (3x1)"
},
new MenuItem
{
name = "Ceiling 1x1",
icon = "Hanging Lamp (1x1)",
buildable = "Hanging Lamp (1x1)"
},
new MenuItem
{
name = "Fan 7x2",
icon = "Fan Lamp (7x2)",
buildable = "Fan Lamp (7x2)"
}
}
},
{
"Root/Decorations/Railings",
new List<MenuItem>
{
new MenuItem
{
name = "1x1",
icon = "Railing (1x1)",
buildable = "Railing (1x1)"
},
new MenuItem
{
name = "3x1",
icon = "Railing (3x1)",
buildable = "Railing (3x1)"
},
new MenuItem
{
name = "5x1",
icon = "Railing (5x1)",
buildable = "Railing (5x1)"
},
new MenuItem
{
name = "Corner 1x1",
icon = "Railing Corner (1x1)",
buildable = "Railing Corner (1x1)"
},
new MenuItem
{
name = "Corner 3x3",
icon = "Railing Corner (3x3)",
buildable = "Railing Corner (3x3)"
}
}
},
{
"Root/Decorations/Plants",
new List<MenuItem>
{
new MenuItem
{
name = "Pot 1x1",
icon = "Small Floor Pot",
buildable = "Small Floor Pot"
},
new MenuItem
{
name = "Wall Pot 3x1",
icon = "Wall Pot",
buildable = "Wall Pot"
},
new MenuItem
{
name = "Pot 2x2",
icon = "Medium Floor Pot",
buildable = "Medium Floor Pot"
},
new MenuItem
{
name = "Ceiling 1x1",
icon = "Ceiling Plant (1x1)",
buildable = "Ceiling Plant (1x1)"
},
new MenuItem
{
name = "Ceiling 3x3",
icon = "Ceiling Plant (3x3)",
buildable = "Ceiling Plant (3x3)"
},
new MenuItem
{
name = "Wall 1x1",
icon = "Wall Plant (1x1)",
buildable = "Wall Plant (1x1)"
},
new MenuItem
{
name = "Wall 3x3",
icon = "Wall Plant (3x3)",
buildable = "Wall Plant (3x3)"
}
}
}
};
private static Texture2D oneNormal;
private static Texture2D oneHover;
private static Texture2D twoNormal;
private static Texture2D twoHover;
private static Texture2D threeNormal;
private static Texture2D threeHover;
private static Texture2D fourNormal;
private static Texture2D fourHover;
private static Texture2D fiveNormal;
private static Texture2D fiveHover;
private static Texture2D sixNormal;
private static Texture2D sixHover;
private static Texture2D sevenNormal;
private static Texture2D sevenHover;
private static Texture2D eightNormal;
private static Texture2D eightHover;
private static GUIStyle oneNormalStyle;
private static GUIStyle oneHoverStyle;
private static GUIStyle twoNormalStyle;
private static GUIStyle twoHoverStyle;
private static GUIStyle threeNormalStyle;
private static GUIStyle threeHoverStyle;
private static GUIStyle fourNormalStyle;
private static GUIStyle fourHoverStyle;
private static GUIStyle fiveNormalStyle;
private static GUIStyle fiveHoverStyle;
private static GUIStyle sixNormalStyle;
private static GUIStyle sixHoverStyle;
private static GUIStyle sevenNormalStyle;
private static GUIStyle sevenHoverStyle;
private static GUIStyle eightNormalStyle;
private static GUIStyle eightHoverStyle;
private static GUIStyle iconStyle;
private static GUIStyle normalTextStyle;
private static GUIStyle hoverTextStyle;
private static float xPos => (float)(Screen.width - 512) / 2f;
private static float yPos => (float)(Screen.height - 512) / 2f;
internal static void LoadImages()
{
oneNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.1-Normal.png", false, (Assembly)null);
oneHover = Images.LoadTexture2DFromFile("QuickBuild.Images.1-Hover.png", false, (Assembly)null);
twoNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.2-Normal.png", false, (Assembly)null);
twoHover = Images.LoadTexture2DFromFile("QuickBuild.Images.2-Hover.png", false, (Assembly)null);
threeNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.3-Normal.png", false, (Assembly)null);
threeHover = Images.LoadTexture2DFromFile("QuickBuild.Images.3-Hover.png", false, (Assembly)null);
fourNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.4-Normal.png", false, (Assembly)null);
fourHover = Images.LoadTexture2DFromFile("QuickBuild.Images.4-Hover.png", false, (Assembly)null);
fiveNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.5-Normal.png", false, (Assembly)null);
fiveHover = Images.LoadTexture2DFromFile("QuickBuild.Images.5-Hover.png", false, (Assembly)null);
sixNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.6-Normal.png", false, (Assembly)null);
sixHover = Images.LoadTexture2DFromFile("QuickBuild.Images.6-Hover.png", false, (Assembly)null);
sevenNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.7-Normal.png", false, (Assembly)null);
sevenHover = Images.LoadTexture2DFromFile("QuickBuild.Images.7-Hover.png", false, (Assembly)null);
eightNormal = Images.LoadTexture2DFromFile("QuickBuild.Images.8-Normal.png", false, (Assembly)null);
eightHover = Images.LoadTexture2DFromFile("QuickBuild.Images.8-Hover.png", false, (Assembly)null);
}
internal static void CloseAndReset()
{
EMU.FreeCursor(false);
shouldShowGUI = false;
loggedCategory = false;
currentCategory = "Root";
sSinceClose = 0f;
}
internal static void Draw()
{
EDT.PacedLog("General", "Drawing Quick Build Menu", 1f);
if (!initialisedGUI)
{
InitialiseGUI();
}
if (UnityInput.Current.GetMouseButtonDown(1) && sSinceClick > 0.2f)
{
sSinceClick = 0f;
if (currentCategory != "Root")
{
GoBackOneLevel();
}
else
{
CloseAndReset();
}
}
DrawSegmentBackgrounds();
DrawSegmentForegrounds();
}
private static void DrawSegmentForegrounds()
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
List<MenuItem> list = categoryOptions[currentCategory];
foreach (MenuItem item in list)
{
int index = list.IndexOf(item);
bool flag = ShouldHighlightItem(index, list.Count);
Vector2 foregroundLocation = GetForegroundLocation(index, list.Count);
GUI.Box(new Rect(foregroundLocation.x - 30f, foregroundLocation.y - 40f, 60f, 60f), (Texture)(object)Images.GetImageForResource(item.icon, false), iconStyle);
GUI.Label(new Rect(foregroundLocation.x - 40f, foregroundLocation.y - 40f, 80f, 80f), item.name, flag ? hoverTextStyle : normalTextStyle);
}
}
private static void DrawSegmentBackgrounds()
{
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
List<MenuItem> list = categoryOptions[currentCategory];
foreach (MenuItem item in list)
{
if (!loggedCategory)
{
EDT.Log("General", $"Drawing Item '{item.name}' at ({xPos},{yPos})");
loggedCategory = true;
}
bool flag = ShouldHighlightItem(list.IndexOf(item), list.Count);
GUIStyle backgroundStyleForNumButtons = GetBackgroundStyleForNumButtons(list.Count, flag);
GUI.Box(new Rect(xPos, yPos, 512f, 512f), "", backgroundStyleForNumButtons);
if (UnityInput.Current.GetMouseButtonDown(0) && flag && sSinceClick > 0.2f)
{
OnMenuItemClicked(item);
}
GUIUtility.RotateAroundPivot(360f / (float)list.Count, new Vector2(xPos + 256f, yPos + 256f));
}
}
private static void InitialiseGUI()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Expected O, but got Unknown
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected O, but got Unknown
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Expected O, but got Unknown
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Expected O, but got Unknown
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Expected O, but got Unknown
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Expected O, but got Unknown
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Expected O, but got Unknown
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Expected O, but got Unknown
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Expected O, but got Unknown
//IL_0166: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Expected O, but got Unknown
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Expected O, but got Unknown
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Expected O, but got Unknown
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Expected O, but got Unknown
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0209: Expected O, but got Unknown
//IL_0209: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0217: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: Expected O, but got Unknown
initialisedGUI = true;
GUIStyle val = new GUIStyle();
val.normal.background = oneNormal;
oneNormalStyle = val;
GUIStyle val2 = new GUIStyle();
val2.normal.background = oneHover;
oneHoverStyle = val2;
GUIStyle val3 = new GUIStyle();
val3.normal.background = twoNormal;
twoNormalStyle = val3;
GUIStyle val4 = new GUIStyle();
val4.normal.background = twoHover;
twoHoverStyle = val4;
GUIStyle val5 = new GUIStyle();
val5.normal.background = threeNormal;
threeNormalStyle = val5;
GUIStyle val6 = new GUIStyle();
val6.normal.background = threeHover;
threeHoverStyle = val6;
GUIStyle val7 = new GUIStyle();
val7.normal.background = fourNormal;
fourNormalStyle = val7;
GUIStyle val8 = new GUIStyle();
val8.normal.background = fourHover;
fourHoverStyle = val8;
GUIStyle val9 = new GUIStyle();
val9.normal.background = fiveNormal;
fiveNormalStyle = val9;
GUIStyle val10 = new GUIStyle();
val10.normal.background = fiveHover;
fiveHoverStyle = val10;
GUIStyle val11 = new GUIStyle();
val11.normal.background = sixNormal;
sixNormalStyle = val11;
GUIStyle val12 = new GUIStyle();
val12.normal.background = sixHover;
sixHoverStyle = val12;
GUIStyle val13 = new GUIStyle();
val13.normal.background = sevenNormal;
sevenNormalStyle = val13;
GUIStyle val14 = new GUIStyle();
val14.normal.background = sevenHover;
sevenHoverStyle = val14;
GUIStyle val15 = new GUIStyle();
val15.normal.background = eightNormal;
eightNormalStyle = val15;
GUIStyle val16 = new GUIStyle();
val16.normal.background = eightHover;
eightHoverStyle = val16;
GUIStyle val17 = new GUIStyle();
val17.normal.background = null;
iconStyle = val17;
GUIStyle val18 = new GUIStyle
{
fontSize = 15,
alignment = (TextAnchor)7
};
val18.normal.textColor = new Color(68f, 68f, 98f);
normalTextStyle = val18;
GUIStyle val19 = new GUIStyle
{
fontSize = 15,
alignment = (TextAnchor)7
};
val19.normal.textColor = new Color(255f, 165f, 0f);
hoverTextStyle = val19;
}
private static GUIStyle GetBackgroundStyleForNumButtons(int numButtons, bool isHighlighted)
{
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Expected O, but got Unknown
if (isHighlighted)
{
switch (numButtons)
{
case 1:
return oneHoverStyle;
case 2:
return twoHoverStyle;
case 3:
return threeHoverStyle;
case 4:
return fourHoverStyle;
case 5:
return fiveHoverStyle;
case 6:
return sixHoverStyle;
case 7:
return sevenHoverStyle;
case 8:
return eightHoverStyle;
default:
QuickBuildPlugin.Log.LogError((object)$"Could not get hover style for numButtons: {numButtons}");
return new GUIStyle();
}
}
switch (numButtons)
{
case 1:
return oneNormalStyle;
case 2:
return twoNormalStyle;
case 3:
return threeNormalStyle;
case 4:
return fourNormalStyle;
case 5:
return fiveNormalStyle;
case 6:
return sixNormalStyle;
case 7:
return sevenNormalStyle;
case 8:
return eightNormalStyle;
default:
QuickBuildPlugin.Log.LogError((object)$"Could not get normal style for numButtons: {numButtons}");
return new GUIStyle();
}
}
private static bool ShouldHighlightItem(int index, int numButtons)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
float num = UnityInput.Current.mousePosition.x - (float)Screen.width / 2f;
float num2 = UnityInput.Current.mousePosition.y - (float)Screen.height / 2f;
float num3 = Mathf.Sqrt(Mathf.Pow(num, 2f) + Mathf.Pow(num2, 2f));
if (num3 < 156f)
{
return false;
}
float num4 = 57.29578f * Mathf.Atan2(num, num2);
if (num4 < 0f)
{
num4 += 360f;
}
float num5 = 360f / (float)numButtons;
float num6 = (float)index * num5;
float num7 = (float)(index + 1) * num5;
return num4 > num6 && num4 <= num7;
}
private static Vector2 GetForegroundLocation(int index, int numButtons)
{
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
float num = 360f / (float)numButtons;
float num2 = 206f;
float num3 = (float)(2 * index + 1) * num / 2f;
num3 = 90f - num3;
if (num3 < 0f)
{
num3 += 360f;
}
EDT.PacedLog("General", $"{index}/{numButtons} has theta {num3}", 1f);
float num4 = num2 * Mathf.Cos(num3 * ((float)Math.PI / 180f));
float num5 = num2 * Mathf.Sin(num3 * ((float)Math.PI / 180f));
EDT.PacedLog("General", $"(x,y) = ({num4}, {num5})", 1f);
float num6 = (float)Screen.width / 2f + num4;
float num7 = (float)Screen.height / 2f - num5;
EDT.PacedLog("General", $"(screenX, screenY) = ({num6},{num7})", 1f);
return new Vector2(num6, num7);
}
private static void OnMenuItemClicked(MenuItem item)
{
if (string.IsNullOrEmpty(item.buildable))
{
currentCategory = currentCategory + "/" + item.name;
}
else
{
StartBuilding(item);
}
EDT.Log("General", item.name + " clicked");
sSinceClick = 0f;
}
private static void StartBuilding(MenuItem item)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected O, but got Unknown
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
ResourceInfo resourceInfoByName = Resources.GetResourceInfoByName(item.buildable, false);
EyeDropContent val = (EyeDropContent)EMU.GetPrivateField<PlayerBuilder>("_currentEyeDropContent", Player.instance.builder);
val.BuilderInfo = (BuilderInfo)resourceInfoByName;
val.VariantIndex = 0;
val.YawRotation = 0;
EMU.SetPrivateField<PlayerBuilder>("_currentEyeDropContent", Player.instance.builder, (object)val);
Player.instance.builder.CursorUI.Set(resourceInfoByName, false);
EMU.SetPrivateField<PlayerBuilder>("_currentEyeDropState", Player.instance.builder, (object)(EEyeDropState)1);
CloseAndReset();
}
private static void GoBackOneLevel()
{
string[] array = currentCategory.Split(new char[1] { '/' });
array = ArrayExt.RemoveAt<string>(array, array.Count() - 1);
currentCategory = string.Join("/", array);
}
}
[BepInPlugin("com.equinox.QuickBuild", "QuickBuild", "2.0.0")]
public class QuickBuildPlugin : BaseUnityPlugin
{
private const string MyGUID = "com.equinox.QuickBuild";
private const string PluginName = "QuickBuild";
private const string VersionString = "2.0.0";
private static readonly Harmony Harmony = new Harmony("com.equinox.QuickBuild");
public static ManualLogSource Log = new ManualLogSource("QuickBuild");
public static ConfigEntry<KeyCode> showMenuKey;
private void Awake()
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"PluginName: QuickBuild, VersionString: 2.0.0 is loading...");
Harmony.PatchAll();
CreateConfigEntries();
QuickBuildGUI.LoadImages();
((BaseUnityPlugin)this).Logger.LogInfo((object)"PluginName: QuickBuild, VersionString: 2.0.0 is loaded.");
Log = ((BaseUnityPlugin)this).Logger;
}
private void Update()
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
if (!LoadingStates.hasGameLoaded)
{
return;
}
QuickBuildGUI.sSinceClose += Time.deltaTime;
QuickBuildGUI.sSinceClick += Time.deltaTime;
if (UnityInput.Current.GetKeyDown(showMenuKey.Value))
{
if (ShouldShowMenu())
{
QuickBuildGUI.shouldShowGUI = true;
EMU.FreeCursor(true);
}
else
{
QuickBuildGUI.CloseAndReset();
}
}
}
private void OnGUI()
{
if (QuickBuildGUI.shouldShowGUI)
{
QuickBuildGUI.Draw();
}
}
public static void AddItem(string path, MenuItem item)
{
if (!QuickBuildGUI.categoryOptions.ContainsKey(path))
{
Log.LogError((object)("Path '" + path + "' is not a valid path, please add it first"));
}
else
{
QuickBuildGUI.categoryOptions[path].Add(item);
}
}
public static void InsertItem(string path, int index, MenuItem item)
{
if (!QuickBuildGUI.categoryOptions.ContainsKey(path))
{
Log.LogError((object)("Path '" + path + "' is not a valid path, please add it first"));
return;
}
if (index < 0)
{
Log.LogError((object)$"Index '{index}' cannot be < 0, you lemon");
return;
}
int count = QuickBuildGUI.categoryOptions[path].Count;
if (index >= count)
{
Log.LogWarning((object)$"Index was >= than num options ({count}) for path '{path}'. Adding to end instead");
AddItem(path, item);
}
QuickBuildGUI.categoryOptions[path].Insert(index, item);
}
private void CreateConfigEntries()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
showMenuKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "Show Menu Key", (KeyCode)96, new ConfigDescription("Hold this key to open the Quick Build menu", (AcceptableValueBase)null, Array.Empty<object>()));
}
private bool ShouldShowMenu()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Invalid comparison between Unknown and I4
return !QuickBuildGUI.shouldShowGUI && QuickBuildGUI.sSinceClose > 0.2f && (int)Player.instance.builder.CurrentConstructionMode == 0;
}
}