Browse Source

[2.0.3.9] Shuttle town world

Zariteis 4 years ago
parent
commit
9cb67834dc

BIN
Assets/aOldTecArmor.png


BIN
Assets/planetScrapYardPrev.png


BIN
Assets/shuttleMainBG.png


BIN
Assets/shuttleMainFG.png


+ 2 - 0
Core.cs

@@ -18,5 +18,7 @@ namespace Ships
     public static ItemInfo itemOldTexArmor;
     public static ItemInfo itemOldTexDroid;
     public static ItemInfo itemOldTexMod;
+
+    public static int lastBiome = -1;
   }
 }

+ 2 - 0
Patches/Patch_Chunk_OnDestroy.cs

@@ -29,6 +29,8 @@ namespace Ships.Patches
         }
         ___networkStuff = new GameObject[40];
       }
+      if (GameScript.townBiome != Core.shipPlanet.GetID())
+        Core.lastBiome = GameScript.townBiome;
     }
   }
 }

+ 81 - 15
ShipGenerator.cs

@@ -13,7 +13,8 @@ namespace Ships
     FlyingEnemy = 2,
     BrokenItemMod = 3,
     BrokenChest = 4,
-    OldChest = 5
+    OldChest = 5,
+    BrokenLaser = 6
   }
 
   public class ShipGenerator
@@ -31,15 +32,44 @@ namespace Ships
     public static readonly FieldInfo networkStuffField = typeof(Chunk).GetField("networkStuff", BindingFlags.NonPublic | BindingFlags.Instance);
     public static readonly FieldInfo tempField = typeof(Chunk).GetField("temp", BindingFlags.NonPublic | BindingFlags.Instance);
 
