MeteoroidGadget.Create.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using GadgetCore.API;
  2. using Subworlds.Scripts;
  3. using UnityEngine;
  4. namespace Subworlds
  5. {
  6. public partial class MeteroidGadget : Gadget<MeteroidGadget>
  7. {
  8. private void CreateBaseBlock(string name, Texture2D texture, float w, float h)
  9. {
  10. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/2501"));
  11. Renderer renderer = gameObject.GetComponentInChildren<Renderer>();
  12. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  13. {
  14. mainTexture = texture
  15. };
  16. gameObject.transform.localScale = new Vector3(w * 2, h * 2, 1);
  17. var boxCollider = gameObject.AddComponent<BoxCollider>();
  18. boxCollider.size = new Vector3(4, 4, 20);
  19. gameObject.layer = 23;
  20. GadgetCoreAPI.AddCustomResource("z/Subworlds/" + name, gameObject);
  21. }
  22. private void CreateBrakableObject(string name, Texture2D texture, bool large = false, ObjectType type = ObjectType.ORE, int itemId = 57)
  23. {
  24. var i = new ObjectInfo(type, new Item(itemId, 1, 0, 0, 0, new int[3], new int[3]), 16, texture).Register(name);
  25. if (large)
  26. {
  27. var t = i.Object.transform.GetChild(0);
  28. t.localScale = new Vector3(4, 4, 1);
  29. }
  30. GadgetCoreAPI.AddCustomResource("obj/Subworlds/" + name, i.Object);
  31. }
  32. private void CreateShipPart(string name, Texture texture, Texture textureBG, int[][] collisions, int[][] lamp, int tileW = 32, int tileH = 16)
  33. {
  34. var gameObject = Object.Instantiate((GameObject)Resources.Load("z/chunk"));
  35. gameObject.transform.localScale = new Vector3(tileW * 2, tileH * 2, 1);
  36. var rendererBody = gameObject.GetComponentInChildren<Renderer>();
  37. rendererBody.material = new Material(Shader.Find("Transparent/Diffuse"))
  38. {
  39. mainTexture = texture
  40. };
  41. for (int i = 0; i < 6; i++)
  42. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).gameObject);
  43. for (int i = 0; i < 16; i++)
  44. GameObject.DestroyImmediate(gameObject.transform.GetChild(1).gameObject);
  45. for (int i = 0; i < 7; i++)
  46. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  47. Component.DestroyImmediate(gameObject.GetComponent<Chunk>());
  48. var bgRenderObject = GameObject.Instantiate(gameObject);
  49. for (int i = 0; i < bgRenderObject.transform.childCount; i++)
  50. GameObject.DestroyImmediate(bgRenderObject.transform.GetChild(0).gameObject);
  51. bgRenderObject.transform.SetParent(gameObject.transform);
  52. bgRenderObject.transform.localScale = new Vector3(1, 1, 1);
  53. bgRenderObject.transform.localPosition = new Vector3(0, 0, -0.3f);
  54. var rendererBG = bgRenderObject.GetComponent<Renderer>();
  55. rendererBG.material = new Material(Shader.Find("Transparent/Diffuse"))
  56. {
  57. mainTexture = textureBG
  58. };
  59. GameObject root = gameObject.transform.GetChild(0).gameObject;
  60. GameObject inst = root.transform.GetChild(0).gameObject;
  61. for (int i = 0; i < collisions.Length; i++)
  62. {
  63. GameObject entry = GameObject.Instantiate(inst);
  64. entry.transform.SetParent(root.transform);
  65. int[] coll = collisions[i];
  66. float w = coll[2] * (2.0f / tileW);
  67. float h = coll[3] * (2.0f / tileH);
  68. float x = coll[0] * (2.0f / tileW) + w / 2;
  69. float y = coll[1] * (2.0f / tileH) + h / 2;
  70. entry.transform.localScale = new Vector3(w, h, 1);
  71. entry.transform.localPosition = new Vector3(x - 1, y - 1, 0);
  72. }
  73. for (int i = 0; i < lamp.Length; i++)
  74. {
  75. int[] coll = lamp[i];
  76. float w = (2.0f / tileW);
  77. float h = (2.0f / tileH);
  78. int type = coll[2];
  79. float x = coll[0] * (2.0f / tileW) + w / 2;
  80. float y = coll[1] * (2.0f / tileH) + h / 2;
  81. GameObject entry = null;
  82. if (type == 0)
  83. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2401));
  84. if (type == 1)
  85. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2402));
  86. entry.transform.SetParent(root.transform);
  87. entry.transform.localScale = new Vector3(w / 4, h / 4, 1);
  88. entry.transform.localPosition = new Vector3(x - 1, y - 1, -1);
  89. }
  90. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  91. GadgetCoreAPI.AddCustomResource("z/Subworlds/" + name, gameObject);
  92. }
  93. private void CreateJellyfishEnemy(string name, Texture2D texture, Texture2D texture2)
  94. {
  95. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  96. gameObject.name = name;
  97. gameObject.transform.GetChild(0).GetChild(0).gameObject.name = name;
  98. Renderer rendererHead = gameObject.transform.GetChild(0).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  99. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  100. {
  101. mainTexture = texture2
  102. };
  103. Renderer rendererLegs = gameObject.transform.GetChild(0).GetChild(0).GetChild(1).GetComponentInChildren<Renderer>();
  104. rendererLegs.material = new Material(Shader.Find("Unlit/Transparent"))
  105. {
  106. mainTexture = texture
  107. };
  108. Component.DestroyImmediate(gameObject.GetComponent<WispScript>());
  109. gameObject.AddComponent<SpaceJellyfishScript>();
  110. gameObject.transform.GetChild(1).gameObject.SetActive(true);
  111. gameObject.transform.GetChild(1).localScale = new Vector3(65, 40, 1);
  112. GadgetCoreAPI.AddCustomResource("e/Subworlds/" + name, gameObject);
  113. new EntityInfo(EntityType.COMMON, gameObject).Register(name);
  114. }
  115. }
  116. }