Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
 public Tile(TileType defaultBaseType)
 {
     _baseType = defaultBaseType;
 }
Ejemplo n.º 3
0
        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;
        }