Ships.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. using GadgetCore.API;
  2. using GadgetCore.Util;
  3. using RecipeMenuCore.API;
  4. using Ships.Scripts;
  5. using System.Collections;
  6. using System.Reflection;
  7. using UnityEngine;
  8. using UnityEngine.SceneManagement;
  9. namespace Ships
  10. {
  11. [Gadget("Ships", LoadAfter: new string[] { "RecipeMenuCore" }, Dependencies: new string[] { "RecipeMenuCore" })]
  12. public class Ships : Gadget<Ships>
  13. {
  14. public const string MOD_VERSION = "1.0"; // Set this to the version of your mod.
  15. public const string CONFIG_VERSION = "1.0"; // Increment this whenever you change your mod's config file.
  16. protected override void LoadConfig()
  17. {
  18. Config.Load();
  19. string fileVersion = Config.ReadString("ConfigVersion", CONFIG_VERSION, comments: "The Config Version (not to be confused with mod version)");
  20. if (fileVersion != CONFIG_VERSION)
  21. {
  22. Config.Reset();
  23. Config.WriteString("ConfigVersion", CONFIG_VERSION, comments: "The Config Version (not to be confused with mod version)");
  24. }
  25. Config.Save();
  26. }
  27. public override string GetModDescription()
  28. {
  29. return "A mod that adds ships that can be reaided.";
  30. }
  31. protected override void Initialize()
  32. {
  33. Logger.Log("Ships v" + Info.Mod.Version);
  34. Core.logger = Logger;
  35. Texture2D texturePlanetIcon = GadgetCoreAPI.LoadTexture2D("planetShip.png");
  36. Texture2D texturePlanetPrevIcon = GadgetCoreAPI.LoadTexture2D("planetShipsPrev.png");
  37. Texture2D texturePortalSign = GadgetCoreAPI.LoadTexture2D("signShip.png");
  38. Texture2D textureBG = GadgetCoreAPI.LoadTexture2D("bgShips.png");
  39. Texture2D textureBGExtension = GadgetCoreAPI.LoadTexture2D("bgShipsExtension.png");
  40. Texture2D textureBGTop = GadgetCoreAPI.LoadTexture2D("bgShipsTop.png");
  41. Texture2D textureParalex = GadgetCoreAPI.LoadTexture2D("parallax.png");
  42. Texture2D textureParalex0 = GadgetCoreAPI.LoadTexture2D("bShipsbg0.png");
  43. Texture2D textureParalex1 = GadgetCoreAPI.LoadTexture2D("bShipsbg1.png");
  44. Texture2D textureParalex2 = GadgetCoreAPI.LoadTexture2D("bShipsbg2.png");
  45. Texture2D textureParalex3 = GadgetCoreAPI.LoadTexture2D("bShipsbg3.png");
  46. Texture2D textureEntrance = GadgetCoreAPI.LoadTexture2D("entranceShips.png");
  47. Texture2D textureSmallSide = GadgetCoreAPI.LoadTexture2D("sideSmallShips.png");
  48. Texture2D textureBigSide = GadgetCoreAPI.LoadTexture2D("sideBigShips.png");
  49. Texture2D textureMid0 = GadgetCoreAPI.LoadTexture2D("midShipsChunk0.png");
  50. Texture2D textureMid1 = GadgetCoreAPI.LoadTexture2D("midShipsChunk1.png");
  51. Texture2D textureScrapTrophy = GadgetCoreAPI.LoadTexture2D("iScrapTrophy.png");
  52. AudioClip audioShip = GadgetCoreAPI.LoadAudioClip("01_space.ogg");
  53. Core.shipPlanet = new PlanetInfo(PlanetType.SPECIAL, "Ship", new GadgetCore.Util.Tuple<int, int>[] { new GadgetCore.Util.Tuple<int, int>(1, 100) }, audioShip);
  54. var scrapYardPlanet = Core.shipPlanet;
  55. scrapYardPlanet.SetPortalInfo(texturePortalSign, texturePlanetPrevIcon, texturePlanetIcon);
  56. scrapYardPlanet.SetBackgroundInfo(textureParalex, textureParalex0, textureParalex1, textureParalex2, textureParalex3);
  57. scrapYardPlanet.SetTerrainInfo(textureEntrance, textureBG, textureMid0, textureMid1, textureBigSide, textureSmallSide);
  58. scrapYardPlanet.OnGenerateWorld += ShipGenerator.GenarateTown;
  59. scrapYardPlanet.OnGenerateTown += ShipGenerator.Genarate;
  60. scrapYardPlanet.Register("Ship");
  61. scrapYardPlanet.PortalUses = -1;
  62. Texture2D textureShipAEntranceFG = GadgetCoreAPI.LoadTexture2D("shipAEntranceFG.png");
  63. Texture2D textureShipAEntranceBG = GadgetCoreAPI.LoadTexture2D("shipAEntranceBG.png");
  64. CreateShipPart("ShipAEntrance", textureShipAEntranceFG, textureShipAEntranceBG, new int[][] {
  65. new int[] { 11, 5, 5, 1}
  66. , new int[] { 11, 5, 1, 6}
  67. , new int[] { 11, 10, 5, 1}
  68. }, new int[][] { }, 16, 16);
  69. Texture2D textureShipAMainFG = GadgetCoreAPI.LoadTexture2D("shipAMainFG.png");
  70. Texture2D textureShipAMainBG = GadgetCoreAPI.LoadTexture2D("shipAMainBG.png");
  71. CreateShipPart("ShipAMain", textureShipAMainFG, textureShipAMainBG, new int[][] {
  72. new int[] { 0, 0, 32, 1}
  73. , new int[] { 0, 15, 32, 1}
  74. , new int[] { 0, 0, 1, 6}
  75. , new int[] { 31, 0, 1, 6}
  76. , new int[] { 0, 10, 1, 6}
  77. , new int[] { 31, 10, 1, 6}
  78. , new int[] { 3, 5, 4, 1}
  79. , new int[] { 9, 5, 4, 1}
  80. , new int[] { 19, 5, 4, 1}
  81. , new int[] { 25, 5, 4, 1}
  82. , new int[] { 3, 10, 4, 1}
  83. , new int[] { 9, 10, 4, 1}
  84. , new int[] { 19, 10, 4, 1}
  85. , new int[] { 25, 10, 4, 1}
  86. }, new int[][] {
  87. new int[] { 3, 7, 0 }
  88. , new int[] { 6, 7, 1 }
  89. , new int[] { 25, 7, 1 }
  90. , new int[] { 28, 7, 0 }
  91. });
  92. Texture2D textureShipAExitFG = GadgetCoreAPI.LoadTexture2D("shipAExitFG.png");
  93. Texture2D textureShipAExitBG = GadgetCoreAPI.LoadTexture2D("shipAExitBG.png");
  94. CreateShipPart("ShipAExit", textureShipAExitFG, textureShipAExitBG, new int[][] {
  95. new int[] { 0, 5, 10, 1}
  96. , new int[] { 0, 10, 13, 1}
  97. , new int[] { 10, 6, 2, 1}
  98. , new int[] { 12, 7, 1, 4}
  99. }, new int[][] {
  100. new int[] { 5, 7, 0 }
  101. }, 16, 16);
  102. Texture2D textureShuttleMainFG = GadgetCoreAPI.LoadTexture2D("shuttleMainFG.png");
  103. Texture2D textureShuttleMainBG = GadgetCoreAPI.LoadTexture2D("shuttleMainBG.png");
  104. CreateShipPart("ShuttleMain", textureShuttleMainFG, textureShuttleMainBG, new int[][] {
  105. new int[] { 3, 5, 10, 1}
  106. , new int[] { 3, 10, 11, 1}
  107. , new int[] { 3, 5, 1, 5}
  108. , new int[] { 13, 6, 1, 1}
  109. , new int[] { 14, 7, 1, 3}
  110. }, new int[][] {
  111. new int[] { 5, 7, 0 }
  112. }, 16, 16);
  113. CreateObject("BrokenTeleporter", GadgetCoreAPI.LoadTexture2D("brokenTeleporter.png"), true);
  114. CreateBrakableObject("BrokenPirate1", GadgetCoreAPI.LoadTexture2D("brokenPirate1.png"), true);
  115. CreateBrakableObject("BrokenPirate2", GadgetCoreAPI.LoadTexture2D("brokenPirate2.png"), true);
  116. CreateBrakableObject("BrokenPirate3", GadgetCoreAPI.LoadTexture2D("brokenPirate3.png"), true);
  117. CreateBrakableObject("BrokenPirate4", GadgetCoreAPI.LoadTexture2D("brokenPirate4.png"), true);
  118. CreateBrakableObject("BrokenPirate5", GadgetCoreAPI.LoadTexture2D("brokenPirate5.png"), true);
  119. CreateBrakableObject("BrokenPirate6", GadgetCoreAPI.LoadTexture2D("brokenPirate6.png"), true);
  120. CreateBrakableObject("BrokenCrates1", GadgetCoreAPI.LoadTexture2D("brokenCrates1.png"));
  121. CreateBrakableObject("BrokenCrates2", GadgetCoreAPI.LoadTexture2D("brokenCrates2.png"));
  122. CreateBrakableObject("BrokenCrates3", GadgetCoreAPI.LoadTexture2D("brokenCrates3.png"));
  123. CreateBrakableObject("BrokenCrates4", GadgetCoreAPI.LoadTexture2D("brokenCrates4.png"));
  124. CreateBrakableObject("BrokenItemMod", GadgetCoreAPI.LoadTexture2D("brokenItemMod.png"));
  125. CreateBrakableObject("BrokenChest", GadgetCoreAPI.LoadTexture2D("brokenChest.png"));
  126. CreateSliverEnemy("BrokenSliver", GadgetCoreAPI.LoadTexture2D("brokenSliverHead.png"), GadgetCoreAPI.LoadTexture2D("brokenSliverBody.png"), GadgetCoreAPI.LoadTexture2D("brokenSliverTail.png"));
  127. CreateDroidEnemy("BrokenDroid", GadgetCoreAPI.LoadTexture2D("droid.png"));
  128. CreateLaserHazard("LazerHazard", GadgetCoreAPI.LoadTexture2D("brokenLaser.png"));
  129. ItemInfo itemInfo = new ItemInfo(ItemType.GENERIC, "port5", "", null as Texture2D).Register("port5");
  130. TileInfo tile = new TileInfo(TileType.INTERACTIVE, null as Texture2D, new GameObject("port5"), itemInfo).Register("port5");
  131. CreateOldChest("OldChest", GadgetCoreAPI.LoadTexture2D("oldChest.png"));
  132. Core.itemOldTex = new ItemInfo(ItemType.GENERIC, "Old Tec", "Some piece of old\ntechnology", GadgetCoreAPI.LoadTexture2D("iOldTec.png"));
  133. ItemRegistry.Singleton.Register(Core.itemOldTex, "oldtec");
  134. Core.itemOldTexShield = new ItemInfo(ItemType.OFFHAND, "Old Tec Shield", "", GadgetCoreAPI.LoadTexture2D("iOldTecShield.png"), Stats: new EquipStats(1, 1, 1, 1, 3, 0),
  135. HeldTex: GadgetCoreAPI.LoadTexture2D("iOldTecShield.png"));
  136. ItemRegistry.Singleton.Register(Core.itemOldTexShield, "oldtecshield");
  137. Core.itemOldTexHelmet = new ItemInfo(ItemType.HELMET, "Old Tec Helmet", "", GadgetCoreAPI.LoadTexture2D("iOldTecHelmet.png"), Stats: new EquipStats(1, 1, 1, 1, 3, 0),
  138. HeadTex: GadgetCoreAPI.LoadTexture2D("hOldTecHelmet.png"));
  139. ItemRegistry.Singleton.Register(Core.itemOldTexHelmet, "oldtechelmet");
  140. Core.itemOldTexArmor = new ItemInfo(ItemType.ARMOR, "Old Tec Armor", "", GadgetCoreAPI.LoadTexture2D("iOldTecArmor.png"), Stats: new EquipStats(1, 1, 1, 1, 3, 0),
  141. BodyTex: GadgetCoreAPI.LoadTexture2D("bOldTecArmor.png"), ArmTex: GadgetCoreAPI.LoadTexture2D("aOldTecArmor.png"));
  142. ItemRegistry.Singleton.Register(Core.itemOldTexArmor, "oldtecarmor");
  143. Core.itemOldTexDroid = new ItemInfo(ItemType.DROID, "Old Tec Droid", "", GadgetCoreAPI.LoadTexture2D("iOldTecDroid.png"), Stats: new EquipStats(1, 1, 1, 1, 3, 0),
  144. BodyTex: GadgetCoreAPI.LoadTexture2D("dOldTecDroidBase.png"), HeadTex: GadgetCoreAPI.LoadTexture2D("dOldTecDroidTop.png"));
  145. ItemRegistry.Singleton.Register(Core.itemOldTexDroid, "oldtecdroid");
  146. Core.itemOldTexMod = new ItemInfo(ItemType.MOD, "GearModStackSize+", "GEAR MOD\nAttach to weapons\nand armor in Mech City.", GadgetCoreAPI.LoadTexture2D("iOldTecMod.png"));
  147. ItemRegistry.Singleton.Register(Core.itemOldTexMod, "oldtecmod");
  148. var recipePage = new RecipePage(RecipePageType.UniversalCrafter, "Old Tec", GadgetCoreAPI.LoadTexture2D("recipesOldTec")).Register();
  149. recipePage.AddRecipePageEntry(new RecipePageEntry(Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 133, Core.itemOldTexShield.GetID(), allwaysShowInput: true));
  150. recipePage.AddRecipePageEntry(new RecipePageEntry(Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 123, Core.itemOldTexHelmet.GetID(), allwaysShowInput: true));
  151. recipePage.AddRecipePageEntry(new RecipePageEntry(Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 103, Core.itemOldTexArmor.GetID(), allwaysShowInput: true));
  152. recipePage.AddRecipePageEntry(new RecipePageEntry(Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 113, Core.itemOldTexDroid.GetID(), allwaysShowInput: true));
  153. recipePage.AddRecipePageEntry(new RecipePageEntry(Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 210, Core.itemOldTexMod.GetID(), allwaysShowInput: true));
  154. var universalCrafter = ((CraftMenuInfo)MenuRegistry.Singleton["Gadget Core:Crafter Menu"]);
  155. universalCrafter.AddCraftPerformer(CraftMenuInfo.CreateSimpleCraftPerformer(
  156. Tuple.Create(new int[] { Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 133 }, new Item(Core.itemOldTexShield.GetID(), 1, 0, 0, 0, new int[3], new int[3]), 0)));
  157. universalCrafter.AddCraftPerformer(CraftMenuInfo.CreateSimpleCraftPerformer(
  158. Tuple.Create(new int[] { Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 123 }, new Item(Core.itemOldTexHelmet.GetID(), 1, 0, 0, 0, new int[3], new int[3]), 0)));
  159. universalCrafter.AddCraftPerformer(CraftMenuInfo.CreateSimpleCraftPerformer(
  160. Tuple.Create(new int[] { Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 103 }, new Item(Core.itemOldTexArmor.GetID(), 1, 0, 0, 0, new int[3], new int[3]), 0)));
  161. universalCrafter.AddCraftPerformer(CraftMenuInfo.CreateSimpleCraftPerformer(
  162. Tuple.Create(new int[] { Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 113 }, new Item(Core.itemOldTexDroid.GetID(), 1, 0, 0, 0, new int[3], new int[3]), 0)));
  163. universalCrafter.AddCraftPerformer(CraftMenuInfo.CreateSimpleCraftPerformer(
  164. Tuple.Create(new int[] { Core.itemOldTex.GetID(), Core.itemOldTex.GetID(), 210 }, new Item(Core.itemOldTexMod.GetID(), 1, 0, 0, 0, new int[3], new int[3]), 0)));
  165. tile.OnInteract += Tile_OnInteract;
  166. }
  167. private IEnumerator Tile_OnInteract()
  168. {
  169. InstanceTracker.PlayerScript.Portal(5);
  170. yield break;
  171. }
  172. private void CreateShipPart(string name, Texture texture, Texture textureBG, int[][] collisions, int[][] lamp, int tileW = 32, int tileH = 16)
  173. {
  174. var gameObject = Object.Instantiate((GameObject)Resources.Load("z/chunk"));
  175. gameObject.transform.localScale = new Vector3(tileW * 2, tileH * 2, 1);
  176. var rendererBody = gameObject.GetComponentInChildren<Renderer>();
  177. rendererBody.material = new Material(Shader.Find("Transparent/Diffuse"))
  178. {
  179. mainTexture = texture
  180. };
  181. for (int i = 0; i < 6; i++)
  182. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).gameObject);
  183. for (int i = 0; i < 16; i++)
  184. GameObject.DestroyImmediate(gameObject.transform.GetChild(1).gameObject);
  185. for (int i = 0; i < 7; i++)
  186. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  187. Component.DestroyImmediate(gameObject.GetComponent<Chunk>());
  188. var bgRenderObject = GameObject.Instantiate(gameObject);
  189. for (int i = 0; i < bgRenderObject.transform.childCount; i++)
  190. GameObject.DestroyImmediate(bgRenderObject.transform.GetChild(0).gameObject);
  191. bgRenderObject.transform.SetParent(gameObject.transform);
  192. bgRenderObject.transform.localScale = new Vector3(1, 1, 1);
  193. bgRenderObject.transform.localPosition = new Vector3(0, 0, -0.3f);
  194. var rendererBG = bgRenderObject.GetComponent<Renderer>();
  195. rendererBG.material = new Material(Shader.Find("Transparent/Diffuse"))
  196. {
  197. mainTexture = textureBG
  198. };
  199. GameObject root = gameObject.transform.GetChild(0).gameObject;
  200. GameObject inst = root.transform.GetChild(0).gameObject;
  201. for (int i = 0; i < collisions.Length; i++)
  202. {
  203. GameObject entry = GameObject.Instantiate(inst);
  204. entry.transform.SetParent(root.transform);
  205. int[] coll = collisions[i];
  206. float w = coll[2] * (2.0f / tileW);
  207. float h = coll[3] * (2.0f / tileH);
  208. float x = coll[0] * (2.0f / tileW) + w / 2;
  209. float y = coll[1] * (2.0f / tileH) + h / 2;
  210. entry.transform.localScale = new Vector3(w, h, 1);
  211. entry.transform.localPosition = new Vector3(x - 1, y - 1, 0);
  212. }
  213. for (int i = 0; i < lamp.Length; i++)
  214. {
  215. int[] coll = lamp[i];
  216. float w = (2.0f / tileW);
  217. float h = (2.0f / tileH);
  218. int type = coll[2];
  219. float x = coll[0] * (2.0f / tileW) + w / 2;
  220. float y = coll[1] * (2.0f / tileH) + h / 2;
  221. GameObject entry = null;
  222. if (type == 0)
  223. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2401));
  224. if (type == 1)
  225. entry = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/" + 2402));
  226. entry.transform.SetParent(root.transform);
  227. entry.transform.localScale = new Vector3(w / 4, h / 4, 1);
  228. entry.transform.localPosition = new Vector3(x - 1, y - 1, -1);
  229. }
  230. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).gameObject);
  231. GadgetCoreAPI.AddCustomResource("z/Ships/" + name, gameObject);
  232. }
  233. private void CreateObject(string name, Texture2D texture, bool large = false)
  234. {
  235. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("prop/2501"));
  236. Renderer renderer = gameObject.GetComponentInChildren<Renderer>();
  237. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  238. {
  239. mainTexture = texture
  240. };
  241. if (large)
  242. gameObject.transform.localScale = new Vector3(gameObject.transform.localScale.x * 2, gameObject.transform.localScale.y * 2, 1);
  243. GadgetCoreAPI.AddCustomResource("obj/Ships/" + name, gameObject);
  244. }
  245. private void CreateBrakableObject(string name, Texture2D texture, bool large = false, ObjectType type = ObjectType.ORE)
  246. {
  247. var i = new ObjectInfo(type, new Item(57, 1, 0, 0, 0, new int[3], new int[3]), 16, texture).Register(name);
  248. if (large)
  249. {
  250. var t = i.Object.transform.GetChild(0);
  251. t.localScale = new Vector3(4, 4, 1);
  252. }
  253. GadgetCoreAPI.AddCustomResource("obj/Ships/" + name, i.Object);
  254. Core.spawnObjects.Add(i.GetID());
  255. }
  256. private void CreateSliverEnemy(string name, Texture2D textureHead, Texture2D textureBody, Texture2D textureTail)
  257. {
  258. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/sliver"));
  259. Renderer rendererHead = gameObject.transform.GetChild(4).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  260. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  261. {
  262. mainTexture = textureHead
  263. };
  264. Renderer rendererBody = gameObject.transform.GetChild(4).GetChild(0).GetChild(1).GetComponentInChildren<Renderer>();
  265. rendererBody.material = new Material(Shader.Find("Unlit/Transparent"))
  266. {
  267. mainTexture = textureBody
  268. };
  269. Renderer rendererTail = gameObject.transform.GetChild(4).GetChild(0).GetChild(2).GetComponentInChildren<Renderer>();
  270. rendererTail.material = new Material(Shader.Find("Unlit/Transparent"))
  271. {
  272. mainTexture = textureTail
  273. };
  274. GadgetCoreAPI.AddCustomResource("e/Ships/" + name, gameObject);
  275. }
  276. private void CreateDroidEnemy(string name, Texture2D texture)
  277. {
  278. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  279. gameObject.name = name;
  280. gameObject.transform.GetChild(0).GetChild(0).gameObject.name = name;
  281. Renderer rendererHead = gameObject.transform.GetChild(0).GetChild(0).GetChild(0).GetComponentInChildren<Renderer>();
  282. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  283. {
  284. mainTexture = texture
  285. };
  286. GameObject.DestroyImmediate(gameObject.transform.GetChild(0).GetChild(0).GetChild(1).gameObject);
  287. Component.DestroyImmediate(gameObject.GetComponent<WispScript>());
  288. gameObject.AddComponent<AttackDroidScript>();
  289. gameObject.transform.GetChild(1).gameObject.SetActive(true);
  290. gameObject.transform.GetChild(1).localScale = new Vector3(65, 40, 1);
  291. AnimationClip clip = new AnimationClip
  292. {
  293. name = "spinn",
  294. wrapMode = WrapMode.Once,
  295. legacy = true
  296. };
  297. clip.SetCurve("", typeof(Transform), "localEulerAngles.z", AnimationCurve.Linear(0, 0, 0.5f, 360));
  298. var animation = gameObject.transform.GetChild(0).gameObject.AddComponent<Animation>();
  299. animation.AddClip(clip, "spinn");
  300. animation.clip = clip;
  301. GadgetCoreAPI.AddCustomResource("e/Ships/" + name, gameObject);
  302. }
  303. private void CreateLaserHazard(string name, Texture2D texture)
  304. {
  305. GameObject gameObjectWisp = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
  306. var gameObject = gameObjectWisp.transform.GetChild(0).GetChild(0).GetChild(0).gameObject;
  307. gameObjectWisp.transform.GetChild(3).SetParent(gameObject.transform);
  308. gameObject.transform.SetParent(null);
  309. GameObject.DestroyImmediate(gameObjectWisp);
  310. gameObject.name = name;
  311. Renderer rendererHead = gameObject.GetComponentInChildren<Renderer>();
  312. rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
  313. {
  314. mainTexture = texture
  315. };
  316. gameObject.AddComponent<BrokenLaserScript>();
  317. var haz = gameObject.transform.GetChild(0).GetComponent<HazardScript>();
  318. haz.damage = 3;
  319. gameObject.transform.localScale = new Vector3(2f, 8f, 1);
  320. gameObject.transform.localRotation = Quaternion.Euler(0, 180, 0);
  321. gameObject.transform.GetChild(0).localScale = new Vector3(1, 1, 1);
  322. var trigger = gameObject.transform.GetChild(0).GetComponent<BoxCollider>();
  323. trigger.size = new Vector3(0.6f, 2, 1);
  324. trigger.isTrigger = true;
  325. var collider = gameObject.transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
  326. collider.size = new Vector3(0.3f, 2, 1);
  327. collider.isTrigger = false;
  328. GadgetCoreAPI.AddCustomResource("haz/Ships/" + name, gameObject);
  329. }
  330. private void CreateOldChest(string name, Texture texture)
  331. {
  332. GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("obj/chest"));
  333. Renderer renderer = gameObject.transform.GetChild(0).gameObject.GetComponentInChildren<Renderer>();
  334. renderer.material = new Material(Shader.Find("Unlit/Transparent"))
  335. {
  336. mainTexture = texture
  337. };
  338. Component.DestroyImmediate(gameObject.GetComponent<ChestScript>());
  339. gameObject.AddComponent<OldChestScript>();
  340. GadgetCoreAPI.AddCustomResource("obj/Ships/" + name, gameObject);
  341. }
  342. }
  343. }