ShipsGadget.Create.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. using GadgetCore.API;
  2. using Subworlds.Scripts;
  3. using UnityEngine;
  4. namespace Subworlds
  5. {
  6. public partial class SubworldsGadget : Gadget<SubworldsGadget>
  7. {
  8. private void CreateShipPart(string name, Texture texture, Texture textureBG, int[][] collisions, int[][] lamp, int tileW = 32, int tileH = 16)
  9. {
  10. var gameObject = Object.Instantiate((GameObject)Resources.Load("z/chunk"));
  11. gameObject.transform.localScale = new Vector3(tileW * 2, tileH * 2, 1);
  12. var rendererBody = gameObject.GetComponentInChildren<Renderer>();
  13. rendererBody.material = new Material(Shader.Find("Transparent/Diffuse"))
  14. {
  15. mainTexture = texture
  16. };
  17. for (int i = 0; i < 6; i++)
  18. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).gameObject);
  19. for (int i = 0; i < 16; i++)
  20. GameObject.DestroyImmediate(gameObject.transform.GetChild(1).gameObject);
  21. for (int i = 0; i < 7; i++)
  22. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  23. Component.DestroyImmediate(gameObject.GetComponent<Chunk>());
  24. var bgRenderObject = GameObject.Instantiate(gameObject);
  25. for (int i = 0; i < bgRenderObject.transform.childCount; i++)
  26. GameObject.DestroyImmediate(bgRenderObject.transform.GetChild(0).gameObject);
  27. bgRenderObject.transform.SetParent(gameObject.transform);
  28. bgRenderObject.transform.localScale = new Vector3(1, 1, 1);
  29. bgRenderObject.transform.localPosition = new Vector3(0, 0, -0.3f);
  30. var rendererBG = bgRenderObject.GetComponent<Renderer>();
  31. rendererBG.material = new Material(Shader.Find("Transparent/Diffuse"))
  32. {
  33. mainTexture = textureBG
  34. };
  35. GameObject root = gameObject.transform.GetChild(0).gameObject;
  36. GameObject inst = root.transform.GetChild(0).gameObject;
  37. for (int i = 0; i < collisions.Length; i++)
  38. {
  39. GameObject entry = GameObject.Instantiate(inst);
  40. entry.transform.SetParent(root.transform);
  41. int[] coll = collisions[i];
  42. float w = coll[2] * (2.0f / tileW);
  43. float h = coll[3] * (2.0f / tileH);
  44. float x = coll[0] * (2.0f / tileW) + w / 2;
  45. float y = coll[1] * (2.0f / tileH) + h / 2;
  46. entry.transform.localScale = new Vector3(w, h, 1);
  47. entry.transform.localPosition = new Vector3(x - 1, y - 1, 0);
  48. }
  49. for (int i = 0; i < lamp.Length; i++)
  50. {
  51. int[] coll = lamp[i];
  52. float w = (2.0f / tileW);
  53. float h = (2.0f / tileH);
  54. int type = coll[2];
  55. float x = coll[0] * (2.0f / tileW) + w / 2;
  56. float y = coll[1] * (2.0f / tileH) + h / 2;
  57. GameObject entry = null;
  58. if (type == 0)
  59. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2401));
  60. if (type == 1)
  61. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2402));
  62. entry.transform.SetParent(root.transform);
  63. entry.transform.localScale = new Vector3(w / 4, h / 4, 1);
  64. entry.transform.localPosition = new Vector3(x - 1, y - 1, -1);
  65. }
  66. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  67. GadgetCoreAPI.AddCustomResource("z/Subworlds/" + name, gameObject);
  68. }
  69. private void CreateObject(string name, Texture2D texture, bool large = false)
  70. {
  71. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/2501"));
  72. Renderer renderer = gameObject.GetComponentInChildren<Renderer>();
  73. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  74. {
  75. mainTexture = texture
  76. };
  77. if (large)
  78. gameObject.transform.localScale = new Vector3(gameObject.transform.localScale.x * 2, gameObject.transform.localScale.y * 2, 1);
  79. GadgetCoreAPI.AddCustomResource("obj/Subworlds/" + name, gameObject);
  80. }
  81. private void CreateBrakableObject(string name, Texture2D texture, bool large = false, ObjectType type = ObjectType.ORE)
  82. {
  83. var i = new ObjectInfo(type, new Item(57, 1, 0, 0, 0, new int[3], new int[3]), 16, texture).Register(name);
  84. if (large)
  85. {
  86. var t = i.Object.transform.GetChild(0);
  87. t.localScale = new Vector3(4, 4, 1);
  88. }
  89. GadgetCoreAPI.AddCustomResource("obj/Subworlds/" + name, i.Object);
  90. Core.spawnObjects.Add(i.GetID());
  91. }
  92. private void CreateSliverEnemy(string name, Texture2D textureHead, Texture2D textureBody, Texture2D textureTail)
  93. {
  94. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/sliver"));
  95. Renderer rendererHead = gameObject.transform.GetChild(4).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  96. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  97. {
  98. mainTexture = textureHead
  99. };
  100. Renderer rendererBody = gameObject.transform.GetChild(4).GetChild(0).GetChild(1).GetComponentInChildren<Renderer>();
  101. rendererBody.material = new Material(Shader.Find("Unlit/Transparent"))
  102. {
  103. mainTexture = textureBody
  104. };
  105. Renderer rendererTail = gameObject.transform.GetChild(4).GetChild(0).GetChild(2).GetComponentInChildren<Renderer>();
  106. rendererTail.material = new Material(Shader.Find("Unlit/Transparent"))
  107. {
  108. mainTexture = textureTail
  109. };
  110. GadgetCoreAPI.AddCustomResource("e/Subworlds/" + name, gameObject);
  111. }
  112. private void CreateDroidEnemy(string name, Texture2D texture)
  113. {
  114. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  115. gameObject.name = name;
  116. gameObject.transform.GetChild(0).GetChild(0).gameObject.name = name;
  117. Renderer rendererHead = gameObject.transform.GetChild(0).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  118. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  119. {
  120. mainTexture = texture
  121. };
  122. Component.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).GetComponent<Animation>());
  123. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).GetChild(1).gameObject);
  124. Component.DestroyImmediate(gameObject.GetComponent<WispScript>());
  125. gameObject.AddComponent<AttackDroidScript>();
  126. gameObject.transform.GetChild(1).gameObject.SetActive(true);
  127. gameObject.transform.GetChild(1).localScale = new Vector3(65, 40, 1);
  128. AnimationClip clip = new AnimationClip
  129. {
  130. name = "spinn",
  131. wrapMode = WrapMode.Once,
  132. legacy = true
  133. };
  134. clip.SetCurve("", typeof(Transform), "localEulerAngles.z", AnimationCurve.Linear(0, 0, 0.5f, 360));
  135. var animation = gameObject.transform.GetChild(0).gameObject.AddComponent<Animation>();
  136. animation.AddClip(clip, "spinn");
  137. animation.clip = clip;
  138. GadgetCoreAPI.AddCustomResource("e/Subworlds/" + name, gameObject);
  139. }
  140. private void CreateTurretEnemy(string name, Texture2D texture, Texture2D texture2)
  141. {
  142. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  143. gameObject.name = name;
  144. gameObject.transform.GetChild(0).GetChild(0).gameObject.name = name;
  145. Renderer rendererHead = gameObject.transform.GetChild(0).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  146. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  147. {
  148. mainTexture = texture2
  149. };
  150. Renderer rendererLegs = gameObject.transform.GetChild(0).GetChild(0).GetChild(1).GetComponentInChildren<Renderer>();
  151. rendererLegs.material = new Material(Shader.Find("Unlit/Transparent"))
  152. {
  153. mainTexture = texture
  154. };
  155. gameObject.transform.GetChild(0).GetChild(0).GetChild(1).localPosition = new Vector3(0, 0, 0.1f);
  156. Component.DestroyImmediate(gameObject.GetComponent<WispScript>());
  157. Component.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).GetComponent<Animation>());
  158. gameObject.GetComponent<Rigidbody>().isKinematic = false;
  159. gameObject.GetComponent<Rigidbody>().detectCollisions = false;
  160. gameObject.AddComponent<BrokenTurretScript>();
  161. gameObject.transform.GetChild(1).gameObject.SetActive(true);
  162. gameObject.transform.GetChild(1).localScale = new Vector3(65, 40, 1);
  163. Collider collider = gameObject.transform.GetChild(3).GetComponent<Collider>();
  164. collider.isTrigger = true;
  165. GadgetCoreAPI.AddCustomResource("e/Subworlds/" + name, gameObject);
  166. }
  167. private void CreateLaserHazard(string name, Texture2D texture)
  168. {
  169. GameObject gameObjectWisp = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  170. var gameObject = gameObjectWisp.transform.GetChild(0).GetChild(0).GetChild(0).gameObject;
  171. gameObjectWisp.transform.GetChild(3).SetParent(gameObject.transform);
  172. gameObject.transform.SetParent(null);
  173. GameObject.DestroyImmediate(gameObjectWisp);
  174. gameObject.name = name;
  175. Renderer rendererHead = gameObject.GetComponentInChildren<Renderer>();
  176. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  177. {
  178. mainTexture = texture
  179. };
  180. gameObject.AddComponent<BrokenLaserScript>();
  181. var haz = gameObject.transform.GetChild(0).GetComponent<HazardScript>();
  182. haz.damage = 3;
  183. gameObject.transform.localScale = new Vector3(2f, 8f, 1);
  184. gameObject.transform.localRotation = Quaternion.Euler(0, 180, 0);
  185. gameObject.transform.GetChild(0).localScale = new Vector3(1, 1, 1);
  186. var trigger = gameObject.transform.GetChild(0).GetComponent<BoxCollider>();
  187. trigger.size = new Vector3(0.6f, 2, 1);
  188. trigger.isTrigger = true;
  189. var collider = gameObject.transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
  190. collider.size = new Vector3(0.3f, 2, 1);
  191. collider.isTrigger = false;
  192. GadgetCoreAPI.AddCustomResource("haz/Subworlds/" + name, gameObject);
  193. }
  194. private void CreateOldChest(string name, Texture texture)
  195. {
  196. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("obj/chest"));
  197. Renderer renderer = gameObject.transform.GetChild(0).gameObject.GetComponentInChildren<Renderer>();
  198. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  199. {
  200. mainTexture = texture
  201. };
  202. Component.DestroyImmediate(gameObject.GetComponent<ChestScript>());
  203. gameObject.AddComponent<OldChestScript>();
  204. GadgetCoreAPI.AddCustomResource("obj/Subworlds/" + name, gameObject);
  205. }
  206. private void CreateBaseBlock(string name, Texture2D texture, float w, float h)
  207. {
  208. var gameObject = Object.Instantiate((GameObject)Resources.Load("z/chunk"));
  209. gameObject.transform.localScale = new Vector3(w, h, 1);
  210. var rendererBody = gameObject.GetComponentInChildren<Renderer>();
  211. rendererBody.material = new Material(Shader.Find("Transparent/Diffuse"))
  212. {
  213. mainTexture = texture
  214. };
  215. for (int i = 0; i < 6; i++)
  216. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).gameObject);
  217. for (int i = 0; i < 16; i++)
  218. GameObject.DestroyImmediate(gameObject.transform.GetChild(1).gameObject);
  219. for (int i = 0; i < 7; i++)
  220. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  221. Component.DestroyImmediate(gameObject.GetComponent<Chunk>());
  222. GameObject root = gameObject.transform.GetChild(0).gameObject;
  223. GameObject collision = root.transform.GetChild(0).gameObject;
  224. collision.transform.localScale = new Vector3(1, 1, 1);
  225. collision.transform.localPosition = new Vector3(0, 0, 0);
  226. Core.logger.LogConsole("created: " + "z/Subworlds/" + name);
  227. GadgetCoreAPI.AddCustomResource("z/Subworlds/" + name, gameObject);
  228. }
  229. }
  230. }