ScrapYardGenerator.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using GadgetCore.API;
  2. using ScrapYard.API;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Reflection;
  6. using UnityEngine;
  7. using Random = System.Random;
  8. namespace ScrapYard
  9. {
  10. public class ScrapYardGenerator
  11. {
  12. private static readonly FieldInfo chunksField = typeof(SpawnerScript).GetField("chunks", BindingFlags.NonPublic | BindingFlags.Instance);
  13. private static readonly Material materialaParalex0 = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bScrapYardbg0.png") };
  14. private static readonly Material materialaParalex1 = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bScrapYardbg1.png") };
  15. private static readonly Material materialaParalex2 = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bScrapYardbg2.png") };
  16. private static readonly Material materialaParalex3 = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("bScrapYardbg3.png") };
  17. public static readonly FieldInfo networkStuffField = typeof(Chunk).GetField("networkStuff", BindingFlags.NonPublic | BindingFlags.Instance);
  18. public static readonly FieldInfo tempField = typeof(Chunk).GetField("temp", BindingFlags.NonPublic | BindingFlags.Instance);
  19. public static void GenarateTown(SpawnerScript s, int[] param)
  20. {
  21. try
  22. {
  23. s.backLights.SetActive(true);
  24. s.mainLight.SetActive(true);
  25. s.mainLight.GetComponentInChildren<Light>().color = new Color(0.05f, 0.05f, 0.05f, 0.1f);
  26. s.bg[0].GetComponent<Renderer>().material = materialaParalex0;
  27. s.bg[1].GetComponent<Renderer>().material = materialaParalex1;
  28. s.bg[2].GetComponent<Renderer>().material = materialaParalex2;
  29. s.bg[3].GetComponent<Renderer>().material = materialaParalex3;
  30. var chunks = (GameObject[])chunksField.GetValue(s);
  31. var num = 0;
  32. chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/entrance"), new Vector3(224.5f, 0f, 5f), Quaternion.Euler(0f, 0f, 0f));
  33. num++;
  34. chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/ScrapYard/chunkBase"), new Vector3((float)(300 + 0 * 128), 0f, 5f), Quaternion.Euler(0f, 180f, 180f));
  35. num++;
  36. int rowsNeeded = 0;
  37. foreach (var entry in ShopPlatform.ShopPlatforms)
  38. {
  39. rowsNeeded += entry.GetRowsNeeded();
  40. }
  41. int extensionAmount = System.Math.Max((rowsNeeded + 3) / 8, 0);
  42. for (int i = 0; i < extensionAmount; i++)
  43. {
  44. chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/ScrapYard/chunkExtension"), new Vector3((float)(300 + 0 * 128), 64 * (i + 1), 5f), Quaternion.Euler(0f, 180f, 180f));
  45. num++;
  46. }
  47. chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/ScrapYard/chunkTop"), new Vector3((float)(300 + 0 * 128), 64 * (extensionAmount + 1), 5f), Quaternion.Euler(0f, 180f, 180f));
  48. num++;
  49. chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/exit"), new Vector3(375.5f, 0f, 5f), Quaternion.Euler(0f, 0f, 180f));
  50. num++;
  51. if (Network.isServer)
  52. {
  53. chunks[num] = new GameObject("chunk");
  54. var chunk = chunks[num].AddComponent<Chunk>();
  55. PopulateTown(chunk);
  56. num++;
  57. }
  58. }
  59. catch (System.Exception e) { Core.logger.LogConsole(e); }
  60. }
  61. public static void PopulateTown(Chunk chunk)
  62. {
  63. var networkStuff = (GameObject[])networkStuffField.GetValue(chunk);
  64. GameObject[] newNetworkStuff = new GameObject[40];
  65. Array.Copy(networkStuff, newNetworkStuff, networkStuff.Length);
  66. networkStuff = newNetworkStuff;
  67. networkStuffField.SetValue(chunk, networkStuff);
  68. try
  69. {
  70. int temp = (int)tempField.GetValue(chunk);
  71. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("prop/ScrapYard/scrapYardShopBuilding"), new Vector3(250f, -6f + 0.118f, 0.3f), Quaternion.identity, 0);
  72. temp++;
  73. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("prop/ScrapYard/scrapYardMerchant"), new Vector3(255f, -6f - 0.118f * 12, 0.2f), Quaternion.identity, 0);
  74. temp++;
  75. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npcStorage"), new Vector3(234.5f, -6.118f, 0.2f), Quaternion.identity, 0);
  76. temp++;
  77. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npcStorage"), new Vector3(362f, -6.118f, 0.2f), Quaternion.identity, 0);
  78. temp++;
  79. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npc2103"), new Vector3(366f, -6.118f, 0.2f), Quaternion.identity, 0);
  80. temp++;
  81. int rowNumber = -1;
  82. foreach (var platform in ShopPlatform.ShopPlatforms)
  83. {
  84. for (int i = 0; i < platform.Entries.Count; i++)
  85. {
  86. ShopPlatformEntry entry = platform.Entries[i];
  87. if ((i % platform.GetSpacesPerRow()) == 0)
  88. {
  89. rowNumber++;
  90. networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("prop/ScrapYard/metalPlatform"), new Vector3(300, rowNumber * 8f, 0.4f), Quaternion.identity, 0);
  91. temp++;
  92. }
  93. var step = (i % platform.GetSpacesPerRow()) / (float)(platform.GetSpacesPerRow() - 1);
  94. networkStuff[temp] = (GameObject)Network.Instantiate((GameObject)Resources.Load("prop/ScrapYard/stand"), new Vector3(300 - (40 / 2) + (step * 40), rowNumber * 8f + 0.5f - 0.05f, 0.2f), Quaternion.identity, 0);
  95. networkStuff[temp].GetComponent<ScrapYardShopStandScript>().StartCallSet(entry.ItemID, entry.Price, entry.Quantity, entry.CurrencyItemID);
  96. temp++;
  97. }
  98. }
  99. networkStuff[temp] = (GameObject)Network.Instantiate((GameObject)Resources.Load("prop/ScrapYard/stand"), new Vector3(268.5f, -6.1175f - 1.45f, 0.2f), Quaternion.identity, 0);
  100. networkStuff[temp].GetComponent<ScrapYardShopStandScript>().StartCallSet(ItemRegistry.GetItemIDByName("Scrap Trophy"), 9999, 1, 57);
  101. temp++;
  102. networkStuff[temp] = (GameObject)Network.Instantiate((GameObject)Resources.Load("prop/ScrapYard/stand"), new Vector3(272.5f, -6.1175f - 1.45f, 0.2f), Quaternion.identity, 0);
  103. networkStuff[temp].GetComponent<ScrapYardShopStandScript>().StartCallSet(57, 1, 9999, ItemRegistry.GetItemIDByName("Scrap Trophy"));
  104. temp++;
  105. }
  106. catch (Exception e) { Core.logger.LogError(e); }
  107. GameScript.endPortal[3] = (GameObject)Network.Instantiate((GameObject)Resources.Load("portal"), new Vector3(226f, -6.118f, 0f), Quaternion.identity, 0);
  108. GameScript.endPortalUA[3] = GameScript.endPortal[3].transform.GetChild(0).gameObject;
  109. GameScript.endPortal[3].GetComponent<NetworkView>().RPC("Activate", RPCMode.All, new object[0]);
  110. GameScript.endPortalUA[3].GetComponent<NetworkView>().RPC("Set", RPCMode.AllBuffered, new object[] { 98, 0, 3 });
  111. }
  112. }
  113. }