/// <summary> /// Create a chunck at a specified location. /// </summary> /// <param name="chunckLocation"></param> /// <returns></returns> private IVoxelMesh CreateChunck(VoxelLocation chunckLocation) { IVoxelMesh chunck = this._chunkBuilder.Build(); this._chunks[chunckLocation] = chunck; VoxelLocation max = new VoxelLocation(chunckLocation); VoxelLocation min = new VoxelLocation(chunckLocation); max.Add(1, 1, 1).Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth); min.Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth); if (min.X < this._min.X) this._min.X = min.X; if (min.Y < this._min.Y) this._min.Y = min.Y; if (min.Z < this._min.Z) this._min.Z = min.Z; if (max.X > this._max.X) this._max.X = max.X; if (max.Y > this._max.Y) this._max.Y = max.Y; if (max.Z > this._max.Z) this._max.Z = max.Z; return chunck; }
/// <summary> /// Get the chunck that contains the specified location. /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="z"></param> /// <returns></returns> private void DeleteChunckAt(int x, int y, int z) { VoxelLocation chunckLocation = this.ToChunckLocation(x, y, z); this._chunks.Remove(chunckLocation); VoxelLocation max = new VoxelLocation(chunckLocation); VoxelLocation min = new VoxelLocation(chunckLocation); max.Add(1, 1, 1).Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth); min.Mul(this.ChildWidth, this.ChildHeight, this.ChildDepth); if(min.X == this._min.X || min.Y == this._min.Y || min.Z == this._min.Z || max.X == this._max.X || max.Y == this._max.Y || max.Z == this._max.Z) { this.EvaluateSize(); } }