Patch_KylockeStand_Set.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using GadgetCore.API;
  2. using GadgetCore.Util;
  3. using HarmonyLib;
  4. using System.Collections;
  5. using System.Linq;
  6. using UnityEngine;
  7. namespace MoreLights.Patches
  8. {
  9. [HarmonyPatch(typeof(KylockeStand))]
  10. [HarmonyPatch("Set")]
  11. [HarmonyGadget("MoreLights")]
  12. public static class Patch_KylockeStand_Set
  13. {
  14. [HarmonyPostfix]
  15. public static void Prefix(KylockeStand __instance, int[] p)
  16. {
  17. __instance.StartCoroutine(DoUpdateAnimation(__instance));
  18. if (new int[] { Core.itemYellowLampId, Core.itemOrangeLampId, 2402, Core.itemPurpleLampId, 2401, Core.itemGreenLampId }.Contains(p[0]))
  19. __instance.StartCoroutine(DoUpdateLoadingAnimation(__instance));
  20. }
  21. private static IEnumerator DoUpdateAnimation(KylockeStand instance)
  22. {
  23. if (!GameScript.inInstance)
  24. {
  25. instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/shipdroid" + UnityEngine.Random.Range(0, 3)), Menuu.soundLevel / 10f);
  26. }
  27. var scale = instance.icon.transform.localScale;
  28. instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y);
  29. yield return new WaitForSeconds(0.05f);
  30. instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y);
  31. yield return new WaitForSeconds(0.05f);
  32. instance.icon.transform.localScale = new Vector3(scale.x * 0.70f, scale.y);
  33. yield return new WaitForSeconds(0.05f);
  34. instance.icon.transform.localScale = new Vector3(scale.x * 0.76f, scale.y);
  35. yield return new WaitForSeconds(0.05f);
  36. instance.icon.transform.localScale = new Vector3(scale.x * 0.90f, scale.y);
  37. yield return new WaitForSeconds(0.05f);
  38. instance.icon.transform.localScale = new Vector3(scale.y, scale.y);
  39. }
  40. private static Texture2D textureStand0 = GadgetCoreAPI.LoadTexture2D("stand0.png");
  41. private static Texture2D textureStand1 = GadgetCoreAPI.LoadTexture2D("stand1.png");
  42. private static Texture2D textureStand2 = GadgetCoreAPI.LoadTexture2D("stand2.png");
  43. private static Texture2D textureStand3 = GadgetCoreAPI.LoadTexture2D("stand3.png");
  44. private static Texture2D textureStand4 = GadgetCoreAPI.LoadTexture2D("stand4.png");
  45. private static Texture2D textureStand5 = GadgetCoreAPI.LoadTexture2D("stand5.png");
  46. private static Texture2D textureStand6 = GadgetCoreAPI.LoadTexture2D("stand6.png");
  47. private static IEnumerator DoUpdateLoadingAnimation(KylockeStand instance)
  48. {
  49. UpdateTexture(instance, textureStand0);
  50. yield return new WaitForSeconds(1.43f);
  51. UpdateTexture(instance, textureStand1);
  52. yield return new WaitForSeconds(1.43f);
  53. UpdateTexture(instance, textureStand2);
  54. yield return new WaitForSeconds(1.43f);
  55. UpdateTexture(instance, textureStand3);
  56. yield return new WaitForSeconds(1.43f);
  57. UpdateTexture(instance, textureStand4);
  58. yield return new WaitForSeconds(1.43f);
  59. UpdateTexture(instance, textureStand5);
  60. yield return new WaitForSeconds(1.43f);
  61. UpdateTexture(instance, textureStand6);
  62. }
  63. private static void UpdateTexture(KylockeStand instance, Texture2D texture)
  64. {
  65. Renderer renderer = instance.gameObject.transform.GetChild(0).gameObject.GetComponentInChildren<Renderer>();
  66. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  67. {
  68. mainTexture = texture
  69. };
  70. }
  71. }
  72. }