示例#1
0
        public void DefaultQueueSortTest()
        {
            var geometryRequestsQueue = new VoxelGeometryChunkRequestQueue();
            var playerPosition        = new Vector3(0, 0, 0);
            var pullCount             = 4;

            geometryRequestsQueue.Push(new VoxelGeometryVolumeRequest
            {
                chunkPosition = new Vector3Int(23, 32, 32)
            });

            geometryRequestsQueue.Push(new VoxelGeometryVolumeRequest
            {
                chunkPosition = new Vector3Int(16, 16, 16)
            });

            geometryRequestsQueue.Push(new VoxelGeometryVolumeRequest
            {
                chunkPosition = new Vector3Int(1, 1, 1)
            });

            var pull = geometryRequestsQueue.Pull(pullCount, playerPosition);

            foreach (var re in pull)
            {
                Debug.Log(re.chunkPosition);
            }
        }
示例#2
0
        private void OnHitted(TestVolumeHit hit)
        {
            var s = hit.startHitPosition;
            var e = hit.endHitPosition;

            var builderRequest = new VoxelBuilderRequest
            {
                startBuildPoint = hit.startHitPosition,
                endBuildPoint   = hit.endHitPosition,
                chunkSize       = _chunkSize,
                voxel           = new VoxelEntity(),
                pattern         = VoxelBuilderPatternType.Line,
                model           = hit.model
            };

            var response = _voxelBuilderController.Execute(builderRequest);

            foreach (var chunkIndex in response.updatedChunkIds)
            {
                var geometryRequest =
                    TestGeometryRequestUtility.CreateVolumeRequest(chunkIndex, _chunkSize, hit.model, new Vector3Int());
                _chunkRequestQueue.Push(geometryRequest);
            }

            ExecutePhysics(s, _chunkSize, hit.model);
        }
示例#3
0
文件: MapView.cs 项目: imkoi/voxcake
    private void Awake()
    {
        _cameraTransform = _camera.transform;

        _voxelGeometryController    = new VoxelGeometryController(8, GetMaxVerticesCount());
        _voxelBuilderController     = new VoxelBuilderController();
        _voxelPhysicsController     = new VoxelPhysicsController();
        _fallingConstructionFactory = new FallingConstructionFactory(_fallingChunksTransform, 32);

        _camera.Hitted += OnHitted;

        var magicaVoxelReader = new MagicaReader();
        var path       = GetPathInStreamingAssets(_volumePath);
        var magicaFile = magicaVoxelReader.LoadFile(path);

        _voxelModel = magicaFile.ToModel(_volumeSize);

        var chunkSize   = _chunkSize;
        var chunksCount = _chunkDrawSize.x * _chunkDrawSize.y * _chunkDrawSize.z;

        Debug.Log($"chunksCount = {chunksCount}");

        for (var i = 0; i < chunksCount; i++)
        {
            var chunkPositionNormalized = VoxelUtility.GetVoxelPosition(i, _chunkDrawSize);
            var chunkIndex      = VoxelChunkUtility.GetIndex(chunkPositionNormalized);
            var chunkPosition   = chunkPositionNormalized * chunkSize;
            var chunkGameObject = new GameObject();
            var chunkView       = chunkGameObject.AddComponent <VolumeChunk>();

            chunkGameObject.name = $"VolumeChunk[{i}]";

            chunkView.SetPosition(new Vector3(chunkPosition.x, chunkPosition.y, chunkPosition.z));
            chunkView.SetParent(_volumeChunksTransform);
            chunkView.SetMaterial(_chunkMaterial);
            chunkView.SetLayer(VolumeChunk.VolumeLayer);

            _chunks[chunkIndex] = chunkView;

            var geometryRequest = GetGeometryRequestById(chunkIndex);
            _chunkRequestQueue.Push(geometryRequest);
        }

        _chunkRenderer = new VoxelChunkRenderer(_cameraTransform, _chunks, _volumeSize, _chunkSize, _chunkDrawSize);
        _chunkRenderer.ChunkUpdated += OnChunkUpdated;
    }