ShipsGadget.Create.cs 12 KB

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