Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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);
                            }
                        }
                    }
                }
            }
        }