Patch_GameScript_InitializeStorage.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. [HarmonyPrefix]
  13. public static bool Prefix(GameScript __instance, ref Item[] ___storage, ref GameObject ___storageSelect, ref GameObject[] ___storageButton,
  14. ref GameObject ___menuStorage, ref GameObject[] ___storageIcon, ref GameObject[] ___storageIconBack, ref TextMesh[] ___txtQStorage, ref TextMesh[] ___txtStorageCost)
  15. {
  16. if (Core.firstPrefabPath == null)
  17. {
  18. Core.firstPrefabPath = GetPrefabname();
  19. SetSizes();
  20. }
  21. var path = Core.firstPrefabPath;
  22. try
  23. {
  24. var asset = GadgetCoreAPI.LoadAssetBundle(path);
  25. var storageMenuOld = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
  26. GameObject.DestroyImmediate(storageMenuOld);
  27. var storageMenuNew = UnityEngine.Object.Instantiate((GameObject)asset.LoadAsset("assets/resources/menustorage.prefab"));
  28. storageMenuNew.SetActive(false);
  29. storageMenuNew.name = "menuStorage";
  30. storageMenuNew.transform.SetParent(GameObject.Find("Main Camera").transform);
  31. storageMenuNew.transform.localPosition = new Vector3(8, 1.5f, 2);
  32. storageMenuNew.transform.localScale = new Vector3(16, 16, 1);
  33. }
  34. catch (System.Exception e) { Core.logger.Log(e.Message); }
  35. ___storage = new Item[Core.settingAmountPages * Core.settingAmountSlots];
  36. for (int i = 0; i < (Core.settingAmountPages * Core.settingAmountSlots); i++)
  37. {
  38. ___storage[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  39. }
  40. ___storageButton = new GameObject[Core.settingAmountPages];
  41. ___storageIcon = new GameObject[Core.settingAmountSlots];
  42. ___storageIconBack = new GameObject[Core.settingAmountSlots];
  43. ___txtQStorage = new TextMesh[Core.settingAmountSlots];
  44. var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
  45. ___menuStorage = storageMenu;
  46. ___storageSelect = storageMenu.transform.FindChild("-").gameObject;
  47. ___txtStorageCost[0] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetComponent<TextMesh>();
  48. ___txtStorageCost[1] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetChild(0).GetComponent<TextMesh>();
  49. for (int i = 0; i < Core.settingAmountSlots; i++)
  50. {
  51. ___storageIcon[i] = storageMenu.transform.FindChild("" + i).gameObject;
  52. ___txtQStorage[i] = storageMenu.transform.FindChild("" + i).GetChild(0).GetComponent<TextMesh>();
  53. ___txtQStorage[i].text = "";
  54. ___storageIconBack[i] = storageMenu.transform.FindChild("" + i).GetChild(1).gameObject;
  55. }
  56. for (int i = 0; i < Core.settingAmountPages; i++)
  57. {
  58. ___storageButton[i] = storageMenu.transform.FindChild("page" + i).gameObject;
  59. }
  60. postBuildQuickStackButton();
  61. return false;
  62. }
  63. private static void SetSizes()
  64. {
  65. switch (Core.settingSizeEnum)
  66. {
  67. //case StorageSizeEnum.UltraSmall:
  68. // Core.settingAmountPages = 2;
  69. // Core.settingAmountSlots = 2;
  70. // break;
  71. //case StorageSizeEnum.Smaller:
  72. // Core.settingAmountPages = 3;
  73. // Core.settingAmountSlots = 3 * 3;
  74. // break;
  75. case StorageSizeEnum.Large:
  76. Core.settingAmountPages = 14;
  77. Core.settingAmountSlots = 7 * 6;
  78. break;
  79. case StorageSizeEnum.Larger:
  80. Core.settingAmountPages = 14;
  81. Core.settingAmountSlots = 8 * 6;
  82. break;
  83. case StorageSizeEnum.MegaLarge:
  84. Core.settingAmountPages = 28;
  85. Core.settingAmountSlots = 8 * 6;
  86. break;
  87. case StorageSizeEnum.UltraLarge:
  88. Core.settingAmountPages = 70;
  89. Core.settingAmountSlots = 8 * 6;
  90. break;
  91. case StorageSizeEnum.PagesOnly:
  92. Core.settingAmountPages = 27;
  93. Core.settingAmountSlots = 5 * 6;
  94. break;
  95. default:
  96. Core.settingAmountPages = 14;
  97. Core.settingAmountSlots = 7 * 6;
  98. break;
  99. }
  100. }
  101. private static string GetPrefabname()
  102. {
  103. switch (Core.settingSizeEnum)
  104. {
  105. //case StorageSizeEnum.UltraSmall:
  106. // return "menustorage2x1x2";
  107. //case StorageSizeEnum.Smaller:
  108. // return "menustorage3x3x3";
  109. case StorageSizeEnum.Large:
  110. return "menustorage6x7x14";
  111. case StorageSizeEnum.Larger:
  112. return "menustorage6x8x14";
  113. case StorageSizeEnum.MegaLarge:
  114. return "menustorage6x8x28";
  115. case StorageSizeEnum.UltraLarge:
  116. return "menustorage6x8x70";
  117. case StorageSizeEnum.PagesOnly:
  118. return "menustorage6x5x27";
  119. default:
  120. return "menustorage6x7x14";
  121. }
  122. }
  123. private static void postBuildQuickStackButton()
  124. {
  125. Type t = null;
  126. foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
  127. {
  128. if (a.FullName.StartsWith("QuickStack,"))
  129. {
  130. t = a.GetType("QuickStack.StackButtonScript");
  131. break;
  132. }
  133. }
  134. bool isEnabled = false;
  135. foreach (var gadget in GadgetCore.API.Gadgets.ListAllEnabledGadgets())
  136. if (gadget.Info?.ModName == "Quick Stack")
  137. {
  138. isEnabled = true;
  139. break;
  140. }
  141. if (t != null && isEnabled)
  142. {
  143. var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
  144. var pagge0 = storageMenu.transform.Find("page0");
  145. var btn = UnityEngine.Object.Instantiate(pagge0, pagge0.transform.parent).gameObject;
  146. btn.name = "button_quick_stack";
  147. Component.Destroy(btn.GetComponentInChildren<ButtonMenu>());
  148. btn.AddComponent(t);
  149. btn.GetComponentInChildren<BoxCollider>().size = new Vector3(2, 2, 2);
  150. btn.transform.SetParent(storageMenu.transform);
  151. btn.transform.localPosition = new Vector3(-0.5075f, 0.3595f, 0);
  152. btn.transform.localScale = new Vector3(1f / 16f, 1f / 16f, 1);
  153. }
  154. }
  155. }
  156. }