Пример #1
0
    /**
     * <summary>
     * Generate grids
     * </summary>
     *
     * <param name="initialPoint"/>
     * <param name="finalPoint"/>
     *
     * <returns>
     *  void
     * </returns>
     */
    public void GenerateGrids(Vector3 initialPoint, Vector3 finalPoint)
    {
        for (float x = initialPoint.x; x < finalPoint.x; x++)
        {
            int roundedX = Mathf.RoundToInt(x);
            MapBehaviour.Tiles[roundedX] = new Dictionary <int, Tile>();

            for (float z = finalPoint.z; z <= initialPoint.z; z++)
            {
                // Initializing key
                Tile tile = new Tile();

                int roundedZ = Mathf.RoundToInt(z);

                tile.SetPosition(new Vector3(roundedX, 0, roundedZ));
                MapBehaviour.Tiles[roundedX][roundedZ] = tile;
            }
        }
    }
 /**
  * Set the tile instance
  * @return void
  */
 public virtual void SetTile(Tile tile)
 {
     this.tile = tile;
 }
    /**
     * Get the id based on its position
     * @return int id
     */
    public virtual int GetID()
    {
        Vector3 position = this.tile.GetPosition();
        int     x        = Mathf.RoundToInt(position.x);
        int     z        = Mathf.RoundToInt(position.z);

        Tile topLeftTile     = MapGeneratorBehaviour.IsTileExists(x - 1, z + 1) ? MapGeneratorBehaviour.Tiles[x - 1][z + 1].GetComponent <TileBehaviour>().GetTile() : null;
        Tile topTile         = MapGeneratorBehaviour.IsTileExists(x, z + 1) ? MapGeneratorBehaviour.Tiles[x][z + 1].GetComponent <TileBehaviour>().GetTile() : null;
        Tile topRightTile    = MapGeneratorBehaviour.IsTileExists(x + 1, z + 1) ? MapGeneratorBehaviour.Tiles[x + 1][z + 1].GetComponent <TileBehaviour>().GetTile() : null;
        Tile leftTile        = MapGeneratorBehaviour.IsTileExists(x - 1, z) ? MapGeneratorBehaviour.Tiles[x - 1][z].GetComponent <TileBehaviour>().GetTile() : null;
        Tile rightTile       = MapGeneratorBehaviour.IsTileExists(x + 1, z) ? MapGeneratorBehaviour.Tiles[x + 1][z].GetComponent <TileBehaviour>().GetTile() : null;
        Tile bottomLeftTile  = MapGeneratorBehaviour.IsTileExists(x - 1, z - 1) ? MapGeneratorBehaviour.Tiles[x - 1][z - 1].GetComponent <TileBehaviour>().GetTile() : null;
        Tile bottomTile      = MapGeneratorBehaviour.IsTileExists(x, z - 1) ? MapGeneratorBehaviour.Tiles[x][z - 1].GetComponent <TileBehaviour>().GetTile() : null;
        Tile bottomRightTile = MapGeneratorBehaviour.IsTileExists(x + 1, z - 1) ? MapGeneratorBehaviour.Tiles[x + 1][z - 1].GetComponent <TileBehaviour>().GetTile() : null;

        // 8-bit binary
        Char[] binary = new char[8];

        // check top left
        if (topLeftTile != null && topLeftTile.GetType() == TileType.Water)
        {
            binary[7] = '1';
        }
        else
        {
            binary[7] = '0';
        }

        // check top tile
        if (topTile != null && topTile.GetType() == TileType.Water)
        {
            binary[6] = '1';
        }
        else
        {
            binary[6] = '0';
        }

        // check top tile
        if (topRightTile != null && topRightTile.GetType() == TileType.Water)
        {
            binary[5] = '1';
        }
        else
        {
            binary[5] = '0';
        }

        // check left tile
        if (leftTile != null && leftTile.GetType() == TileType.Water)
        {
            binary[4] = '1';
        }
        else
        {
            binary[4] = '0';
        }

        // check right tile
        if (rightTile != null && rightTile.GetType() == TileType.Water)
        {
            binary[3] = '1';
        }
        else
        {
            binary[3] = '0';
        }

        // check bottom left tile
        if (bottomLeftTile != null && bottomLeftTile.GetType() == TileType.Water)
        {
            binary[2] = '1';
        }
        else
        {
            binary[2] = '0';
        }

        // check bottom left tile
        if (bottomTile != null && bottomTile.GetType() == TileType.Water)
        {
            binary[1] = '1';
        }
        else
        {
            binary[1] = '0';
        }

        // check bottom right tile
        if (bottomRightTile != null && bottomRightTile.GetType() == TileType.Water)
        {
            binary[0] = '1';
        }
        else
        {
            binary[0] = '0';
        }

        // Convert binary to int
        int value = (int)TileID.Center;

        int start = 0;

        for (int i = binary.Length - 1; i > -1; i--)
        {
            if (binary[i].Equals('1'))
            {
                value = value + (int)Math.Pow(2, start);
            }

            start = start + 1;
        }

        Debug.Log(value);


        return(value);
    }
    /**
     * Sand out sharp edges
     * @return void
     */
    public IEnumerator SandGrassEdges()
    {
        while (this.generated && !this.finished)
        {
            GameObject tiles = GameObject.Find("Tiles");

            foreach (GameObject grassTile in this.grassTiles)
            {
                GrassTileBehaviour grassTileBehaviour = grassTile.GetComponent <GrassTileBehaviour>();
                Tile tile = grassTileBehaviour.GetTile();

                int positionX = Mathf.RoundToInt(tile.GetPosition().x);
                int positionZ = Mathf.RoundToInt(tile.GetPosition().z);

                GameObject topTileGameObject = IsTileExists(tile.GetPosition().x, tile.GetPosition().z + 1) ? Tiles[positionX][positionZ + 1] : null;
                Tile       topTile           = (topTileGameObject != null) ? topTileGameObject.GetComponent <TileBehaviour>().GetTile() : null;

                GameObject leftTileGameObject = IsTileExists(tile.GetPosition().x - 1, tile.GetPosition().z) ? Tiles[positionX - 1][positionZ] : null;
                Tile       leftTile           = (leftTileGameObject != null) ? leftTileGameObject.GetComponent <TileBehaviour>().GetTile() : null;

                GameObject bottomTileGameObject = IsTileExists(tile.GetPosition().x, tile.GetPosition().z - 1) ? Tiles[positionX][positionZ - 1] : null;
                Tile       bottomTile           = (bottomTileGameObject != null) ? bottomTileGameObject.GetComponent <TileBehaviour>().GetTile() : null;

                GameObject rightTileGameObject = IsTileExists(tile.GetPosition().x + 1, tile.GetPosition().z) ? Tiles[positionX + 1][positionZ] : null;
                Tile       rightTile           = (rightTileGameObject != null) ? rightTileGameObject.GetComponent <TileBehaviour>().GetTile() : null;

                GameObject edgeTileGameObject = null;
                Tile       cornerTile;

                Vector3 tilePosition = tile.GetPosition();

                // left and top
                if (
                    leftTile != null &&
                    topTile != null &&
                    rightTile != null &&
                    bottomTile != null &&
                    leftTile.GetType() == TileType.Water &&
                    topTile.GetType() == TileType.Water &&
                    rightTile.GetType() == TileType.Grass &&
                    bottomTile.GetType() == TileType.Grass
                    )
                {
                    edgeTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Development/Tiles/Grass/Top Left Grass Tile", typeof(GameObject))
                        ) as GameObject;
                }
                // right and top
                else if (
                    rightTile != null &&
                    topTile != null &&
                    leftTile != null &&
                    topTile != null &&
                    rightTile.GetType() == TileType.Water &&
                    topTile.GetType() == TileType.Water &&
                    leftTile.GetType() == TileType.Grass &&
                    topTile.GetType() == TileType.Grass
                    )
                {
                    edgeTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Development/Tiles/Grass/Top Right Grass Tile", typeof(GameObject))
                        ) as GameObject;
                }
                // left and bottom
                else if (
                    leftTile != null &&
                    bottomTile != null &&
                    rightTile != null &&
                    topTile != null &&
                    leftTile.GetType() == TileType.Water &&
                    bottomTile.GetType() == TileType.Water &&
                    rightTile.GetType() == TileType.Grass &&
                    topTile.GetType() == TileType.Grass
                    )
                {
                    edgeTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Left Grass Tile", typeof(GameObject))
                        ) as GameObject;
                }
                // right and bottom
                else if (
                    rightTile != null &&
                    bottomTile != null &&
                    leftTile != null &&
                    topTile != null &&
                    rightTile.GetType() == TileType.Water &&
                    bottomTile.GetType() == TileType.Water &&
                    leftTile.GetType() == TileType.Grass &&
                    topTile.GetType() == TileType.Grass
                    )
                {
                    edgeTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Right Grass Tile", typeof(GameObject))
                        ) as GameObject;
                }

                if (edgeTileGameObject != null)
                {
                    cornerTile = tile;

                    TileBehaviour cornerTileBehaviour = edgeTileGameObject.GetComponent <TileBehaviour>();

                    cornerTile.SetType(TileType.Grass);
                    cornerTileBehaviour.SetTile(cornerTile);

                    edgeTileGameObject.transform.position = tilePosition;
                    edgeTileGameObject.transform.SetParent(tiles.transform);


                    Tiles[Mathf.RoundToInt(tilePosition.x)][Mathf.RoundToInt(tilePosition.z)] = edgeTileGameObject;

                    MonoBehaviour.Destroy(grassTile);
                }
            }

            // Clear out the grass tiles list
            this.grassTiles.Clear();

            // Set finished flag to true
            this.finished = true;

            yield return(null);
        }

        yield return(null);
    }
    /**
     * <summary>
     * Smooth out grass tiles
     * </summary>
     *
     * <returns>
     *  void null
     * </returns>
     */
    public void SmoothGrassTiles()
    {
        // Is generated but is not smoothed out
        if (this.generated && !this.finished)
        {
            Transform tiles = GameObject.Find("Tiles").transform;

            Debug.Log("ok...");
            foreach (GameObject grassTile in this.grassTiles)
            {
                TileBehaviour grassTileBehaviour = grassTile.GetComponent <TileBehaviour>();
                int           id = grassTileBehaviour.GetID();

                GameObject newTileGameObject = null;
                TileID     tileID            = TileID.Default;

                //Debug.Log(id);

                switch (id)
                {
                /**
                 * Normal Tiles
                 */

                // Top Left
                case (int)TileID.SmoothTopLeft002:
                case (int)TileID.SmoothTopLeft003:
                case (int)TileID.SmoothTopLeft004:
                case (int)TileID.SmoothTopLeft005:
                case (int)TileID.SmoothTopLeft006:
                case (int)TileID.SmoothTopLeft:
                case (int)TileID.TopLeftEdgeCorner002:
                case (int)TileID.TopLeftEdgeCorner:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Top Left Grass Tile", typeof(GameObject))
                        ) as GameObject;
                    tileID = TileID.TopLeft;
                    break;

                case (int)TileID.TopLeft:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Center;
                    break;

                // Smooth Top Left Edge Corner
                //case (int)TileID.SmoothTopLeft002:
                //case (int)TileID.SmoothTopLeft003:
                //case (int)TileID.SmoothTopLeft004:
                //case (int)TileID.SmoothTopLeft005:
                //case (int)TileID.SmoothTopLeft006:
                //case (int)TileID.SmoothTopLeft:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Left Edge Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.SmoothTopLeft;
                //break;

                // Top Left Edge Corner
                //case (int)TileID.TopLeftEdgeCorner002:
                //case (int)TileID.TopLeftEdgeCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Left Edge Grass With Water Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopLeftEdgeCorner;
                //break;

                // Top Left Corners
                //case (int)TileID.TopLeftCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Left Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopLeftCorners;
                //break;

                // Top
                case (int)TileID.Top002:
                case (int)TileID.Top003:
                case (int)TileID.Top004:
                case (int)TileID.Top:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Top Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Top;
                    break;

                // Top With Right Corner
                //case (int)TileID.TopWithRightCorner002:
                //case (int)TileID.TopWithRightCorner003:
                //case (int)TileID.TopWithRightCorner004:
                //case (int)TileID.TopWithRightCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Grass Tile With Right Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopWithRightCorner;
                //break;

                // Top With Left Corner
                //case (int)TileID.TopWithLeftCorner002:
                //case (int)TileID.TopWithLeftCorner003:
                //case (int)TileID.TopWithLeftCorner004:
                //case (int)TileID.TopWithLeftCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Grass Tile With Left Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopWithLeftCorner;
                //break;

                // Top With Corners
                //case (int)TileID.TopWithCorners002:
                //case (int)TileID.TopWithCorners003:
                //case (int)TileID.TopWithCorners004:
                //case (int)TileID.TopWithCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Grass Tile With Corners", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopWithCorners;
                //break;

                // Top Corners
                //case (int)TileID.TopCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopCorners;
                //break;

                // Top Right
                case (int)TileID.SmoothTopRight002:
                case (int)TileID.SmoothTopRight003:
                case (int)TileID.SmoothTopRight004:
                case (int)TileID.SmoothTopRight005:
                case (int)TileID.SmoothTopRight006:
                case (int)TileID.SmoothTopRight:
                case (int)TileID.TopRightEdgeCorner002:
                case (int)TileID.TopRightEdgeCorner:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Top Right Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.TopRight;
                    break;

                case (int)TileID.TopRight:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Center;
                    break;

                // Smooth Top Right Edge Corner
                //case (int)TileID.SmoothTopRight002:
                //case (int)TileID.SmoothTopRight003:
                //case (int)TileID.SmoothTopRight004:
                //case (int)TileID.SmoothTopRight005:
                //case (int)TileID.SmoothTopRight006:
                //case (int)TileID.SmoothTopRight:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Right Edge Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.SmoothTopRight;
                //break;

                // Top Right Edge Corner
                //case (int)TileID.TopRightEdgeCorner002:
                //case (int)TileID.TopRightEdgeCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Right Edge Grass With Water Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopRightEdgeCorner;
                //break;

                // Top Right Corners
                //case (int)TileID.TopRightCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Top Right Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.TopRightCorners;
                //break;

                // Left
                case (int)TileID.Left002:
                case (int)TileID.Left003:
                case (int)TileID.Left004:
                case (int)TileID.Left:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Left Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Left;
                    break;

                // Left With Top Corner
                //case (int)TileID.LeftWithTopCorner002:
                //case (int)TileID.LeftWithTopCorner003:
                //case (int)TileID.LeftWithTopCorner004:
                //case (int)TileID.LeftWithTopCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Left Grass Tile With Top Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.LeftWithTopCorner;
                //break;

                // Left With Bottom Corner
                //case (int)TileID.LeftWithBottomCorner002:
                //case (int)TileID.LeftWithBottomCorner003:
                //case (int)TileID.LeftWithBottomCorner004:
                //case (int)TileID.LeftWithBottomCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Left Grass Tile With Bottom Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.LeftWithBottomCorner;
                //break;

                // Left With Corners
                //case (int)TileID.LeftWithCorners002:
                //case (int)TileID.LeftWithCorners003:
                //case (int)TileID.LeftWithCorners004:
                //case (int)TileID.LeftWithCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Left Grass Tile With Corners", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.LeftWithCorners;
                //break;

                // Left Corners
                //case (int)TileID.LeftCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Left Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.LeftCorners;
                //break;

                // Center
                case (int)TileID.Center:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Center;
                    break;

                // Right
                case (int)TileID.Right002:
                case (int)TileID.Right003:
                case (int)TileID.Right004:
                case (int)TileID.Right:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Right Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Right;
                    break;

                // Right With Top Corner
                //case (int)TileID.RightWithTopCorner002:
                //case (int)TileID.RightWithTopCorner003:
                //case (int)TileID.RightWithTopCorner004:
                //case (int)TileID.RightWithTopCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Right Grass Tile With Top Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.RightWithTopCorner;
                //break;

                // Right With Bottom Corner
                //case (int)TileID.RightWithBottomCorner002:
                //case (int)TileID.RightWithBottomCorner003:
                //case (int)TileID.RightWithBottomCorner004:
                //case (int)TileID.RightWithBottomCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Right Grass Tile With Bottom Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.RightWithBottomCorner;
                //break;

                // Right With Corners
                //case (int)TileID.RightWithCorners002:
                //case (int)TileID.RightWithCorners003:
                //case (int)TileID.RightWithCorners004:
                //case (int)TileID.RightWithCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Right Grass Tile With Corners", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.RightWithCorners;
                //break;

                // Right Corners
                //case (int)TileID.RightCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Right Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.RightCorners;
                //break;

                // Bottom Left
                case (int)TileID.SmoothBottomLeft002:
                case (int)TileID.SmoothBottomLeft003:
                case (int)TileID.SmoothBottomLeft004:
                case (int)TileID.SmoothBottomLeft005:
                case (int)TileID.SmoothBottomLeft006:
                case (int)TileID.SmoothBottomLeft:
                case (int)TileID.BottomLeftEdgeCorner002:
                case (int)TileID.BottomLeftEdgeCorner:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Bottom Left Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.BottomLeft;
                    break;

                case (int)TileID.BottomLeft:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Center;
                    break;

                // Smooth Bottom Left
                //case (int)TileID.SmoothBottomLeft002:
                //case (int)TileID.SmoothBottomLeft003:
                //case (int)TileID.SmoothBottomLeft004:
                //case (int)TileID.SmoothBottomLeft005:
                //case (int)TileID.SmoothBottomLeft006:
                //case (int)TileID.SmoothBottomLeft:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Left Edge Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.SmoothBottomLeft;
                //break;

                // Bottom Left Edge Corner
                //case (int)TileID.BottomLeftEdgeCorner002:
                //case (int)TileID.BottomLeftEdgeCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Left Edge Grass With Water Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomLeftEdgeCorner;
                //break;

                // Bottom Left Corners
                //case (int)TileID.BottomLeftCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Left Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomLeftCorners;
                //break;

                // Bottom
                case (int)TileID.Bottom002:
                case (int)TileID.Bottom003:
                case (int)TileID.Bottom004:
                case (int)TileID.Bottom:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Bottom Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Bottom;
                    break;

                // Bottom With Left Corner
                //case (int)TileID.BottomWithLeftCorner002:
                //case (int)TileID.BottomWithLeftCorner003:
                //case (int)TileID.BottomWithLeftCorner004:
                //case (int)TileID.BottomWithLeftCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Grass Tile With Left Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomWithLeftCorner;
                //break;

                // Bottom With Right Corner
                //case (int)TileID.BottomWithRightCorner002:
                //case (int)TileID.BottomWithRightCorner003:
                //case (int)TileID.BottomWithRightCorner004:
                //case (int)TileID.BottomWithRightCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Grass Tile With Right Corner", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomWithRightCorner;
                //break;

                // Bottom With Corners
                //case (int)TileID.BottomWithCorners002:
                //case (int)TileID.BottomWithCorners003:
                //case (int)TileID.BottomWithCorners004:
                //case (int)TileID.BottomWithCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Grass Tile With Corners", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomWithCorners;
                //break;

                // Bottom Corners
                //case (int)TileID.BottomCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomCorners;
                //break;

                // Bottom Right
                case (int)TileID.SmoothBottomRight002:
                case (int)TileID.SmoothBottomRight003:
                case (int)TileID.SmoothBottomRight004:
                case (int)TileID.SmoothBottomRight005:
                case (int)TileID.SmoothBottomRight006:
                case (int)TileID.SmoothBottomRight:
                case (int)TileID.BottomRightEdgeCorner002:
                case (int)TileID.BottomRightEdgeCorner:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Bottom Right Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.BottomRight;
                    break;

                case (int)TileID.BottomRight:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Center;
                    break;
                // All Corners
                //case (int)TileID.AllCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/All Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.AllCorners;
                //break;

                // Smooth Bottom Right
                //case (int)TileID.SmoothBottomRight002:
                //case (int)TileID.SmoothBottomRight003:
                //case (int)TileID.SmoothBottomRight004:
                //case (int)TileID.SmoothBottomRight005:
                //case (int)TileID.SmoothBottomRight006:
                //case (int)TileID.SmoothBottomRight:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Right Edge Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.SmoothBottomRight;
                //break;

                // Bottom Right Edge Corner
                //case (int)TileID.BottomRightEdgeCorner002:
                //case (int)TileID.BottomRightEdgeCorner:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Right Edge Grass With Water Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomRightEdgeCorner;
                //break;

                // Bottom Right Corners
                //case (int)TileID.BottomRightCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Bottom Right Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.BottomRightCorners;
                //break;

                /**
                 * Offset Tiles
                 */
                case (int)TileID.TopOffset002:
                case (int)TileID.TopOffset003:
                case (int)TileID.TopOffset004:
                case (int)TileID.TopOffset005:
                case (int)TileID.TopOffset006:
                case (int)TileID.TopOffset007:
                case (int)TileID.TopOffset008:
                case (int)TileID.TopOffset009:
                case (int)TileID.TopOffset010:
                case (int)TileID.TopOffset011:
                case (int)TileID.TopOffset012:
                case (int)TileID.TopOffset013:
                case (int)TileID.TopOffset014:
                case (int)TileID.TopOffset:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Offset/Top Offset Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.TopOffset;
                    break;

                // Left Offset
                case (int)TileID.LeftOffset002:
                case (int)TileID.LeftOffset003:
                case (int)TileID.LeftOffset004:
                case (int)TileID.LeftOffset005:
                case (int)TileID.LeftOffset006:
                case (int)TileID.LeftOffset007:
                case (int)TileID.LeftOffset008:
                case (int)TileID.LeftOffset009:
                case (int)TileID.LeftOffset010:
                case (int)TileID.LeftOffset011:
                case (int)TileID.LeftOffset012:
                case (int)TileID.LeftOffset013:
                case (int)TileID.LeftOffset014:
                case (int)TileID.LeftOffset:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Offset/Left Offset Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.LeftOffset;
                    break;

                // Right Offset
                case (int)TileID.RightOffset002:
                case (int)TileID.RightOffset003:
                case (int)TileID.RightOffset004:
                case (int)TileID.RightOffset005:
                case (int)TileID.RightOffset006:
                case (int)TileID.RightOffset007:
                case (int)TileID.RightOffset008:
                case (int)TileID.RightOffset009:
                case (int)TileID.RightOffset010:
                case (int)TileID.RightOffset011:
                case (int)TileID.RightOffset012:
                case (int)TileID.RightOffset013:
                case (int)TileID.RightOffset014:
                case (int)TileID.RightOffset:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Offset/Right Offset Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.RightOffset;
                    break;

                // Bottom Offset
                case (int)TileID.BottomOffset002:
                case (int)TileID.BottomOffset003:
                case (int)TileID.BottomOffset004:
                case (int)TileID.BottomOffset005:
                case (int)TileID.BottomOffset006:
                case (int)TileID.BottomOffset007:
                case (int)TileID.BottomOffset008:
                case (int)TileID.BottomOffset009:
                case (int)TileID.BottomOffset010:
                case (int)TileID.BottomOffset011:
                case (int)TileID.BottomOffset012:
                case (int)TileID.BottomOffset013:
                case (int)TileID.BottomOffset014:
                case (int)TileID.BottomOffset:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Offset/Bottom Offset Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.BottomOffset;
                    break;

                // Horizontal Diagonal Corners
                //case (int)TileID.HorizontalDiagonalCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Horizontal Diagonal Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.HorizontalDiagonalCorners;
                //break;

                // Vertical Diagonal Corners
                //case (int)TileID.VerticalDiagonalCorners:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Vertical Diagonal Corners Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.VerticalDiagonalCorners;
                //break;

                // Vertical Direction Offset
                case (int)TileID.VerticalDirection002:
                case (int)TileID.VerticalDirection003:
                case (int)TileID.VerticalDirection004:
                case (int)TileID.VerticalDirection005:
                case (int)TileID.VerticalDirection006:
                case (int)TileID.VerticalDirection007:
                case (int)TileID.VerticalDirection008:
                case (int)TileID.VerticalDirection009:
                case (int)TileID.VerticalDirection010:
                case (int)TileID.VerticalDirection011:
                case (int)TileID.VerticalDirection012:
                case (int)TileID.VerticalDirection013:
                case (int)TileID.VerticalDirection014:
                case (int)TileID.VerticalDirection015:
                case (int)TileID.VerticalDirection016:
                case (int)TileID.VerticalDirection:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Vertical Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.VerticalDirection;
                    break;

                // Vertical Direction Offset
                case (int)TileID.HorizontalDirection002:
                case (int)TileID.HorizontalDirection003:
                case (int)TileID.HorizontalDirection004:
                case (int)TileID.HorizontalDirection005:
                case (int)TileID.HorizontalDirection006:
                case (int)TileID.HorizontalDirection007:
                case (int)TileID.HorizontalDirection008:
                case (int)TileID.HorizontalDirection009:
                case (int)TileID.HorizontalDirection010:
                case (int)TileID.HorizontalDirection011:
                case (int)TileID.HorizontalDirection012:
                case (int)TileID.HorizontalDirection013:
                case (int)TileID.HorizontalDirection014:
                case (int)TileID.HorizontalDirection015:
                case (int)TileID.HorizontalDirection016:
                case (int)TileID.HorizontalDirection:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Horizontal Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.HorizontalDirection;
                    break;

                // Alone Offset
                //case (int)TileID.AloneOffset:
                //newTileGameObject = MonoBehaviour.Instantiate(
                //    Resources.Load("Prefabs/Development/Tiles/Grass/Offset/Alone Offset Grass Tile", typeof(GameObject))
                //) as GameObject;

                //tileID = TileID.AloneOffset;
                //break;

                // Default
                default:
                    newTileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Alone Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tileID = TileID.Alone;

                    break;
                }

                if (newTileGameObject != null)
                {
                    TileBehaviour newTileBehaviour = newTileGameObject.GetComponent <TileBehaviour>();
                    newTileBehaviour.id = tileID;

                    Tile newTile = grassTileBehaviour.GetTile();
                    newTile.SetID(tileID);

                    newTileBehaviour.SetTile(newTile);
                    newTileGameObject.transform.position = newTile.GetPosition();
                    newTileGameObject.transform.SetParent(tiles);

                    int x = Mathf.RoundToInt(newTile.GetPosition().x);
                    int z = Mathf.RoundToInt(newTile.GetPosition().z);

                    Tiles[x][z] = newTileGameObject;

                    MonoBehaviour.Destroy(grassTile);
                }
            }

            // Clear out the grass tiles list
            this.grassTiles.Clear();

            // Set finished flag to true
            this.finished = true;
        }
    }
    /**
     * <summary>
     * Generate Map
     * </summary>
     *
     * <returns>
     *  IEnumerator null
     * </returns>
     */
    public IEnumerator GenerateMap()
    {
        Time.timeScale = 2f;
        GameObject tiles = GameObject.Find("Tiles");

        // Clean before generate a new map
        this.Clear();

        //TileType[,] mapTiles = new TileType[,] { { TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, }, { TileType.Water, TileType.Water, TileType.Grass, TileType.Grass, TileType.Water, }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water, }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Water, TileType.Water, }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water, }, { TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, }, };
        TileType[,] mapTiles = new TileType[, ] {
            { TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Grass, TileType.Water }, { TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, TileType.Water, },
        };
        //Debug.Log(mapTiles[5, 0]);

        for (int x = 0; x < mapTiles.GetLength(0); x++)
        {
            Tiles[x] = new Dictionary <int, GameObject>();

            for (int z = 0; z < mapTiles.GetLength(1); z++)
            {
                //Tile tile = MapBehaviour.Tiles[x][z];

                Tile tile = new Tile();
                tile.SetPosition(new Vector3(x, 0, z));

                TileType type = mapTiles[x, z];

                GameObject tileGameObject = null;

                if (type == TileType.Water)
                {
                    tileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Water/Center Water Tile", typeof(GameObject))
                        ) as GameObject;

                    tile.SetType(TileType.Water);
                }
                else
                {
                    tileGameObject = MonoBehaviour.Instantiate(
                        Resources.Load("Prefabs/Tiles/Grass/Center Grass Tile", typeof(GameObject))
                        ) as GameObject;

                    tile.SetType(TileType.Grass);
                    this.grassTiles.Add(tileGameObject);
                }

                if (tileGameObject != null)
                {
                    TileBehaviour newTileBehaviour = tileGameObject.GetComponent <TileBehaviour>();
                    newTileBehaviour.SetTile(tile);

                    tileGameObject.transform.position = tile.GetPosition();
                    tileGameObject.transform.SetParent(tiles.transform);

                    Tiles[x][z] = tileGameObject;
                }

                yield return(null);
            }
            yield return(null);
        }

        // Set generated flag to true
        this.generated = true;

        this.SmoothGrassTiles();
        yield return(null);
    }