using GadgetCore.API; using HarmonyLib; using System; using UnityEngine; namespace StorageExpansion.Patches { [HarmonyPatch(typeof(GameScript))] [HarmonyPatch("InitializeStorage")] [HarmonyGadget("StorageExpansion")] public static class Patch_GameScript_InitializeStorage { private static Material materialUpgradeButton = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("menuStorageButtonBig.png") }; private static Material materialUpgradeButtonSelected = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("menuStorageButtonBig2.png") }; private static Material materialPageButtonLockSmall = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bStorageLockedSmall.png") }; private static Material materialPageButtonFrameSmall = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("storageSelectSmall.png") }; [HarmonyPrefix] public static bool Prefix(GameScript __instance, ref Item[] ___storage, ref GameObject ___storageSelect, ref GameObject[] ___storageButton, ref GameObject ___menuStorage, ref GameObject[] ___storageIcon, ref GameObject[] ___storageIconBack, ref TextMesh[] ___txtQStorage, ref TextMesh[] ___txtStorageCost) { var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject; if (storageMenu.transform.GetChild(1).gameObject.name == "1") { UpdateSizes(); ___storage = new Item[Core.settingAmountPages * Core.settingAmountSlots]; for (int i = 0; i < ___storage.Length; i++) { ___storage[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); } ___storageButton = new GameObject[Core.settingAmountPages]; ___storageIcon = new GameObject[Core.settingAmountSlots]; ___storageIconBack = new GameObject[Core.settingAmountSlots]; ___txtQStorage = new TextMesh[Core.settingAmountSlots]; storageMenu.GetComponent().material = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GetTexture() }; ___menuStorage = storageMenu; ___storageSelect = storageMenu.transform.FindChild("-").gameObject; ___txtStorageCost[0] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetComponent(); ___txtStorageCost[1] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetChild(0).GetComponent(); if (IsLargeMode()) { var upgradeButton = storageMenu.transform.FindChild("bStorageU"); upgradeButton.GetComponent().material = materialUpgradeButton; upgradeButton.GetComponent().button = materialUpgradeButton; upgradeButton.GetComponent().buttonSelect = materialUpgradeButtonSelected; upgradeButton.transform.localPosition = new Vector3(0.5473f, -0.3367f, 0.15f); upgradeButton.GetComponent().size = new Vector3(0.53f, 0.41f, 1); upgradeButton.GetComponent().center = new Vector3(-0.01f, -0.05f, 0); upgradeButton.GetChild(0).localPosition = new Vector3(0.071f, 0.057f, 0.35f); upgradeButton.GetChild(1).localPosition = new Vector3(-0.015f, -0.089f, 0.35f); } PositionSet pos = GetSizes(); for (int i = 0; i < 29; i++) GameObject.DestroyImmediate(storageMenu.transform.GetChild(1).gameObject); for (int i = 1; i < Core.settingAmountSlots; i++) { var slot = GameObject.Instantiate(storageMenu.transform.GetChild(0).gameObject); slot.name = "" + i; slot.transform.parent = storageMenu.transform; slot.transform.localScale = storageMenu.transform.GetChild(0).localScale; slot.transform.localPosition = pos.slotPos + new Vector3(+0.1328607f * (i % pos.slotWrap), +0.1328607f * (i / pos.slotWrap), 0); slot.transform.localEulerAngles = storageMenu.transform.GetChild(0).localEulerAngles; if (i >= Core.settingAmountActualSlots) slot.transform.localPosition += new Vector3(10, 0, 0); } storageMenu.transform.GetChild(0).transform.localPosition = pos.slotPos; for (int i = 0; i < 11; i++) GameObject.DestroyImmediate(storageMenu.transform.GetChild(3).gameObject); if (HasSmallPageButtons()) { var tab = storageMenu.transform.GetChild(2).gameObject; tab.GetComponent().size = new Vector3(0.42f, 1.1f, 1); tab.GetComponent().material = materialPageButtonLockSmall; var frame = storageMenu.transform.FindChild("-").gameObject; frame.GetComponent().material = materialPageButtonFrameSmall; } for (int i = 1; i < Core.settingAmountPages; i++) { var tab = GameObject.Instantiate(storageMenu.transform.GetChild(2).gameObject); tab.name = "page" + i; tab.transform.parent = storageMenu.transform; tab.transform.localScale = storageMenu.transform.GetChild(2).localScale; tab.transform.localPosition = pos.pagePos + new Vector3( (HasSmallPageButtons() ? 0.05457f : +0.1328607f) * (pos.pageWrap < 0 ? (i / -pos.pageWrap) : (i % pos.pageWrap)), +0.1328607f * (pos.pageWrap < 0 ? (i % -pos.pageWrap) : (i / pos.pageWrap)), 0); tab.transform.localEulerAngles = storageMenu.transform.GetChild(2).localEulerAngles; if (i >= Core.settingAmountActualPages) tab.transform.localPosition += new Vector3(10, 0, 0); } storageMenu.transform.GetChild(2).transform.localPosition = pos.pagePos; for (int i = 0; i < Core.settingAmountSlots; i++) { ___storageIcon[i] = storageMenu.transform.FindChild("" + i).gameObject; ___txtQStorage[i] = storageMenu.transform.FindChild("" + i).GetChild(0).GetComponent(); ___txtQStorage[i].text = ""; ___storageIconBack[i] = storageMenu.transform.FindChild("" + i).GetChild(1).gameObject; } for (int i = 0; i < Core.settingAmountPages; i++) { ___storageButton[i] = storageMenu.transform.FindChild("page" + i).gameObject; } } return false; } private static PositionSet GetSizes() { switch (Core.settingSizeEnum) { //case StorageSizeEnum.UltraSmall: // return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 1, -0.187f, -0.1015f, 0.97f, 1); case StorageSizeEnum.Small: return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 3, 0.0783f, -0.1015f, 0.97f, 1); case StorageSizeEnum.Large: return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7); case StorageSizeEnum.Larger: return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7); case StorageSizeEnum.MegaLarge: return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7); case StorageSizeEnum.UltraLarge: return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4376f, -0.1015f, 0.97f, -7); case StorageSizeEnum.PagesOnly: return new PositionSet(-0.33625f, 0.1640625f, 1.410644f, 6, 0.4766f, -0.3828f, 0.97f, -9); default: return new PositionSet(-0.33625f, 0.1640625f, 1.410644f, 6, 0.4766f, -0.3828f, 0.97f, -9); } } private static Texture2D GetTexture() { switch (Core.settingSizeEnum) { //case StorageSizeEnum.UltraSmall: // return GadgetCoreAPI.LoadTexture2D("menuStorage2x1x2.png"); case StorageSizeEnum.Small: return GadgetCoreAPI.LoadTexture2D("menuStorage3x3x3.png"); case StorageSizeEnum.Large: return GadgetCoreAPI.LoadTexture2D("menustorage6x7x14.png"); case StorageSizeEnum.Larger: return GadgetCoreAPI.LoadTexture2D("menustorage6x8x14.png"); case StorageSizeEnum.MegaLarge: return GadgetCoreAPI.LoadTexture2D("menustorage6x8x28.png"); case StorageSizeEnum.UltraLarge: return GadgetCoreAPI.LoadTexture2D("menustorage6x8x70.png"); case StorageSizeEnum.PagesOnly: return GadgetCoreAPI.LoadTexture2D("menuStorage6x5x27.png"); default: return GadgetCoreAPI.LoadTexture2D("menuStorage6x5x27.png"); } } private static void UpdateSizes() { switch (Core.settingSizeEnum) { //case StorageSizeEnum.UltraSmall: // Core.settingAmountActualPages = 2; // Core.settingAmountActualSlots = 2; // break; case StorageSizeEnum.Small: Core.settingAmountActualPages = 3; Core.settingAmountActualSlots = 3 * 3; break; case StorageSizeEnum.Large: Core.settingAmountActualPages = 2 * 7; Core.settingAmountActualSlots = 6 * 7; break; case StorageSizeEnum.Larger: Core.settingAmountActualPages = 2 * 7; Core.settingAmountActualSlots = 6 * 8; break; case StorageSizeEnum.MegaLarge: Core.settingAmountActualPages = 4 * 7; Core.settingAmountActualSlots = 6 * 8; break; case StorageSizeEnum.UltraLarge: Core.settingAmountActualPages = 10 * 7; Core.settingAmountActualSlots = 6 * 8; break; case StorageSizeEnum.PagesOnly: Core.settingAmountActualPages = 3 * 9; Core.settingAmountActualSlots = 6 * 5; break; default: Core.settingAmountActualPages = 3 * 9; Core.settingAmountActualSlots = 6 * 5; break; } Core.settingAmountPages = Math.Max(Core.settingAmountActualPages, 6 * 2); Core.settingAmountSlots = Math.Max(Core.settingAmountActualSlots, 6 * 5); } private static bool IsLargeMode() { switch (Core.settingSizeEnum) { //case StorageSizeEnum.UltraSmall: case StorageSizeEnum.Small: case StorageSizeEnum.Large: case StorageSizeEnum.PagesOnly: return false; case StorageSizeEnum.Larger: case StorageSizeEnum.MegaLarge: case StorageSizeEnum.UltraLarge: return true; default: return false; } } private static bool HasSmallPageButtons() { switch (Core.settingSizeEnum) { case StorageSizeEnum.UltraLarge: return true; default: return false; } } } }