Пример #1
0
 public static bool Prefix(ChunkWorld __instance, ref int[] gg, ref int[] ggs)
 {
     if (!GadgetNetwork.MatrixReady && GadgetNetwork.GetTimeSinceConnect() < GadgetNetwork.MatrixTimeout)
     {
         __instance.StartCoroutine(GadgetUtils.WaitAndInvoke(RPCMethod, GadgetNetwork.MatrixTimeout - GadgetNetwork.GetTimeSinceConnect(), () => GadgetNetwork.MatrixReady, __instance, gg, ggs));
         return(false);
     }
     for (int i = 0; i < gg.Length; i++)
     {
         GadgetNetwork.ConvertIDToLocal(TileRegistry.GetSingleton(), ref gg[i]);
     }
     for (int i = 0; i < ggs.Length; i++)
     {
         GadgetNetwork.ConvertIDToLocal(TileRegistry.GetSingleton(), ref ggs[i]);
     }
     return(true);
 }
Пример #2
0
        public static void Postfix(ChunkWorld __instance)
        {
            float spriteMultiple = 1 / Mathf.Sqrt(GadgetCoreAPI.spriteSheetSize);

            __instance.GetComponent <Renderer>().material.mainTextureScale = new Vector2(spriteMultiple, spriteMultiple);
        }
