コード例 #1
0
    public override void Add_Tile(Vector3Int i_pos, TileBase i_tile)
    {
        Debug.Log("Tile added to energy");
        bool is_valid = false;

        if (tm == null)
        {
            tm = GameObject.FindGameObjectWithTag("TileManager").GetComponent <Tile_Manager>();
        }

        if (Check_Tiletype(system_tiles["Transmitters"], i_tile))
        {
            energy_dictionary.Add(i_pos, Create_Energy_Tile(i_tile));
            is_valid = true;
        }
        else if (Check_Tiletype(system_tiles["Generators"], i_tile))
        {
            Debug.Log("Generator Added");
            generator_dictionary.Add(i_pos, 1);
            is_valid = true;
        }
        else if (Check_Tiletype(system_tiles["Receptors"], i_tile))
        {
            Energy_Receptor input_receptor;

            if (tm.Check_Layer_Name(i_tile, "Wheel"))
            {
                input_receptor = new Ship_Wheel(i_pos, tm.Grab_Ship_Layer(i_tile));
            }
            else
            {
                if (is_ship_mode)
                {
                    input_receptor = new Door(i_pos, i_tile, tm.Grab_Ship_Layer(i_tile));
                }
                else
                {
                    input_receptor = new Door(i_pos, i_tile, tm.Grab_Layer(i_tile));
                }
            }

            receptor_dictionary.Add(i_pos, input_receptor);
            is_valid = true;
        }


        if (is_valid)
        {
            base.Add_Tile(i_pos, i_tile);
        }
        else
        {
            Debug.LogWarning("Invalid tile addition at:" + i_pos + " with " + i_tile);
        }
    }
コード例 #2
0
    private void Spread_Neighbour(Vector3Int i_pos)
    {
        TileBase liquid_tile;
        Tilemap  liquid_tilemap;

        //spawner_tile = system_tiles["Spawner"][0];
        liquid_tile = liquid_dictionary[i_pos].tile;

        if (is_ship_mode)
        {
            //spawner_tile = system_tiles["Spawner"][0];
            liquid_tilemap = tm.Grab_Ship_Layer(liquid_tile);
        }
        else
        {
            liquid_tilemap = tm.Grab_Layer(liquid_tile);
        }



        Vector3Int up_neighbour = i_pos + Vector3Int.up;

        if (Capacity_Compare(i_pos, up_neighbour))
        {
            if (!liquid_dictionary.ContainsKey(up_neighbour))
            {
                Drain(i_pos, up_neighbour);
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(up_neighbour, liquid_tile);
                }
                else
                {
                    tm.Add_Tile(up_neighbour, liquid_tile);
                }
            }
            else
            {
                Equalize(i_pos, up_neighbour);
            }
        }

        Vector3Int down_neighbour = i_pos + Vector3Int.down;

        if (Capacity_Compare(i_pos, down_neighbour))
        {
            if (!liquid_dictionary.ContainsKey(down_neighbour))
            {
                Drain(i_pos, down_neighbour);
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(down_neighbour, liquid_tile);
                }
                else
                {
                    tm.Add_Tile(down_neighbour, liquid_tile);
                }
            }
            else
            {
                Equalize(i_pos, down_neighbour);
            }
        }

        Vector3Int left_neighbour = i_pos + Vector3Int.left;

        if (Capacity_Compare(i_pos, left_neighbour))
        {
            if (!liquid_dictionary.ContainsKey(left_neighbour))
            {
                Drain(i_pos, left_neighbour);
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(left_neighbour, liquid_tile);
                }
                else
                {
                    tm.Add_Tile(left_neighbour, liquid_tile);
                }
            }
            else
            {
                Equalize(i_pos, left_neighbour);
            }
        }

        Vector3Int right_neighbour = i_pos + Vector3Int.right;

        if (Capacity_Compare(i_pos, right_neighbour))
        {
            if (!liquid_dictionary.ContainsKey(right_neighbour))
            {
                Drain(i_pos, right_neighbour);
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(right_neighbour, liquid_tile);
                }
                else
                {
                    tm.Add_Tile(right_neighbour, liquid_tile);
                }
            }
            else
            {
                Equalize(i_pos, right_neighbour);
            }
        }
    }
コード例 #3
0
    private void Convert_Neighbour(Vector3Int i_pos)
    {
        bool has_spread = false;

        TileBase spawner_tile;
        Tilemap  spawner_tilemap;

        //spawner_tile = system_tiles["Spawner"][0];
        spawner_tile = swarm_dictionary[i_pos].tile;

        if (is_ship_mode)
        {
            //spawner_tile = system_tiles["Spawner"][0];
            spawner_tilemap = tm.Grab_Ship_Layer(spawner_tile);
        }
        else
        {
            spawner_tilemap = tm.Grab_Layer(spawner_tile);
        }



        Vector3Int up_neighbour = i_pos + Vector3Int.up;

        if ((spawner_tilemap.GetTile(up_neighbour) != null) && (Count_Swarm_Neighbours(up_neighbour) < 2))
        {
            if (!swarm_dictionary.ContainsKey(up_neighbour))
            {
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(up_neighbour, spawner_tile);
                }
                else
                {
                    tm.Add_Tile(up_neighbour, spawner_tile);
                }
                has_spread = true;
            }
        }

        Vector3Int down_neighbour = i_pos + Vector3Int.down;

        if (((spawner_tilemap.GetTile(down_neighbour) != null) && (!has_spread)) && (Count_Swarm_Neighbours(down_neighbour) < 2))
        {
            if (!swarm_dictionary.ContainsKey(down_neighbour))
            {
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(down_neighbour, spawner_tile);
                }
                else
                {
                    tm.Add_Tile(down_neighbour, spawner_tile);
                }
                has_spread = true;
            }
        }

        Vector3Int left_neighbour = i_pos + Vector3Int.left;

        if (((spawner_tilemap.GetTile(left_neighbour) != null) && (!has_spread)) && (Count_Swarm_Neighbours(left_neighbour) < 2))
        {
            if (!swarm_dictionary.ContainsKey(left_neighbour))
            {
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(left_neighbour, spawner_tile);
                }
                else
                {
                    tm.Add_Tile(left_neighbour, spawner_tile);
                }
                has_spread = true;
            }
        }

        Vector3Int right_neighbour = i_pos + Vector3Int.right;

        if (((spawner_tilemap.GetTile(right_neighbour) != null) && (!has_spread)) && (Count_Swarm_Neighbours(right_neighbour) < 2))
        {
            if (!swarm_dictionary.ContainsKey(right_neighbour))
            {
                if (is_ship_mode)
                {
                    tm.Ship_Add_Tile(right_neighbour, spawner_tile);
                }
                else
                {
                    tm.Add_Tile(right_neighbour, spawner_tile);
                }
                has_spread = true;
            }
        }
    }