private void doBuildChunk(bool is_async) { for (int i = 0; i < transform.childCount; i++) { Destroy(transform.GetChild(i).gameObject); } if (_chunk == null || _chunk.voxels.Count == 0) { return; } var model = _chunk.CreateVoxelModel(VoxelCullMode.Culled); if (model != null) { var entities = new Dictionary <int, int>(); if (model.CalcFaceCountAsAllocate(ref entities) == 0) { return; } foreach (var it in entities) { var material = VoxelMaterialManager.GetInstance().GetMaterial(it.Key); if (material == null) { continue; } var controller = material.Userdata as ILiveBehaviour; if (controller == null) { continue; } var context = new ChunkDataContext(this, model, it.Value, is_async); controller.OnBuildChunk(context); } } }
private IEnumerator AddEnitiyByScreenPosWithCoroutine() { if (_isHitTesting) { yield break; } _isHitTesting = true; if (_block != null) { var material = VoxelMaterialManager.GetInstance().GetMaterial(_block.name); if (material != null) { _world.chunkManager.AddBlockByScreenPos(Input.mousePosition, _hitTestDistance, material); } } yield return(new WaitWhile(() => Input.GetMouseButton(1))); _isHitTesting = false; }
public void LoadChunk(ChunkPrimer chunk) { var x = chunk.position.x; var y = chunk.position.y; var z = chunk.position.z; using (var _dbCommandLoadBlocks = _dbConnection.CreateCommand()) { _dbCommandLoadBlocks.CommandText = queryLoadBlocks; _dbCommandLoadBlocks.Parameters.Add(new SqliteParameter("x", x)); _dbCommandLoadBlocks.Parameters.Add(new SqliteParameter("y", y)); _dbCommandLoadBlocks.Parameters.Add(new SqliteParameter("z", z)); using (var dbReader = _dbCommandLoadBlocks.ExecuteReader()) { if (dbReader.HasRows) { while (dbReader.Read()) { var xx = dbReader.GetByte(0); var yy = dbReader.GetByte(1); var zz = dbReader.GetByte(2); var ww = dbReader.GetByte(3); if (ww > 0) { chunk.voxels.Set(xx, yy, zz, VoxelMaterialManager.GetInstance().GetMaterial(ww)); } else { chunk.voxels.Set(xx, yy, zz, null); } } } } } }