Пример #3
0
        public static void Postfix(GameScript __instance, ref RaycastHit ___hit, ref int ___craftType, ref int ___slotID, ref bool ___shifting, ref Item[] ___inventory, ref Item[] ___craft, ref Item[] ___modSlot, ref int ___curBlockSlot, ref ChunkWorld ___chunkWorld, ref ChunkWorld ___chunkWorldWall, ref Item __state)
        {
            if (!GameScript.pausing && !GameScript.inventoryOpen && GameScript.buildMode && Input.GetMouseButtonDown(0) && ___inventory[___curBlockSlot].q > 0 && ItemRegistry.Singleton.HasEntry(___inventory[___curBlockSlot].id))
            {
                int num4 = (int)__instance.hoverBuild.transform.position.x;
                int num5 = (int)__instance.hoverBuild.transform.position.y;
                int num6 = (num4 + 62) / 4;
                int num7 = (num5 + 62) / 4;
                if (num6 < 64 && num6 >= 0 && num7 < 64 && num7 >= 0)
                {
                    ItemInfo item = ItemRegistry.Singleton.GetEntry(___inventory[___curBlockSlot].id);
                    if (item.Tile != null && item.Tile.TryPlaceTile())
                    {
                        if (item.Tile.Type == TileType.WALL)
                        {
                            if (___chunkWorldWall.grid[num6, num7] == 0)
                            {
                                int[] value = new int[]
                                {
                                    num4,
                                    num5,
                                    GameScript.curBlockID
                                };
                                __instance.WallManager.SendMessage("PlaceTile", value);
                                __instance.hoverBuild.SendMessage("Refresh");
                                __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                                ___inventory[___curBlockSlot].q--;
                                RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                                if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                                {
                                    __instance.ExitBuildMode();
                                    __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                                    GameScript.curBlockID = 0;
                                }
                            }
                        }
                        else if (item.Tile.Type == TileType.SOLID)
                        {
                            if (___chunkWorld.gridSpecial[num6, num7] == 0 && ___chunkWorld.grid[num6, num7] == 0)
                            {
                                int[] value3 = new int[]
                                {
                                    num4,
                                    num5,
                                    GameScript.curBlockID
                                };
                                __instance.TileManager.SendMessage("PlaceTile", value3);
                                __instance.hoverBuild.SendMessage("Refresh");
                                __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                                ___inventory[___curBlockSlot].q--;
                                RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                                if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                                {
                                    __instance.ExitBuildMode();
                                    __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                                    GameScript.curBlockID = 0;
                                }
                            }
                        }
                        else
                        {
                            if (___chunkWorld.gridSpecial[num6, num7] == 0 && ___chunkWorld.grid[num6, num7] == 0)
                            {
                                if (GameScript.curBlockID == 2107 && __instance.gatherer)
                                {
                                    __instance.Error(11);
                                }
                                else
                                {
                                    int[] value2 = new int[]
                                    {
                                        num4,
                                        num5,
                                        GameScript.curBlockID
                                    };
                                    __instance.TileManager.SendMessage("PlaceTileSpecial", value2);
                                    __instance.hoverBuild.SendMessage("Refresh");
                                    __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                                    ___inventory[___curBlockSlot].q--;
                                    RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                                    if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                                    {
                                        __instance.ExitBuildMode();
                                        __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                                        GameScript.curBlockID = 0;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else if (MenuScript.player && !GameScript.pausing)
            {
                if (Input.GetMouseButtonDown(0) && GameScript.inventoryOpen && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out ___hit, 7f))
                {
                    if (___hit.transform.gameObject.layer == 16)
                    {
                        if (___hit.transform.gameObject.tag == "craft")
                        {
                            if (MenuRegistry.Singleton[___craftType] is CraftMenuInfo craftMenu)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0)
                                {
                                    Item   holdingItem = __state;
                                    Item[] craftItems  = ___craft;
                                    int    slotID      = ___slotID;
                                    if (craftMenu.SlotValidators.Any(x => x(holdingItem, craftItems, slotID)))
                                    {
                                        if (___craft[___slotID].id == __state.id)
                                        {
                                            __instance.InvokeMethod("CombineItemCraft", ___slotID);
                                        }
                                        else if (___craft[___slotID].id == 0)
                                        {
                                            __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                        }
                                    }
                                }
                                else if (___craft[___slotID].id != 0)
                                {
                                    if (!___shifting)
                                    {
                                        __instance.InvokeMethod("SelectItemCraft", ___slotID);
                                    }
                                    else if (___shifting && __instance.menuCraft.activeSelf)
                                    {
                                        __instance.StartCoroutine(__instance.InvokeMethod <IEnumerator>("ShiftClickCraft", ___slotID));
                                    }
                                }
                            }
                            else if (___craftType == 0)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0 && ___craft[___slotID].id != __state.id)
                                {
                                    if ((__state.id <= 100 || __state.id >= 200) && __instance.InvokeMethod <bool>("CanPlaceCraft", __state.id))
                                    {
                                        ItemType?itemType = ItemRegistry.GetItem(__state.id)?.Type;
                                        if (itemType.HasValue && (itemType.Value & (ItemType.EMBLEM | ItemType.EQUIPABLE)) == ItemType.EMBLEM)
                                        {
                                            if (___craft[___slotID].id == 0)
                                            {
                                                __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                            }
                                            else
                                            {
                                                __instance.InvokeMethod("SwapItemCraft", ___slotID);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (___craftType == 1)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0 && ___craft[___slotID].id != __state.id)
                                {
                                    if ((__state.id <= 10 || __state.id >= 40) && __instance.InvokeMethod <bool>("CanPlaceCraft", __state.id))
                                    {
                                        ItemType?itemType = ItemRegistry.GetItem(__state.id)?.Type;
                                        if (itemType.HasValue && (itemType.Value & (ItemType.EMBLEM | ItemType.EQUIPABLE)) == ItemType.LOOT && (itemType.Value & ItemType.ORGANIC) == ItemType.ORGANIC)
                                        {
                                            if (___craft[___slotID].id == 0)
                                            {
                                                __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                            }
                                            else
                                            {
                                                __instance.InvokeMethod("SwapItemCraft", ___slotID);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (___craftType == 2)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0)
                                {
                                    if (___slotID == 0 && ___craft[___slotID].id != __state.id)
                                    {
                                        if (___craft[0].id == 0 &&
                                            (__state.id < 1000 || __state.id >= 1006) && (__state.id < 450 || __state.id >= 456) &&
                                            (__state.id < 500 || __state.id >= 506) && (__state.id < 600 || __state.id >= 612) &&
                                            (__state.id < 550 || __state.id >= 562) && (__state.id < 350 || __state.id >= 362) &&
                                            (__state.id < 400 || __state.id >= 412) && (__state.id < 300 || __state.id >= 312) &&
                                            (__state.id < 700 || __state.id >= 712) && (__state.id < 800 || __state.id >= 812))
                                        {
                                            Item holdingItem = __state;
                                            if (GadgetCoreAPI.ultimateForgeRecipes.Any(x => x.Key.Item1 == holdingItem.id))
                                            {
                                                if (__instance.InvokeMethod <int>("GetItemLevel", holdingItem.exp) >= 10)
                                                {
                                                    __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                                }
                                                else
                                                {
                                                    __instance.InvokeMethod("Error", 12);
                                                }
                                            }
                                        }
                                    }
                                    else if (___slotID == 2)
                                    {
                                        if (___craft[2].id == 0 && (__state.id < 89 || __state.id >= 92))
                                        {
                                            Item holdingItem = __state;
                                            if (GadgetCoreAPI.ultimateForgeRecipes.Any(x => x.Key.Item2 == holdingItem.id))
                                            {
                                                __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                            }
                                        }
                                    }
                                }
                            }
                            else if (___craftType == 3)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0 && ___craft[___slotID].id != __state.id)
                                {
                                    if ((__state.id <= 103 || __state.id >= 107) && (__state.id <= 113 || __state.id >= 117) &&
                                        (__state.id <= 123 || __state.id >= 127) && (__state.id <= 133 || __state.id >= 137) &&
                                        __instance.InvokeMethod <bool>("CanPlaceCraft2", __state.id))
                                    {
                                        Item holdingItem = __state;
                                        if (GadgetCoreAPI.creationMachineRecipes.Any(x => x.Key == holdingItem.id))
                                        {
                                            if (___craft[___slotID].id == 0)
                                            {
                                                __instance.InvokeMethod("PlaceItemCraft", ___slotID);
                                            }
                                            else
                                            {
                                                __instance.InvokeMethod("SwapItemCraft", ___slotID);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (___hit.transform.gameObject.tag == "planet")
                        {
                            ___slotID = int.Parse(___hit.transform.gameObject.name);
                            if (___slotID >= 14)
                            {
                                while (___slotID >= 14)
                                {
                                    ___slotID -= 14;
                                    PlanetRegistry.PlanetSelectorPage++;
                                }
                                PlanetRegistry.UpdatePlanetSelector();
                            }
                            int planetIndex = (PlanetRegistry.PlanetSelectorPage - 2) * 14 + ___slotID;
                            if (planetIndex >= 0 && planetIndex < PlanetRegistry.selectorPlanets.Length && PlanetRegistry.selectorPlanets[planetIndex] is PlanetInfo planet)
                            {
                                if (planet.PortalUses > 0 || planet.PortalUses == -1)
                                {
                                    InstanceTracker.GameScript.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/confirm"), Menuu.soundLevel / 10f);
                                    InstanceTracker.GameScript.planetSelector.transform.position = new Vector3(InstanceTracker.GameScript.planetGuard[___slotID].transform.position.x, InstanceTracker.GameScript.planetGuard[___slotID].transform.position.y, InstanceTracker.GameScript.planetSelector.transform.position.z);
                                    GameScript.curPlanet = ___slotID;
                                    InstanceTracker.GameScript.planetObj.GetComponent <Renderer>().material = (Material)Resources.Load("mat/planet" + planet.ID);
                                    InstanceTracker.GameScript.planetObj.GetComponent <Animation>().Play();
                                    InstanceTracker.GameScript.txtPlanetName[0].text = planet.Name;
                                    InstanceTracker.GameScript.txtPlanetName[1].text = InstanceTracker.GameScript.txtPlanetName[0].text;
                                    InstanceTracker.GameScript.txtHostile[0].text    = "Hostile Lv." + InstanceTracker.GameScript.InvokeMethod("GetPlanetHostile", planet.ID);
                                    InstanceTracker.GameScript.txtHostile[1].text    = InstanceTracker.GameScript.txtHostile[0].text;
                                    if (planet.PortalUses > 0)
                                    {
                                        InstanceTracker.GameScript.txtPortalUses[0].text = "Portal Uses: " + planet.PortalUses;
                                        InstanceTracker.GameScript.txtPortalUses[1].text = InstanceTracker.GameScript.txtPortalUses[0].text;
                                    }
                                    else if (planet.PortalUses == -1)
                                    {
                                        InstanceTracker.GameScript.txtPortalUses[0].text = "Portal Uses: Infinite";
                                        InstanceTracker.GameScript.txtPortalUses[1].text = InstanceTracker.GameScript.txtPortalUses[0].text;
                                    }
                                }
                            }
                        }
                        else if (___hit.transform.gameObject.tag == "mod")
                        {
                            ___slotID = int.Parse(___hit.transform.gameObject.name);
                            Item holdingItem = __state;
                            if (holdingItem.id != 0)
                            {
                                if ((holdingItem.id < 300 || holdingItem.id >= 1000) && (ItemRegistry.GetItem(holdingItem.id).Type & ItemType.MODABLE) == ItemType.MODABLE)
                                {
                                    if (___modSlot[___slotID].id == 0)
                                    {
                                        __instance.PlaceItemMod(___slotID);
                                    }
                                    else
                                    {
                                        __instance.SwapItemMod(___slotID);
                                    }
                                }
                            }
                            else if ((___modSlot[___slotID].id < 300 || ___modSlot[___slotID].id >= 1000) && (ItemRegistry.GetItem(___modSlot[___slotID].id).Type & ItemType.MODABLE) == ItemType.MODABLE)
                            {
                                __instance.SelectItemMod(___slotID);
                            }
                        }
                    }
                    else if (___hit.transform.gameObject.layer != 17)
                    {
                        switch (___hit.transform.gameObject.name)
                        {
                        case "bPlanetPageBack":
                            __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/confirm"), Menuu.soundLevel / 10f);
                            if (PlanetRegistry.PlanetSelectorPage <= 1)
                            {
                                PlanetRegistry.PlanetSelectorPage = PlanetRegistry.PlanetSelectorPages;
                            }
                            else
                            {
                                PlanetRegistry.PlanetSelectorPage--;
                            }
                            PlanetRegistry.UpdatePlanetSelector();
                            break;

                        case "bPlanetPageForward":
                            __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/confirm"), Menuu.soundLevel / 10f);
                            if (PlanetRegistry.PlanetSelectorPage >= PlanetRegistry.PlanetSelectorPages)
                            {
                                PlanetRegistry.PlanetSelectorPage = 1;
                            }
                            else
                            {
                                PlanetRegistry.PlanetSelectorPage++;
                            }
                            PlanetRegistry.UpdatePlanetSelector();
                            break;
                        }
                    }
                }
                else if (Input.GetMouseButtonDown(1) && GameScript.inventoryOpen && Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out ___hit, 7f))
                {
                    if (___hit.transform.gameObject.layer == 16)
                    {
                        if (___hit.transform.gameObject.tag == "craft")
                        {
                            if (MenuRegistry.Singleton.GetEntry(___craftType) is CraftMenuInfo craftMenu)
                            {
                                ___slotID = int.Parse(___hit.transform.gameObject.name);
                                if (__state.id != 0)
                                {
                                    Item   holdingItem = __state;
                                    Item[] craftItems  = ___craft;
                                    int    slotID      = ___slotID;
                                    if (craftMenu.SlotValidators.Any(x => x(holdingItem, craftItems, slotID)))
                                    {
                                        if (___craft[___slotID].id == 0 || (GadgetCoreAPI.CanItemsStack(___craft[___slotID], __state) && ___craft[___slotID].q < 9999))
                                        {
                                            __instance.InvokeMethod("PlaceOneItemCraft", ___slotID);
                                        }
                                        else
                                        {
                                            __instance.InvokeMethod("SwapItemCraft", ___slotID);
                                        }
                                    }
                                }
                            }
                        }
                        else if (___hit.transform.gameObject.tag == "mod")
                        {
                            ___slotID = int.Parse(___hit.transform.gameObject.name);
                            Item holdingItem = __state;
                            if (holdingItem.id != 0)
                            {
                                if ((holdingItem.id < 300 || holdingItem.id >= 1000) && (ItemRegistry.GetItem(holdingItem.id).Type & ItemType.MODABLE) == ItemType.MODABLE)
                                {
                                    if (___modSlot[___slotID].id == 0)
                                    {
                                        __instance.PlaceItemMod(___slotID);
                                    }
                                    else
                                    {
                                        __instance.SwapItemMod(___slotID);
                                    }
                                }
                            }
                            else if ((___modSlot[___slotID].id < 300 || ___modSlot[___slotID].id >= 1000) && (ItemRegistry.GetItem(holdingItem.id).Type & ItemType.MODABLE) == ItemType.MODABLE)
                            {
                                __instance.SelectItemMod(___slotID);
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
 public static void Postfix(GameScript __instance, ref Item[] ___inventory, ref int ___curBlockSlot, ref ChunkWorld ___chunkWorld, ref ChunkWorld ___chunkWorldWall)
 {
     if (!GameScript.pausing && !GameScript.inventoryOpen && GameScript.buildMode && Input.GetMouseButtonDown(0) && ___inventory[___curBlockSlot].q > 0 && ItemRegistry.GetSingleton().HasEntry(___inventory[___curBlockSlot].id))
     {
         int num4 = (int)__instance.hoverBuild.transform.position.x;
         int num5 = (int)__instance.hoverBuild.transform.position.y;
         int num6 = (num4 + 62) / 4;
         int num7 = (num5 + 62) / 4;
         if (num6 < 64 && num6 >= 0 && num7 < 64 && num7 >= 0)
         {
             ItemInfo item = ItemRegistry.GetSingleton().GetEntry(___inventory[___curBlockSlot].id);
             if (item.Tile != null && item.Tile.TryPlaceTile())
             {
                 if (item.Tile.Type == TileType.WALL)
                 {
                     if (___chunkWorldWall.grid[num6, num7] == 0)
                     {
                         int[] value = new int[]
                         {
                             num4,
                             num5,
                             GameScript.curBlockID
                         };
                         __instance.WallManager.SendMessage("PlaceTile", value);
                         __instance.hoverBuild.SendMessage("Refresh");
                         __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                         ___inventory[___curBlockSlot].q--;
                         RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                         if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                         {
                             __instance.ExitBuildMode();
                             __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                             GameScript.curBlockID = 0;
                         }
                     }
                 }
                 else if (item.Tile.Type == TileType.SOLID)
                 {
                     if (___chunkWorld.gridSpecial[num6, num7] == 0 && ___chunkWorld.grid[num6, num7] == 0)
                     {
                         int[] value3 = new int[]
                         {
                             num4,
                             num5,
                             GameScript.curBlockID
                         };
                         __instance.TileManager.SendMessage("PlaceTile", value3);
                         __instance.hoverBuild.SendMessage("Refresh");
                         __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                         ___inventory[___curBlockSlot].q--;
                         RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                         if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                         {
                             __instance.ExitBuildMode();
                             __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                             GameScript.curBlockID = 0;
                         }
                     }
                 }
                 else
                 {
                     if (___chunkWorld.gridSpecial[num6, num7] == 0 && ___chunkWorld.grid[num6, num7] == 0)
                     {
                         if (GameScript.curBlockID == 2107 && __instance.gatherer)
                         {
                             __instance.Error(11);
                         }
                         else
                         {
                             int[] value2 = new int[]
                             {
                                 num4,
                                 num5,
                                 GameScript.curBlockID
                             };
                             __instance.TileManager.SendMessage("PlaceTileSpecial", value2);
                             __instance.hoverBuild.SendMessage("Refresh");
                             __instance.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/emblem"), Menuu.soundLevel / 10f);
                             ___inventory[___curBlockSlot].q--;
                             RefreshSlot.Invoke(__instance, new object[] { ___curBlockSlot });
                             if (___inventory[___curBlockSlot].q <= 0 && GameScript.buildMode)
                             {
                                 __instance.ExitBuildMode();
                                 __instance.hoverSprite.GetComponent <Renderer>().material = (Material)Resources.Load("mat/trans");
                                 GameScript.curBlockID = 0;
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Пример #5
0
 public static bool Prefix(ChunkWorld __instance, byte brick, Vector3 corner, Vector3 up, Vector3 right, bool reversed, List <Vector3> verts, List <Vector2> uvs, List <int> tris, int id, int face)
 {
     if (TileRegistry.GetSingleton().HasEntry(id))
     {
         TileInfo tile  = TileRegistry.GetSingleton().GetEntry(id);
         int      count = verts.Count;
         if (tile.Type == TileType.SOLID || tile.Type == TileType.WALL)
         {
             verts.Add(corner);
             verts.Add(corner + up);
             verts.Add(corner + up + right);
             verts.Add(corner + right);
         }
         else
         {
             if (face == 4)
             {
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f) + up);
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f) + up + right);
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f) + right);
             }
             else if (face == 0 || face == 1)
             {
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                 verts.Add(corner + up + new Vector3(0f, 0f, 0.5f));
                 verts.Add(corner + up + right);
                 verts.Add(corner + right);
             }
             else if (face != 5)
             {
                 verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                 verts.Add(corner + up);
                 verts.Add(corner + up + right);
                 verts.Add(corner + right + new Vector3(0f, 0f, 0.5f));
             }
             else
             {
                 verts.Add(corner);
                 verts.Add(corner + up);
                 verts.Add(corner + up + right);
                 verts.Add(corner + right);
             }
         }
         uvs.Add(new Vector2(tile.Sprite.coords.x, tile.Sprite.coords.y));
         uvs.Add(new Vector2(tile.Sprite.coords.x, tile.Sprite.coords.y + 1));
         uvs.Add(new Vector2(tile.Sprite.coords.x + 1, tile.Sprite.coords.y + 1));
         uvs.Add(new Vector2(tile.Sprite.coords.x + 1, tile.Sprite.coords.y));
         if (reversed)
         {
             tris.Add(count);
             tris.Add(count + 1);
             tris.Add(count + 2);
             tris.Add(count + 2);
             tris.Add(count + 3);
             tris.Add(count);
         }
         else
         {
             tris.Add(count + 1);
             tris.Add(count);
             tris.Add(count + 2);
             tris.Add(count + 3);
             tris.Add(count + 2);
             tris.Add(count);
         }
         return(false);
     }
     return(true);
 }
        public static bool Prefix(ChunkWorld __instance, byte brick, Vector3 corner, Vector3 up, Vector3 right, bool reversed, List <Vector3> verts, List <Vector2> uvs, List <int> tris, int id, int face)
        {
            if (TileRegistry.Singleton.HasEntry(id))
            {
                TileInfo tile = TileRegistry.Singleton.GetEntry(id);
                if (tile.Type == TileType.SOLID || tile.Type == TileType.WALL)
                {
                    verts.Add(corner);
                    verts.Add(corner + up);
                    verts.Add(corner + up + right);
                    verts.Add(corner + right);
                }
                else
                {
                    if (face == 4)
                    {
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f) + up);
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f) + up + right);
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f) + right);
                    }
                    else if (face == 0 || face == 1)
                    {
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                        verts.Add(corner + up + new Vector3(0f, 0f, 0.5f));
                        verts.Add(corner + up + right);
                        verts.Add(corner + right);
                    }
                    else if (face != 5)
                    {
                        verts.Add(corner + new Vector3(0f, 0f, 0.5f));
                        verts.Add(corner + up);
                        verts.Add(corner + up + right);
                        verts.Add(corner + right + new Vector3(0f, 0f, 0.5f));
                    }
                    else
                    {
                        verts.Add(corner);
                        verts.Add(corner + up);
                        verts.Add(corner + up + right);
                        verts.Add(corner + right);
                    }
                }
                if (tile.Sprite != null)
                {
                    uvs.Add(new Vector2(tile.Sprite.coords.x, tile.Sprite.coords.y));
                    uvs.Add(new Vector2(tile.Sprite.coords.x, tile.Sprite.coords.y + 1));
                    uvs.Add(new Vector2(tile.Sprite.coords.x + 1, tile.Sprite.coords.y + 1));
                    uvs.Add(new Vector2(tile.Sprite.coords.x + 1, tile.Sprite.coords.y));
                }
                else
                {
                    uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x, GadgetCoreAPI.MissingTexSprite.coords.y));
                    uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x, GadgetCoreAPI.MissingTexSprite.coords.y + 1));
                    uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x + 1, GadgetCoreAPI.MissingTexSprite.coords.y + 1));
                    uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x + 1, GadgetCoreAPI.MissingTexSprite.coords.y));
                }
                if (reversed)
                {
                    tris.Add(verts.Count);
                    tris.Add(verts.Count + 1);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 3);
                    tris.Add(verts.Count);
                }
                else
                {
                    tris.Add(verts.Count + 1);
                    tris.Add(verts.Count);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 3);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count);
                }
                return(false);
            }
            if (id == 2000 || id == 2001 || id == 2002 || id == 2200 || id == 2300)
            {
                return(true);
            }
            else
            {
                verts.Add(corner);
                verts.Add(corner + up);
                verts.Add(corner + up + right);
                verts.Add(corner + right);

                uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x, GadgetCoreAPI.MissingTexSprite.coords.y));
                uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x, GadgetCoreAPI.MissingTexSprite.coords.y + 1));
                uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x + 1, GadgetCoreAPI.MissingTexSprite.coords.y + 1));
                uvs.Add(new Vector2(GadgetCoreAPI.MissingTexSprite.coords.x + 1, GadgetCoreAPI.MissingTexSprite.coords.y));

                if (reversed)
                {
                    tris.Add(verts.Count);
                    tris.Add(verts.Count + 1);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 3);
                    tris.Add(verts.Count);
                }
                else
                {
                    tris.Add(verts.Count + 1);
                    tris.Add(verts.Count);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count + 3);
                    tris.Add(verts.Count + 2);
                    tris.Add(verts.Count);
                }
                return(false);
            }
        }
Пример #7
0
        private static IEnumerator WaitAndTryAgain(ChunkWorld __instance)
        {
            yield return(new WaitUntil(() => GadgetNetwork.MatrixReady || GadgetNetwork.GetTimeSinceConnect() > GadgetNetwork.MatrixTimeout));

            OnServerInitialized.Invoke(__instance, new object[] { });
        }