MeteoroidGadget.Create.cs 5.6 KB

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