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)); } } } } }
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; }
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(); }