public Mesh GetShapeMesh(BlockShapeData shapeData)
        {
            if (!_shapes.TryGetValue(shapeData.ShapeType, out var mesh))
            {
                var textureId = _shapeTextureProvider.GetTexture(shapeData);
                mesh = _meshBuilder.BuildMesh(shapeData.Sections, textureId);
                _shapes[shapeData.ShapeType] = mesh;
            }

            return(mesh);
        }
        public void JoinBlock()
        {
            if (_blockStorage.Blocks.Count <= 0)
            {
                return;
            }

            var block   = _blockStorage.Blocks[0];
            var texture = _shapeTextureProvider.GetTexture(block.Shape);

            foreach (var pos in _shapeUtil.IterateBlockSections(block))
            {
                _levelModel.AddBlock(pos, texture);
            }

            _audioController.ReportEvent(EAudioEventType.BlockJoined);

            _blockStorage.RemoveBlock(block);
        }