using GadgetCore.API; using GadgetCore.Util; using HarmonyLib; using System.Collections; using UnityEngine; namespace ShipDecorations.Patches { [HarmonyPatch(typeof(KylockeStand))] [HarmonyPatch("Set")] [HarmonyGadget("ShipDecorations")] public static class Patch_KylockeStand_Set { [HarmonyPostfix] public static bool Prefix(KylockeStand __instance, int[] p) { if(animate == null) { animate = true; foreach (var gadget in GadgetCore.API.Gadgets.ListAllEnabledGadgets()) if (gadget.Info?.ModName == "More Lights") { animate = false; break; } } if (animate ?? false) __instance.StartCoroutine(DoUpdateLampAnimation(__instance)); if (Core.itemStoreList.Contains(p[0])) __instance.StartCoroutine(DoUpdateLoadingAnimation(__instance)); if (p[0] == Core.itemStoreList[0]) { __instance.itemID = p[0]; __instance.cost = p[1]; __instance.icon.GetComponent().material = (Material)Resources.Load("i/i" + __instance.itemID.ToString()); __instance.txtCost[0].text = string.Empty + __instance.cost.ToString(); __instance.txtCost[1].text = __instance.txtCost[0].text; __instance.txtName[0].text = string.Empty + ItemRegistry.GetItem(__instance.itemID).GetName(); __instance.txtName[1].text = __instance.txtName[0].text; __instance.StartCoroutine(Patch_KylockeStand_Set.DoUpdatePlatformStand(__instance)); return false; } return true; } private static IEnumerator DoUpdatePlatformStand(KylockeStand instance) { instance.isBuild = true; instance.isCredits = false; instance.isTrophies = false; instance.currency.GetComponent().material = (Material)Resources.Load("i/i57"); yield break; } private static bool? animate = null; private static IEnumerator DoUpdateLampAnimation(KylockeStand instance) { if (!GameScript.inInstance) { instance.GetComponent().PlayOneShot((AudioClip)Resources.Load("Au/shipdroid" + UnityEngine.Random.Range(0, 3)), Menuu.soundLevel / 10f); } var scale = instance.icon.transform.localScale; instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y); yield return new WaitForSeconds(0.05f); instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y); yield return new WaitForSeconds(0.05f); instance.icon.transform.localScale = new Vector3(scale.x * 0.70f, scale.y); yield return new WaitForSeconds(0.05f); instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y); yield return new WaitForSeconds(0.05f); instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y); yield return new WaitForSeconds(0.05f); instance.icon.transform.localScale = new Vector3(scale.y, scale.y); } private static Texture2D textureStand0 = GadgetCoreAPI.LoadTexture2D("stand0.png"); private static Texture2D textureStand1 = GadgetCoreAPI.LoadTexture2D("stand1.png"); private static Texture2D textureStand2 = GadgetCoreAPI.LoadTexture2D("stand2.png"); private static Texture2D textureStand3 = GadgetCoreAPI.LoadTexture2D("stand3.png"); private static Texture2D textureStand4 = GadgetCoreAPI.LoadTexture2D("stand4.png"); private static Texture2D textureStand5 = GadgetCoreAPI.LoadTexture2D("stand5.png"); private static Texture2D textureStand6 = GadgetCoreAPI.LoadTexture2D("stand6.png"); private static IEnumerator DoUpdateLoadingAnimation(KylockeStand instance) { UpdateTexture(instance, textureStand0); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand1); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand2); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand3); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand4); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand5); yield return new WaitForSeconds(1.43f); UpdateTexture(instance, textureStand6); } private static void UpdateTexture(KylockeStand instance, Texture2D texture) { Renderer renderer = instance.gameObject.transform.GetChild(0).gameObject.GetComponentInChildren(); renderer.material = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = texture }; } } }