ShipsGadget.Create.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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. new EntityInfo(EntityType.COMMON, gameObject).Register(name);
  140. }
  141. private void CreateTurretEnemy(string name, Texture2D texture, Texture2D texture2)
  142. {
  143. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  144. gameObject.name = name;
  145. gameObject.transform.GetChild(0).GetChild(0).gameObject.name = name;
  146. Renderer rendererHead = gameObject.transform.GetChild(0).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  147. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  148. {
  149. mainTexture = texture2
  150. };
  151. Renderer rendererLegs = gameObject.transform.GetChild(0).GetChild(0).GetChild(1).GetComponentInChildren<Renderer>();
  152. rendererLegs.material = new Material(Shader.Find("Unlit/Transparent"))
  153. {
  154. mainTexture = texture
  155. };
  156. gameObject.transform.GetChild(0).GetChild(0).GetChild(1).localPosition = new Vector3(0, 0, 0.1f);
  157. Component.DestroyImmediate(gameObject.GetComponent<WispScript>());
  158. Component.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).GetComponent<Animation>());
  159. gameObject.GetComponent<Rigidbody>().isKinematic = false;
  160. gameObject.GetComponent<Rigidbody>().detectCollisions = false;
  161. gameObject.AddComponent<BrokenTurretScript>();
  162. gameObject.transform.GetChild(1).gameObject.SetActive(true);
  163. gameObject.transform.GetChild(1).localScale = new Vector3(65, 40, 1);
  164. Collider collider = gameObject.transform.GetChild(3).GetComponent<Collider>();
  165. collider.isTrigger = true;
  166. GadgetCoreAPI.AddCustomResource("e/Subworlds/" + name, gameObject);
  167. new EntityInfo(EntityType.COMMON, gameObject).Register(name);
  168. }
  169. private void CreateLaserHazard(string name, Texture2D texture)
  170. {
  171. GameObject gameObjectWisp = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  172. var gameObject = gameObjectWisp.transform.GetChild(0).GetChild(0).GetChild(0).gameObject;
  173. gameObjectWisp.transform.GetChild(3).SetParent(gameObject.transform);
  174. gameObject.transform.SetParent(null);
  175. GameObject.DestroyImmediate(gameObjectWisp);
  176. gameObject.name = name;
  177. Renderer rendererHead = gameObject.GetComponentInChildren<Renderer>();
  178. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  179. {
  180. mainTexture = texture
  181. };
  182. gameObject.AddComponent<BrokenLaserScript>();
  183. var haz = gameObject.transform.GetChild(0).GetComponent<HazardScript>();
  184. haz.damage = 3;
  185. gameObject.transform.localScale = new Vector3(2f, 8f, 1);
  186. gameObject.transform.localRotation = Quaternion.Euler(0, 180, 0);
  187. gameObject.transform.GetChild(0).localScale = new Vector3(1, 1, 1);
  188. var trigger = gameObject.transform.GetChild(0).GetComponent<BoxCollider>();
  189. trigger.size = new Vector3(0.6f, 2, 1);
  190. trigger.isTrigger = true;
  191. var collider = gameObject.transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
  192. collider.size = new Vector3(0.3f, 2, 1);
  193. collider.isTrigger = false;
  194. GadgetCoreAPI.AddCustomResource("haz/Subworlds/" + name, gameObject);
  195. }
  196. private void CreateOldChest(string name, Texture texture)
  197. {
  198. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("obj/chest"));
  199. Renderer renderer = gameObject.transform.GetChild(0).gameObject.GetComponentInChildren<Renderer>();
  200. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  201. {
  202. mainTexture = texture
  203. };
  204. Component.DestroyImmediate(gameObject.GetComponent<ChestScript>());
  205. gameObject.AddComponent<OldChestScript>();
  206. GadgetCoreAPI.AddCustomResource("obj/Subworlds/" + name, gameObject);
  207. }
  208. private void CreateBaseBlock(string name, Texture2D texture, float w, float h)
  209. {
  210. var gameObject = Object.Instantiate((GameObject)Resources.Load("z/chunk"));
  211. gameObject.transform.localScale = new Vector3(w, h, 1);
  212. var rendererBody = gameObject.GetComponentInChildren<Renderer>();
  213. rendererBody.material = new Material(Shader.Find("Transparent/Diffuse"))
  214. {
  215. mainTexture = texture
  216. };
  217. for (int i = 0; i < 6; i++)
  218. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).gameObject);
  219. for (int i = 0; i < 16; i++)
  220. GameObject.DestroyImmediate(gameObject.transform.GetChild(1).gameObject);
  221. for (int i = 0; i < 7; i++)
  222. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  223. Component.DestroyImmediate(gameObject.GetComponent<Chunk>());
  224. GameObject root = gameObject.transform.GetChild(0).gameObject;
  225. GameObject collision = root.transform.GetChild(0).gameObject;
  226. collision.transform.localScale = new Vector3(1, 1, 1);
  227. collision.transform.localPosition = new Vector3(0, 0, 0);
  228. Core.logger.LogConsole("created: " + "z/Subworlds/" + name);
  229. GadgetCoreAPI.AddCustomResource("z/Subworlds/" + name, gameObject);
  230. new EntityInfo(EntityType.COMMON, gameObject).Register(name);
  231. }
  232. }
  233. }