Esempio n. 1
0
    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;
    }