예제 #1
0
    public BuilderBase(Vec2i baseChunk, Vec2i chunkSize, HeightFunction heightFunc, ChunkBase2[,] chunkBases)
    {
        BaseChunk = baseChunk;
        ChunkSize = chunkSize;
        BaseTile  = BaseChunk * World.ChunkSize;
        TileSize  = ChunkSize * World.ChunkSize;

        Subworlds = new List <Subworld>();

        ChunkVoxels = new ChunkVoxelData[ChunkSize.x, ChunkSize.z];
        HeightMaps  = new float[ChunkSize.x, ChunkSize.z][, ];
        TileMaps    = new int[ChunkSize.x, ChunkSize.z][, ];
        ObjectMaps  = new List <WorldObjectData> [ChunkSize.x, ChunkSize.z];
        ChunkBases  = chunkBases;

        for (int x = 0; x < ChunkSize.x; x++)
        {
            for (int z = 0; z < ChunkSize.z; z++)
            {
                HeightMaps[x, z] = new float[World.ChunkSize + 1, World.ChunkSize + 1];

                // ChunkBaseHeights[x, z] = baseHeight;
                TileMaps[x, z] = new int[World.ChunkSize, World.ChunkSize];


                ChunkVoxels[x, z] = new ChunkVoxelData();
            }
        }
        //if no height function is specified, we define the height to be 0
        if (heightFunc == null)
        {
            heightFunc = (float x, float y) => { return(0); }
        }
        ;

        for (int x = 0; x < ChunkSize.x; x++)
        {
            for (int z = 0; z < ChunkSize.z; z++)
            {
                float baseHeight = ChunkBases == null ? 0 : ChunkBases[x, z].Height;
                int   baseTile   = (ChunkBases == null || ChunkBases[x, z] == null) ? Tile.NULL.ID : Tile.GetFromBiome(ChunkBases[x, z].Biome).ID;

                for (int x_ = 0; x_ < World.ChunkSize; x_++)
                {
                    for (int z_ = 0; z_ < World.ChunkSize; z_++)
                    {
                        baseHeight = heightFunc((x + BaseChunk.x) * World.ChunkSize + x_, (z + BaseChunk.z) * World.ChunkSize + z_);

                        SetHeight(x * World.ChunkSize + x_, z * World.ChunkSize + z_, baseHeight);
                        //SetTile(x * World.ChunkSize + x_, z * World.ChunkSize + z_, Tile.FromID(baseTile));
                    }
                }
            }
        }
    }
예제 #2
0
 public SettlementBuilder2(HeightFunction heightFunc, SettlementShell shell) : base(shell.ChunkPosition, new Vec2i(1, 1) * shell.Type.GetSize(), heightFunc, shell.ChunkBases)
 {
     Shell = shell;
     Debug.Log(shell + "," + shell.LocationData);
     GenerationRandom = new GenerationRandom(0);
     TileSize         = shell.Type.GetSize() * World.ChunkSize;
     Middle           = new Vec2i(TileSize / 2, TileSize / 2);
     //Tiles = new Tile[TileSize, TileSize];
     //SettlementObjects = new WorldObjectData[TileSize, TileSize];
     Buildings = new List <Building>();
     //PathNodes = new List<Vec2i>();
     BuildingPlots  = new List <Recti>();
     SettlementType = shell.Type;
 }
예제 #3
0
    void Circle(HeightFunction hf)
    {
        MeshFilter meshFilter = gameObject.GetComponent <MeshFilter> ();
        Mesh       mesh       = meshFilter.mesh;

        Vector3[] baseVerticies = mesh.vertices;
        Vector3[] vertices      = new Vector3[baseVerticies.Length];

        float timez = Time.time / 100f;

        for (var i = 0; i < baseVerticies.Length; i++)
        {
            var vertex = baseVerticies[i];
            vertex.z    = -1 * hf(vertex);
            vertices[i] = vertex;
        }

        mesh.vertices = vertices;
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
    }