Patch_GameScript_InitializeStorage.cs 10 KB

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