MeteoroidGadget.Create.cs 4.3 KB

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