+    public static void GenarateTown(SpawnerScript s, int[] param)
+    {
+      GameScript.isTown = true;
+      if (GameScript.districtLevel % 2 != 0)
+      {
+        GameScript.districtLevel++;
+      }
+
+      s.backLights.SetActive(true);
+      s.mainLight.SetActive(false);
+      s.backLights.GetComponent<Renderer>().material = materialaBackLight;
+      //s.mainLight.GetComponentInChildren<Light>().color = new Color(0.05f, 0.05f, 0.05f, 0.1f);
+
+      s.bg[0].GetComponent<Renderer>().material = materialaParalexStars;
+      s.bg[1].GetComponent<Renderer>().material = materialaParalexNone;
+      s.bg[2].GetComponent<Renderer>().material = materialaParalexNone;
+      s.bg[3].GetComponent<Renderer>().material = materialaParalexNone;
+
+      var chunks = (GameObject[])chunksField.GetValue(s);
+      var num = 0;
+
+      chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/Ships/ShuttleMain"), new Vector3((float)(218 + 0 * 128 + 4 * 8), 0f, 5f), Quaternion.Euler(0f, 180f, 180f));
+      num++;
+
+      if (Network.isServer)
+      {
+        chunks[num] = new GameObject("chunk");
+        var chunk = chunks[num].AddComponent<Chunk>();
+        PopulateTown(chunk);
+        num++;
+      }
+    }
+
     public static void Genarate(SpawnerScript s, int[] param)
     {
       try
       {
         GameScript.isTown = false;
-        if (GameScript.districtLevel % 2 != 0)
-        {
-          GameScript.districtLevel++;
-        }
 
         spawnLocations.Clear();
 
@@ -61,10 +91,12 @@ namespace Ships
         chunks[num] = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("z/Ships/ShipAMain"), new Vector3((float)(218 + 0.75 * 128), 0f, 5f), Quaternion.Euler(0f, 180f, 180f));
         num++;
 
-        spawnLocations.Add(new int[] { 7, 7, 2 });
-        spawnLocations.Add(new int[] { 10, 7, 2 });
-        spawnLocations.Add(new int[] { 16, 7, 2 });
-        spawnLocations.Add(new int[] { 17, 4, 2 });
+        spawnLocations.Add(new int[] { 7, 7, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
+        spawnLocations.Add(new int[] { 10, 7, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
+        spawnLocations.Add(new int[] { 16, 7, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
+        spawnLocations.Add(new int[] { 17, 4, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
+
+        spawnLocations.Add(new int[] { 32, 0, (int)ShipGeneratorObjectPoolType.BrokenLaser });
 
         Add4(4, 0);
         Add4(4, 5);
@@ -90,6 +122,8 @@ namespace Ships
         spawnLocations.Add(new int[] { 16 + 32, 7, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
         spawnLocations.Add(new int[] { 17 + 32, 4, (int)ShipGeneratorObjectPoolType.FlyingEnemy });
 
+        spawnLocations.Add(new int[] { 32 + 32, 0, (int)ShipGeneratorObjectPoolType.BrokenLaser });
+
         Add4(4 + 32, 0);
         Add4(4 + 32, 5);
         Add4Floor(4 + 32, -5);
@@ -113,7 +147,7 @@ namespace Ships
         {
           chunks[num] = new GameObject("chunk");
           var chunk = chunks[num].AddComponent<Chunk>();
-          PopulateTown(chunk);
+          PopulateWorld(chunk);
           num++;
         }
       }
@@ -208,12 +242,41 @@ namespace Ships
 
     private static List<int[]> spawnLocations = new List<int[]>();
     private static System.Random random = new System.Random();
-
     public static void PopulateTown(Chunk chunk)
     {
       var networkStuff = new GameObject[400];
       networkStuffField.SetValue(chunk, networkStuff);
 
+      try
+      {
+
+        int temp = (int)tempField.GetValue(chunk);
+
+        networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npcStorage"), new Vector3(248f + 4 * 0, -6.118f, 0.3f), Quaternion.identity, 0);
+        temp++;
+        networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npc2103"), new Vector3(248f + 4 * 1, -6.118f, 0.3f), Quaternion.identity, 0);
+        temp++;
+        networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("npc/npcQuest"), new Vector3(248f + 4 * 3, -6.118f, 0.3f), Quaternion.identity, 0);
+        temp++;
+      }
+      catch (Exception e) { Core.logger.LogError(e); }
+
+      GameScript.endPortal[0] = (GameObject)Network.Instantiate((GameObject)Resources.Load("portal"), new Vector3(248f + 4 * 5, -6.118f, 0f), Quaternion.identity, 0);
+      GameScript.endPortalUA[0] = GameScript.endPortal[0].transform.GetChild(0).gameObject;
+      GameScript.endPortal[0].GetComponent<NetworkView>().RPC("Activate", RPCMode.All, new object[0]);
+      GameScript.endPortalUA[0].GetComponent<NetworkView>().RPC("Set", RPCMode.AllBuffered, new object[] { Core.lastBiome, 0, 0 });
+
+      GameScript.endPortal[3] = (GameObject)Network.Instantiate((GameObject)Resources.Load("portal"), new Vector3(248f - 4 * 2, -6.118f, 0f), Quaternion.identity, 0);
+      GameScript.endPortalUA[3] = GameScript.endPortal[3].transform.GetChild(0).gameObject;
+      GameScript.endPortal[3].GetComponent<NetworkView>().RPC("Activate", RPCMode.All, new object[0]);
+      GameScript.endPortalUA[3].GetComponent<NetworkView>().RPC("Set", RPCMode.AllBuffered, new object[] { 98, 0, 3 });
+    }
+
+    public static void PopulateWorld(Chunk chunk)
+    {
+      var networkStuff = new GameObject[400];
+      networkStuffField.SetValue(chunk, networkStuff);
+
       try
       {
 
@@ -266,6 +329,9 @@ namespace Ships
             case ShipGeneratorObjectPoolType.OldChest:
               networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("obj/Ships/OldChest"), new Vector3(248f + 4 * e[0], -8f + 0.118f * 4 + 4 * e[1], 0.2f), Quaternion.identity, 0);
               break;
+            case ShipGeneratorObjectPoolType.BrokenLaser:
+              networkStuff[temp] = (GameObject)Network.Instantiate(Resources.Load("haz/Ships/LazerHazard"), new Vector3(248f + 4 * (e[0] + 0.5f), 4 * (e[1]), 0.2f), Quaternion.identity, 0);
+              break;
           }
           if (networkStuff[temp] != null)
             temp++;
@@ -273,10 +339,10 @@ namespace Ships
       }
       catch (Exception e) { Core.logger.LogError(e); }
 
-      GameScript.endPortal[3] = (GameObject)Network.Instantiate((GameObject)Resources.Load("portal"), new Vector3(248f + 4 * 38 + 128, -6.118f, 0f), Quaternion.identity, 0);
-      GameScript.endPortalUA[3] = GameScript.endPortal[3].transform.GetChild(0).gameObject;
-      GameScript.endPortal[3].GetComponent<NetworkView>().RPC("Activate", RPCMode.All, new object[0]);
-      GameScript.endPortalUA[3].GetComponent<NetworkView>().RPC("Set", RPCMode.AllBuffered, new object[] { 0, 0, 0 });
+      GameScript.endPortal[0] = (GameObject)Network.Instantiate((GameObject)Resources.Load("portal"), new Vector3(248f + 4 * 38 + 128, -6.118f, 0f), Quaternion.identity, 0);
+      GameScript.endPortalUA[0] = GameScript.endPortal[0].transform.GetChild(0).gameObject;
+      GameScript.endPortal[0].GetComponent<NetworkView>().RPC("Activate", RPCMode.All, new object[0]);
+      GameScript.endPortalUA[0].GetComponent<NetworkView>().RPC("Set", RPCMode.AllBuffered, new object[] { Core.shipPlanet.GetID(), 0, 0 });
     }
   }
 }

+ 47 - 2
Ships.cs

@@ -71,7 +71,7 @@ namespace Ships
       scrapYardPlanet.SetBackgroundInfo(textureParalex, textureParalex0, textureParalex1, textureParalex2, textureParalex3);
       scrapYardPlanet.SetTerrainInfo(textureEntrance, textureBG, textureMid0, textureMid1, textureBigSide, textureSmallSide);
 
-      scrapYardPlanet.OnGenerateWorld += ShipGenerator.Genarate;
+      scrapYardPlanet.OnGenerateWorld += ShipGenerator.GenarateTown;
       scrapYardPlanet.OnGenerateTown += ShipGenerator.Genarate;
       scrapYardPlanet.Register("Ship");
 
@@ -120,6 +120,18 @@ namespace Ships
         new int[] { 5, 7, 0 }
       }, 16, 16);
 
+      Texture2D textureShuttleMainFG = GadgetCoreAPI.LoadTexture2D("shuttleMainFG.png");
+      Texture2D textureShuttleMainBG = GadgetCoreAPI.LoadTexture2D("shuttleMainBG.png");
+      CreateShipPart("ShuttleMain", textureShuttleMainFG, textureShuttleMainBG, new int[][] {
+        new int[] { 3, 5, 10, 1}
+      , new int[] { 3, 10, 11, 1}
+      , new int[] { 3, 5, 1, 5}
+      , new int[] { 13, 6, 1, 1}
+      , new int[] { 14, 7, 1, 3}
+      }, new int[][] {
+        new int[] { 5, 7, 0 }
+      }, 16, 16);
+
       CreateObject("BrokenTeleporter", GadgetCoreAPI.LoadTexture2D("brokenTeleporter.png"), true);
 
       CreateBrakableObject("BrokenPirate1", GadgetCoreAPI.LoadTexture2D("brokenPirate1.png"), true);
@@ -140,13 +152,15 @@ namespace Ships
 
       CreateDroidEnemy("BrokenDroid", GadgetCoreAPI.LoadTexture2D("droid.png"));
 
+      CreateLaserHazard("LazerHazard", GadgetCoreAPI.LoadTexture2D("brokenLaser.png"));
+
       ItemInfo itemInfo = new ItemInfo(ItemType.GENERIC, "port5", "", null as Texture2D).Register("port5");
       TileInfo tile = new TileInfo(TileType.INTERACTIVE, null as Texture2D, new GameObject("port5"), itemInfo).Register("port5");
 
       CreateOldChest("OldChest", GadgetCoreAPI.LoadTexture2D("oldChest.png"));
 
 
-      Core.itemOldTex = new ItemInfo(ItemType.GENERIC, "Old Tec", "Some peace of old\ntechnology", GadgetCoreAPI.LoadTexture2D("iOldTec.png"));
+      Core.itemOldTex = new ItemInfo(ItemType.GENERIC, "Old Tec", "Some piece of old\ntechnology", GadgetCoreAPI.LoadTexture2D("iOldTec.png"));
       ItemRegistry.Singleton.Register(Core.itemOldTex, "oldtec");
 
 
@@ -358,6 +372,37 @@ namespace Ships
       GadgetCoreAPI.AddCustomResource("e/Ships/" + name, gameObject);
     }
 
+    private void CreateLaserHazard(string name, Texture2D texture)
+    {
+      GameObject gameObjectWisp = Object.Instantiate<GameObject>((GameObject)Resources.Load("e/wisp"));
+      var gameObject = gameObjectWisp.transform.GetChild(0).GetChild(0).GetChild(0).gameObject;
+      gameObjectWisp.transform.GetChild(3).SetParent(gameObject.transform);
+      gameObject.transform.SetParent(null);
+      GameObject.DestroyImmediate(gameObjectWisp);
+      gameObject.name = name;
+      Renderer rendererHead = gameObject.GetComponentInChildren<Renderer>();
+      rendererHead.material = new Material(Shader.Find("Unlit/Transparent"))
+      {
+        mainTexture = texture
+      };
+      gameObject.AddComponent<BrokenLaserScript>();
+
+      var haz = gameObject.transform.GetChild(0).GetComponent<HazardScript>();
+      haz.damage = 3;
+
+      gameObject.transform.localScale = new Vector3(2f, 8f, 1);
+      gameObject.transform.localRotation = Quaternion.Euler(0, 180, 0);
+      gameObject.transform.GetChild(0).localScale = new Vector3(1, 1, 1);
+      var trigger = gameObject.transform.GetChild(0).GetComponent<BoxCollider>();
+      trigger.size = new Vector3(0.6f, 2, 1);
+      trigger.isTrigger = true;
+      var collider = gameObject.transform.GetChild(0).gameObject.AddComponent<BoxCollider>();
+      collider.size = new Vector3(0.3f, 2, 1);
+      collider.isTrigger = false;
+
+      GadgetCoreAPI.AddCustomResource("haz/Ships/" + name, gameObject);
+    }
+
     private void CreateOldChest(string name, Texture texture)
     {
       GameObject gameObject = Object.Instantiate<GameObject>((GameObject)Resources.Load("obj/chest"));

+ 11 - 3
Ships.csproj

@@ -40,7 +40,9 @@
   </ItemGroup>
   <ItemGroup>
     <None Remove="Assets\a16.png" />
+    <None Remove="Assets\brokenLazer.png" />
     <None Remove="Assets\d17b.png" />
+    <None Remove="Assets\planetScrapYardPrev.png" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="0Harmony">
@@ -168,6 +170,9 @@
     <None Update="Assets\brokenItemMod.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Update="Assets\brokenLaser.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Update="Assets\brokenPirate.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
@@ -366,9 +371,6 @@
     <None Update="Assets\planetScrapYard.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
-    <None Update="Assets\planetScrapYardPrev.png">
-      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
-    </None>
     <None Update="Assets\planetScrapYard_old.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
@@ -423,6 +425,12 @@
     <None Update="Assets\shipAMainFG.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
+    <None Update="Assets\shuttleMainBG.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Update="Assets\shuttleMainFG.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Update="Assets\shopStand.png">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>