Patch_KylockeStand_Set.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using GadgetCore.API;
  2. using GadgetCore.Util;
  3. using HarmonyLib;
  4. using System.Collections;
  5. using UnityEngine;
  6. namespace ShipDecorations.Patches
  7. {
  8. [HarmonyPatch(typeof(KylockeStand))]
  9. [HarmonyPatch("Set")]
  10. [HarmonyGadget("ShipDecorations")]
  11. public static class Patch_KylockeStand_Set
  12. {
  13. [HarmonyPostfix]
  14. public static bool Prefix(KylockeStand __instance, int[] p)
  15. {
  16. if(animate == null)
  17. {
  18. animate = true;
  19. foreach (var gadget in GadgetCore.API.Gadgets.ListAllEnabledGadgets())
  20. if (gadget.Info?.ModName == "More Lights")
  21. {
  22. animate = false;
  23. break;
  24. }
  25. }
  26. if (animate ?? false)
  27. __instance.StartCoroutine(DoUpdateLampAnimation(__instance));
  28. if (Core.itemStoreList.Contains(p[0]))
  29. __instance.StartCoroutine(DoUpdateLoadingAnimation(__instance));
  30. if (p[0] == Core.itemStoreList[0])
  31. {
  32. __instance.itemID = p[0];
  33. __instance.cost = p[1];
  34. __instance.icon.GetComponent<Renderer>().material = (Material)Resources.Load("i/i" + __instance.itemID.ToString());
  35. __instance.txtCost[0].text = string.Empty + __instance.cost.ToString();
  36. __instance.txtCost[1].text = __instance.txtCost[0].text;
  37. __instance.txtName[0].text = string.Empty + ItemRegistry.GetItem(__instance.itemID).GetName();
  38. __instance.txtName[1].text = __instance.txtName[0].text;
  39. __instance.StartCoroutine(Patch_KylockeStand_Set.DoUpdatePlatformStand(__instance));
  40. return false;
  41. }
  42. return true;
  43. }
  44. private static IEnumerator DoUpdatePlatformStand(KylockeStand instance)
  45. {
  46. instance.isBuild = true;
  47. instance.isCredits = false;
  48. instance.isTrophies = false;
  49. instance.currency.GetComponent<Renderer>().material = (Material)Resources.Load("i/i57");
  50. yield break;
  51. }
  52. private static bool? animate = null;
  53. private static IEnumerator DoUpdateLampAnimation(KylockeStand instance)
  54. {
  55. if (!GameScript.inInstance)
  56. {
  57. instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/shipdroid" + UnityEngine.Random.Range(0, 3)), Menuu.soundLevel / 10f);
  58. }
  59. var scale = instance.icon.transform.localScale;
  60. instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y);
  61. yield return new WaitForSeconds(0.05f);
  62. instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y);
  63. yield return new WaitForSeconds(0.05f);
  64. instance.icon.transform.localScale = new Vector3(scale.x * 0.70f, scale.y);
  65. yield return new WaitForSeconds(0.05f);
  66. instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y);
  67. yield return new WaitForSeconds(0.05f);
  68. instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y);
  69. yield return new WaitForSeconds(0.05f);
  70. instance.icon.transform.localScale = new Vector3(scale.y, scale.y);
  71. }
  72. private static Texture2D textureStand0 = GadgetCoreAPI.LoadTexture2D("stand0.png");
  73. private static Texture2D textureStand1 = GadgetCoreAPI.LoadTexture2D("stand1.png");
  74. private static Texture2D textureStand2 = GadgetCoreAPI.LoadTexture2D("stand2.png");
  75. private static Texture2D textureStand3 = GadgetCoreAPI.LoadTexture2D("stand3.png");
  76. private static Texture2D textureStand4 = GadgetCoreAPI.LoadTexture2D("stand4.png");
  77. private static Texture2D textureStand5 = GadgetCoreAPI.LoadTexture2D("stand5.png");
  78. private static Texture2D textureStand6 = GadgetCoreAPI.LoadTexture2D("stand6.png");
  79. private static IEnumerator DoUpdateLoadingAnimation(KylockeStand instance)
  80. {
  81. UpdateTexture(instance, textureStand0);
  82. yield return new WaitForSeconds(1.43f);
  83. UpdateTexture(instance, textureStand1);
  84. yield return new WaitForSeconds(1.43f);
  85. UpdateTexture(instance, textureStand2);
  86. yield return new WaitForSeconds(1.43f);
  87. UpdateTexture(instance, textureStand3);
  88. yield return new WaitForSeconds(1.43f);
  89. UpdateTexture(instance, textureStand4);
  90. yield return new WaitForSeconds(1.43f);
  91. UpdateTexture(instance, textureStand5);
  92. yield return new WaitForSeconds(1.43f);
  93. UpdateTexture(instance, textureStand6);
  94. }
  95. private static void UpdateTexture(KylockeStand instance, Texture2D texture)
  96. {
  97. Renderer renderer = instance.gameObject.transform.GetChild(0).gameObject.GetComponentInChildren<Renderer>();
  98. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  99. {
  100. mainTexture = texture
  101. };
  102. }
  103. }
  104. }