/** * 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); }