Patch_GameScript_InitializeStorage.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. using GadgetCore.API;
  2. using HarmonyLib;
  3. using System;
  4. using UnityEngine;
  5. namespace StorageExpansion.Patches
  6. {
  7. [HarmonyPatch(typeof(GameScript))]
  8. [HarmonyPatch("InitializeStorage")]
  9. [HarmonyGadget("StorageExpansion")]
  10. public static class Patch_GameScript_InitializeStorage
  11. {
  12. private static Material materialUpgradeButton = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("menuStorageButtonBig.png") };
  13. private static Material materialUpgradeButtonSelected = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("menuStorageButtonBig2.png") };
  14. private static Material materialPageButtonLockSmall = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bStorageLockedSmall.png") };
  15. private static Material materialPageButtonFrameSmall = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("storageSelectSmall.png") };
  16. [HarmonyPrefix]
  17. public static bool Prefix(GameScript __instance, ref Item[] ___storage, ref GameObject ___storageSelect, ref GameObject[] ___storageButton,
  18. ref GameObject ___menuStorage, ref GameObject[] ___storageIcon, ref GameObject[] ___storageIconBack, ref TextMesh[] ___txtQStorage, ref TextMesh[] ___txtStorageCost)
  19. {
  20. var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
  21. if (storageMenu.transform.GetChild(1).gameObject.name == "1")
  22. {
  23. UpdateSizes();
  24. ___storage = new Item[Core.settingAmountPages * Core.settingAmountSlots];
  25. for (int i = 0; i < ___storage.Length; i++)
  26. {
  27. ___storage[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  28. }
  29. ___storageButton = new GameObject[Core.settingAmountPages];
  30. ___storageIcon = new GameObject[Core.settingAmountSlots];
  31. ___storageIconBack = new GameObject[Core.settingAmountSlots];
  32. ___txtQStorage = new TextMesh[Core.settingAmountSlots];
  33. storageMenu.GetComponent<Renderer>().material = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GetTexture() };
  34. ___menuStorage = storageMenu;
  35. ___storageSelect = storageMenu.transform.FindChild("-").gameObject;
  36. ___txtStorageCost[0] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetComponent<TextMesh>();
  37. ___txtStorageCost[1] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetChild(0).GetComponent<TextMesh>();
  38. if (IsLargeMode())
  39. {
  40. var upgradeButton = storageMenu.transform.FindChild("bStorageU");
  41. upgradeButton.GetComponent<Renderer>().material = materialUpgradeButton;
  42. upgradeButton.GetComponent<ButtonMenu>().button = materialUpgradeButton;
  43. upgradeButton.GetComponent<ButtonMenu>().buttonSelect = materialUpgradeButtonSelected;
  44. upgradeButton.transform.localPosition = new Vector3(0.5473f, -0.3367f, 0.15f);
  45. upgradeButton.GetComponent<BoxCollider>().size = new Vector3(0.53f, 0.41f, 1);
  46. upgradeButton.GetComponent<BoxCollider>().center = new Vector3(-0.01f, -0.05f, 0);
  47. upgradeButton.GetChild(0).localPosition = new Vector3(0.071f, 0.057f, 0.35f);
  48. upgradeButton.GetChild(1).localPosition = new Vector3(-0.015f, -0.089f, 0.35f);
  49. }
  50. PositionSet pos = GetSizes();
  51. for (int i = 0; i < 29; i++)
  52. GameObject.DestroyImmediate(storageMenu.transform.GetChild(1).gameObject);
  53. for (int i = 1; i < Core.settingAmountSlots; i++)
  54. {
  55. var slot = GameObject.Instantiate(storageMenu.transform.GetChild(0).gameObject);
  56. slot.name = "" + i;
  57. slot.transform.parent = storageMenu.transform;
  58. slot.transform.localScale = storageMenu.transform.GetChild(0).localScale;
  59. slot.transform.localPosition = pos.slotPos + new Vector3(+0.1328607f * (i % pos.slotWrap), +0.1328607f * (i / pos.slotWrap), 0);
  60. slot.transform.localEulerAngles = storageMenu.transform.GetChild(0).localEulerAngles;
  61. if (i >= Core.settingAmountActualSlots)
  62. slot.transform.localPosition += new Vector3(10, 0, 0);
  63. }
  64. storageMenu.transform.GetChild(0).transform.localPosition = pos.slotPos;
  65. for (int i = 0; i < 11; i++)
  66. GameObject.DestroyImmediate(storageMenu.transform.GetChild(3).gameObject);
  67. if (HasSmallPageButtons())
  68. {
  69. var tab = storageMenu.transform.GetChild(2).gameObject;
  70. tab.GetComponent<BoxCollider>().size = new Vector3(0.42f, 1.1f, 1);
  71. tab.GetComponent<Renderer>().material = materialPageButtonLockSmall;
  72. var frame = storageMenu.transform.FindChild("-").gameObject;
  73. frame.GetComponent<Renderer>().material = materialPageButtonFrameSmall;
  74. }
  75. for (int i = 1; i < Core.settingAmountPages; i++)
  76. {
  77. var tab = GameObject.Instantiate(storageMenu.transform.GetChild(2).gameObject);
  78. tab.name = "page" + i;
  79. tab.transform.parent = storageMenu.transform;
  80. tab.transform.localScale = storageMenu.transform.GetChild(2).localScale;
  81. tab.transform.localPosition = pos.pagePos + new Vector3(
  82. (HasSmallPageButtons() ? 0.05457f : +0.1328607f) * (pos.pageWrap < 0 ? (i / -pos.pageWrap) : (i % pos.pageWrap)),
  83. +0.1328607f * (pos.pageWrap < 0 ? (i % -pos.pageWrap) : (i / pos.pageWrap)),
  84. 0);
  85. tab.transform.localEulerAngles = storageMenu.transform.GetChild(2).localEulerAngles;
  86. if (i >= Core.settingAmountActualPages)
  87. tab.transform.localPosition += new Vector3(10, 0, 0);
  88. }
  89. storageMenu.transform.GetChild(2).transform.localPosition = pos.pagePos;
  90. for (int i = 0; i < Core.settingAmountSlots; i++)
  91. {
  92. ___storageIcon[i] = storageMenu.transform.FindChild("" + i).gameObject;
  93. ___txtQStorage[i] = storageMenu.transform.FindChild("" + i).GetChild(0).GetComponent<TextMesh>();
  94. ___txtQStorage[i].text = "";
  95. ___storageIconBack[i] = storageMenu.transform.FindChild("" + i).GetChild(1).gameObject;
  96. }
  97. for (int i = 0; i < Core.settingAmountPages; i++)
  98. {
  99. ___storageButton[i] = storageMenu.transform.FindChild("page" + i).gameObject;
  100. }
  101. }
  102. return false;
  103. }
  104. private static PositionSet GetSizes()
  105. {
  106. switch (Core.settingSizeEnum)
  107. {
  108. //case StorageSizeEnum.UltraSmall:
  109. // return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 1, -0.187f, -0.1015f, 0.97f, 1);
  110. case StorageSizeEnum.Small:
  111. return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 3, 0.0783f, -0.1015f, 0.97f, 1);
  112. case StorageSizeEnum.Large:
  113. return new PositionSet(-0.33625f, -0.101500f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7);
  114. case StorageSizeEnum.Larger:
  115. return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7);
  116. case StorageSizeEnum.MegaLarge:
  117. return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4767f, -0.1015f, 0.97f, -7);
  118. case StorageSizeEnum.UltraLarge:
  119. return new PositionSet(-0.33625f, -0.234600f, 1.410644f, 6, 0.4376f, -0.1015f, 0.97f, -7);
  120. case StorageSizeEnum.PagesOnly:
  121. return new PositionSet(-0.33625f, 0.1640625f, 1.410644f, 6, 0.4766f, -0.3828f, 0.97f, -9);
  122. default:
  123. return new PositionSet(-0.33625f, 0.1640625f, 1.410644f, 6, 0.4766f, -0.3828f, 0.97f, -9);
  124. }
  125. }
  126. private static Texture2D GetTexture()
  127. {
  128. switch (Core.settingSizeEnum)
  129. {
  130. //case StorageSizeEnum.UltraSmall:
  131. // return GadgetCoreAPI.LoadTexture2D("menuStorage2x1x2.png");
  132. case StorageSizeEnum.Small:
  133. return GadgetCoreAPI.LoadTexture2D("menuStorage3x3x3.png");
  134. case StorageSizeEnum.Large:
  135. return GadgetCoreAPI.LoadTexture2D("menustorage6x7x14.png");
  136. case StorageSizeEnum.Larger:
  137. return GadgetCoreAPI.LoadTexture2D("menustorage6x8x14.png");
  138. case StorageSizeEnum.MegaLarge:
  139. return GadgetCoreAPI.LoadTexture2D("menustorage6x8x28.png");
  140. case StorageSizeEnum.UltraLarge:
  141. return GadgetCoreAPI.LoadTexture2D("menustorage6x8x70.png");
  142. case StorageSizeEnum.PagesOnly:
  143. return GadgetCoreAPI.LoadTexture2D("menuStorage6x5x27.png");
  144. default:
  145. return GadgetCoreAPI.LoadTexture2D("menuStorage6x5x27.png");
  146. }
  147. }
  148. private static void UpdateSizes()
  149. {
  150. switch (Core.settingSizeEnum)
  151. {
  152. //case StorageSizeEnum.UltraSmall:
  153. // Core.settingAmountActualPages = 2;
  154. // Core.settingAmountActualSlots = 2;
  155. // break;
  156. case StorageSizeEnum.Small:
  157. Core.settingAmountActualPages = 3;
  158. Core.settingAmountActualSlots = 3 * 3;
  159. break;
  160. case StorageSizeEnum.Large:
  161. Core.settingAmountActualPages = 2 * 7;
  162. Core.settingAmountActualSlots = 6 * 7;
  163. break;
  164. case StorageSizeEnum.Larger:
  165. Core.settingAmountActualPages = 2 * 7;
  166. Core.settingAmountActualSlots = 6 * 8;
  167. break;
  168. case StorageSizeEnum.MegaLarge:
  169. Core.settingAmountActualPages = 4 * 7;
  170. Core.settingAmountActualSlots = 6 * 8;
  171. break;
  172. case StorageSizeEnum.UltraLarge:
  173. Core.settingAmountActualPages = 10 * 7;
  174. Core.settingAmountActualSlots = 6 * 8;
  175. break;
  176. case StorageSizeEnum.PagesOnly:
  177. Core.settingAmountActualPages = 3 * 9;
  178. Core.settingAmountActualSlots = 6 * 5;
  179. break;
  180. default:
  181. Core.settingAmountActualPages = 3 * 9;
  182. Core.settingAmountActualSlots = 6 * 5;
  183. break;
  184. }
  185. Core.settingAmountPages = Math.Max(Core.settingAmountActualPages, 6 * 2);
  186. Core.settingAmountSlots = Math.Max(Core.settingAmountActualSlots, 6 * 5);
  187. }
  188. private static bool IsLargeMode()
  189. {
  190. switch (Core.settingSizeEnum)
  191. {
  192. //case StorageSizeEnum.UltraSmall:
  193. case StorageSizeEnum.Small:
  194. case StorageSizeEnum.Large:
  195. case StorageSizeEnum.PagesOnly:
  196. return false;
  197. case StorageSizeEnum.Larger:
  198. case StorageSizeEnum.MegaLarge:
  199. case StorageSizeEnum.UltraLarge:
  200. return true;
  201. default:
  202. return false;
  203. }
  204. }
  205. private static bool HasSmallPageButtons()
  206. {
  207. switch (Core.settingSizeEnum)
  208. {
  209. case StorageSizeEnum.UltraLarge:
  210. return true;
  211. default:
  212. return false;
  213. }
  214. }
  215. }
  216. }