internal void SetType(TileType baseType, float probabilityOffset) { if (_baseTypeAssigned) { return; } _baseType = baseType; _baseTypeAssigned = true; foreach (Neighbour neighbour in _neighbours) { float r = UnityEngine.Random.Range(0f, 1f); float probability = (neighbour.Type == NeighbourType.Edge ? _baseType.NeighbourEdgeProbability : _baseType.NeighbourCornerProbability) * probabilityOffset; if (r <= probability) { neighbour.Tile.SetType(_baseType, probabilityOffset * _baseType.NeighbourFallOff); } } }
public Tile(TileType defaultBaseType) { _baseType = defaultBaseType; }
internal static List<TerrainVertex> GenerateTileGeometry(Dictionary<string, Tile> tiles, int detailLevel, TileType defaultTileType) { var vectors = new List<Vector3>(); var indices = new List<int>(); Geometry.Icosahedron(vectors, indices); for (int i = 0; i < detailLevel; i++) { Geometry.Subdivide(vectors, indices, true); } var terrainVertices = new List<TerrainVertex>(); foreach (Vector3 v in vectors) { terrainVertices.Add(new TerrainVertex(v)); } // We need to opposite winding indices.Reverse(); // Build the tiles for (int i=0; i < indices.Count; i+=3) { Tile tile = new Tile(defaultTileType); tile.AddGeometry( indices[i], indices[i + 1], indices[i + 2] ); tiles.Add(tile.ID, tile); } return terrainVertices; }