|
@@ -11,34 +11,19 @@ namespace StorageExpansion.Patches
|
|
|
[HarmonyGadget("StorageExpansion")]
|
|
[HarmonyGadget("StorageExpansion")]
|
|
|
public static class Patch_GameScript_InitializeStorage
|
|
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]
|
|
[HarmonyPrefix]
|
|
|
public static bool Prefix(GameScript __instance, ref Item[] ___storage, ref GameObject ___storageSelect, ref GameObject[] ___storageButton,
|
|
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)
|
|
ref GameObject ___menuStorage, ref GameObject[] ___storageIcon, ref GameObject[] ___storageIconBack, ref TextMesh[] ___txtQStorage, ref TextMesh[] ___txtStorageCost)
|
|
|
{
|
|
{
|
|
|
- if (Core.firstPrefabPath == null)
|
|
|
|
|
- {
|
|
|
|
|
- Core.firstPrefabPath = GetPrefabname();
|
|
|
|
|
- SetSizes();
|
|
|
|
|
- }
|
|
|
|
|
- var path = Core.firstPrefabPath;
|
|
|
|
|
- try
|
|
|
|
|
- {
|
|
|
|
|
- var asset = GadgetCoreAPI.LoadAssetBundle(path);
|
|
|
|
|
-
|
|
|
|
|
- var storageMenuOld = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
|
|
|
|
|
- GameObject.DestroyImmediate(storageMenuOld);
|
|
|
|
|
-
|
|
|
|
|
- var storageMenuNew = UnityEngine.Object.Instantiate((GameObject)asset.LoadAsset("assets/resources/menustorage.prefab"));
|
|
|
|
|
- storageMenuNew.SetActive(false);
|
|
|
|
|
- storageMenuNew.name = "menuStorage";
|
|
|
|
|
- storageMenuNew.transform.SetParent(GameObject.Find("Main Camera").transform);
|
|
|
|
|
- storageMenuNew.transform.localPosition = new Vector3(8, 1.5f, 2);
|
|
|
|
|
- storageMenuNew.transform.localScale = new Vector3(16, 16, 1);
|
|
|
|
|
- }
|
|
|
|
|
- catch (System.Exception e) { Core.logger.Log(e.Message); }
|
|
|
|
|
|
|
+ UpdateSizes();
|
|
|
|
|
|
|
|
___storage = new Item[Core.settingAmountPages * Core.settingAmountSlots];
|
|
___storage = new Item[Core.settingAmountPages * Core.settingAmountSlots];
|
|
|
- for (int i = 0; i < (Core.settingAmountPages * Core.settingAmountSlots); i++)
|
|
|
|
|
|
|
+ for (int i = 0; i < ___storage.Length; i++)
|
|
|
{
|
|
{
|
|
|
___storage[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
|
|
___storage[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
|
|
|
}
|
|
}
|
|
@@ -50,12 +35,72 @@ namespace StorageExpansion.Patches
|
|
|
___txtQStorage = new TextMesh[Core.settingAmountSlots];
|
|
___txtQStorage = new TextMesh[Core.settingAmountSlots];
|
|
|
|
|
|
|
|
var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
|
|
var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
|
|
|
|
|
+ storageMenu.GetComponent<Renderer>().material = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GetTexture() };
|
|
|
___menuStorage = storageMenu;
|
|
___menuStorage = storageMenu;
|
|
|
___storageSelect = storageMenu.transform.FindChild("-").gameObject;
|
|
___storageSelect = storageMenu.transform.FindChild("-").gameObject;
|
|
|
|
|
|
|
|
___txtStorageCost[0] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetComponent<TextMesh>();
|
|
___txtStorageCost[0] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetComponent<TextMesh>();
|
|
|
___txtStorageCost[1] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetChild(0).GetComponent<TextMesh>();
|
|
___txtStorageCost[1] = storageMenu.transform.FindChild("bStorageU").GetChild(0).GetChild(0).GetComponent<TextMesh>();
|
|
|
|
|
|
|
|
|
|
+ if (IsLargeMode())
|
|
|
|
|
+ {
|
|
|
|
|
+ var upgradeButton = storageMenu.transform.FindChild("bStorageU");
|
|
|
|
|
+ upgradeButton.GetComponent<Renderer>().material = materialUpgradeButton;
|
|
|
|
|
+ upgradeButton.GetComponent<ButtonMenu>().button = materialUpgradeButton;
|
|
|
|
|
+ upgradeButton.GetComponent<ButtonMenu>().buttonSelect = materialUpgradeButtonSelected;
|
|
|
|
|
+ upgradeButton.transform.localPosition = new Vector3(0.5473f, -0.3367f, 0.15f);
|
|
|
|
|
+ upgradeButton.GetComponent<BoxCollider>().size = new Vector3(0.53f, 0.41f, 1);
|
|
|
|
|
+ upgradeButton.GetComponent<BoxCollider>().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<BoxCollider>().size = new Vector3(0.42f, 1.1f, 1);
|
|
|
|
|
+ tab.GetComponent<Renderer>().material = materialPageButtonLockSmall;
|
|
|
|
|
+ var frame = storageMenu.transform.FindChild("-").gameObject;
|
|
|
|
|
+ frame.GetComponent<Renderer>().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++)
|
|
for (int i = 0; i < Core.settingAmountSlots; i++)
|
|
|
{
|
|
{
|
|
|
___storageIcon[i] = storageMenu.transform.FindChild("" + i).gameObject;
|
|
___storageIcon[i] = storageMenu.transform.FindChild("" + i).gameObject;
|
|
@@ -67,105 +112,122 @@ namespace StorageExpansion.Patches
|
|
|
{
|
|
{
|
|
|
___storageButton[i] = storageMenu.transform.FindChild("page" + i).gameObject;
|
|
___storageButton[i] = storageMenu.transform.FindChild("page" + i).gameObject;
|
|
|
}
|
|
}
|
|
|
- postBuildQuickStackButton();
|
|
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static void SetSizes()
|
|
|
|
|
|
|
+ private static PositionSet GetSizes()
|
|
|
{
|
|
{
|
|
|
switch (Core.settingSizeEnum)
|
|
switch (Core.settingSizeEnum)
|
|
|
{
|
|
{
|
|
|
//case StorageSizeEnum.UltraSmall:
|
|
//case StorageSizeEnum.UltraSmall:
|
|
|
- // Core.settingAmountPages = 2;
|
|
|
|
|
- // Core.settingAmountSlots = 2;
|
|
|
|
|
- // break;
|
|
|
|
|
- //case StorageSizeEnum.Smaller:
|
|
|
|
|
- // Core.settingAmountPages = 3;
|
|
|
|
|
- // Core.settingAmountSlots = 3 * 3;
|
|
|
|
|
|
|
+ // 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;
|
|
// break;
|
|
|
|
|
+ case StorageSizeEnum.Small:
|
|
|
|
|
+ Core.settingAmountActualPages = 3;
|
|
|
|
|
+ Core.settingAmountActualSlots = 3 * 3;
|
|
|
|
|
+ break;
|
|
|
case StorageSizeEnum.Large:
|
|
case StorageSizeEnum.Large:
|
|
|
- Core.settingAmountPages = 14;
|
|
|
|
|
- Core.settingAmountSlots = 7 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 2 * 7;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 7;
|
|
|
break;
|
|
break;
|
|
|
case StorageSizeEnum.Larger:
|
|
case StorageSizeEnum.Larger:
|
|
|
- Core.settingAmountPages = 14;
|
|
|
|
|
- Core.settingAmountSlots = 8 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 2 * 7;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 8;
|
|
|
break;
|
|
break;
|
|
|
case StorageSizeEnum.MegaLarge:
|
|
case StorageSizeEnum.MegaLarge:
|
|
|
- Core.settingAmountPages = 28;
|
|
|
|
|
- Core.settingAmountSlots = 8 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 4 * 7;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 8;
|
|
|
break;
|
|
break;
|
|
|
case StorageSizeEnum.UltraLarge:
|
|
case StorageSizeEnum.UltraLarge:
|
|
|
- Core.settingAmountPages = 70;
|
|
|
|
|
- Core.settingAmountSlots = 8 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 10 * 7;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 8;
|
|
|
break;
|
|
break;
|
|
|
case StorageSizeEnum.PagesOnly:
|
|
case StorageSizeEnum.PagesOnly:
|
|
|
- Core.settingAmountPages = 27;
|
|
|
|
|
- Core.settingAmountSlots = 5 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 3 * 9;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 5;
|
|
|
break;
|
|
break;
|
|
|
default:
|
|
default:
|
|
|
- Core.settingAmountPages = 14;
|
|
|
|
|
- Core.settingAmountSlots = 7 * 6;
|
|
|
|
|
|
|
+ Core.settingAmountActualPages = 3 * 9;
|
|
|
|
|
+ Core.settingAmountActualSlots = 6 * 5;
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
+ Core.settingAmountPages = Math.Max(Core.settingAmountActualPages, 6 * 2);
|
|
|
|
|
+ Core.settingAmountSlots = Math.Max(Core.settingAmountActualSlots, 6 * 5);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static string GetPrefabname()
|
|
|
|
|
|
|
+ private static bool IsLargeMode()
|
|
|
{
|
|
{
|
|
|
switch (Core.settingSizeEnum)
|
|
switch (Core.settingSizeEnum)
|
|
|
{
|
|
{
|
|
|
//case StorageSizeEnum.UltraSmall:
|
|
//case StorageSizeEnum.UltraSmall:
|
|
|
- // return "menustorage2x1x2";
|
|
|
|
|
- //case StorageSizeEnum.Smaller:
|
|
|
|
|
- // return "menustorage3x3x3";
|
|
|
|
|
|
|
+ case StorageSizeEnum.Small:
|
|
|
case StorageSizeEnum.Large:
|
|
case StorageSizeEnum.Large:
|
|
|
- return "menustorage6x7x14";
|
|
|
|
|
|
|
+ case StorageSizeEnum.PagesOnly:
|
|
|
|
|
+ return false;
|
|
|
case StorageSizeEnum.Larger:
|
|
case StorageSizeEnum.Larger:
|
|
|
- return "menustorage6x8x14";
|
|
|
|
|
case StorageSizeEnum.MegaLarge:
|
|
case StorageSizeEnum.MegaLarge:
|
|
|
- return "menustorage6x8x28";
|
|
|
|
|
case StorageSizeEnum.UltraLarge:
|
|
case StorageSizeEnum.UltraLarge:
|
|
|
- return "menustorage6x8x70";
|
|
|
|
|
- case StorageSizeEnum.PagesOnly:
|
|
|
|
|
- return "menustorage6x5x27";
|
|
|
|
|
|
|
+ return true;
|
|
|
default:
|
|
default:
|
|
|
- return "menustorage6x7x14";
|
|
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static void postBuildQuickStackButton()
|
|
|
|
|
|
|
+ private static bool HasSmallPageButtons()
|
|
|
{
|
|
{
|
|
|
- Type t = null;
|
|
|
|
|
- foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
|
|
|
|
|
- {
|
|
|
|
|
- if (a.FullName.StartsWith("QuickStack,"))
|
|
|
|
|
- {
|
|
|
|
|
- t = a.GetType("QuickStack.StackButtonScript");
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- bool isEnabled = false;
|
|
|
|
|
- foreach (var gadget in GadgetCore.API.Gadgets.ListAllEnabledGadgets())
|
|
|
|
|
- if (gadget.Info?.ModName == "Quick Stack")
|
|
|
|
|
- {
|
|
|
|
|
- isEnabled = true;
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- if (t != null && isEnabled)
|
|
|
|
|
|
|
+ switch (Core.settingSizeEnum)
|
|
|
{
|
|
{
|
|
|
- var storageMenu = GameObject.Find("Main Camera").transform.Find("menuStorage").gameObject;
|
|
|
|
|
- var pagge0 = storageMenu.transform.Find("page0");
|
|
|
|
|
- var btn = UnityEngine.Object.Instantiate(pagge0, pagge0.transform.parent).gameObject;
|
|
|
|
|
- btn.name = "button_quick_stack";
|
|
|
|
|
-
|
|
|
|
|
- Component.Destroy(btn.GetComponentInChildren<ButtonMenu>());
|
|
|
|
|
- btn.AddComponent(t);
|
|
|
|
|
-
|
|
|
|
|
- btn.GetComponentInChildren<BoxCollider>().size = new Vector3(2, 2, 2);
|
|
|
|
|
-
|
|
|
|
|
- btn.transform.SetParent(storageMenu.transform);
|
|
|
|
|
- btn.transform.localPosition = new Vector3(-0.5075f, 0.3595f, 0);
|
|
|
|
|
- btn.transform.localScale = new Vector3(1f / 16f, 1f / 16f, 1);
|
|
|
|
|
|
|
+ case StorageSizeEnum.UltraLarge:
|
|
|
|
|
+ return true;
|
|
|
|
|
+ default:
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|