// --------------------------------------------------------------------------------------------- public void reset() { foreach (Transform child in _voxelChunkContainer) { GameObject.Destroy(child.gameObject); } _aVoxelChunks.Clear(); _iCount = 0; // create the full chunk voxel VoxelUtils.VoxelVector3Int pos = VoxelUtils.convertVector3ToVoxelVector3Int(Vector3.zero); VoxelUtils.VoxelChunk vs = createVoxelChunk(pos, VoxelUtils.MAX_CHUNK_UNITS, VoxelUtils.MAX_CHUNK_UNITS, VoxelUtils.MAX_CHUNK_UNITS); _aVoxelChunks.Add(vs); setVoxelChunkMesh(_aVoxelChunks [0]); }
// --------------------------------------------------------------------------------------------- // cut a hole! // --------------------------------------------------------------------------------------------- public bool subtractChunk(Vector3 v3Pos, Vector3 v3Size) { bool success = true; //float timer = Time.realtimeSinceStartup; VoxelUtils.VoxelVector3Int pos = VoxelUtils.convertVector3ToVoxelVector3Int(v3Pos); VoxelUtils.VoxelChunk vsCut = createCutVoxelChunk(pos, (int)v3Size.x, (int)v3Size.y, (int)v3Size.z); // does the new voxel intersect with any existing voxels? bool splittage = splitVoxels(vsCut); int loops = 0; while (splittage && loops < 1000) { splittage = splitVoxels(vsCut); loops++; } if (loops >= 1000) { Debug.LogWarning("looks like we got ourselves an endless loop here!"); success = false; } else { int i, len = _aVoxelChunks.Count; for (i = 0; i < len; ++i) { setVoxelChunkMesh(_aVoxelChunks [i]); } } //Debug.Log ("Time to create chunk(s): " + (Time.realtimeSinceStartup - timer).ToString ()); return(success); }