예제 #1
0
        private async Task InitGridAndShapeElementAsync()
        {
            var blockItemsData = _startGameData.NewGame
                ? Option <GameStateModel> .None
                : (await _gameStateModule.LoadLevelState()
                   .ThrowIfErrorAsync("Cannot load level data")).ToOption();

            var gridData = blockItemsData.Cata(
                v => _blockItemsPoolModule.GetBlockItems(v.GridBlocks).ToSome(),
                () => Option <BlockItem[]> .None);

            var shapeBlocksData = blockItemsData.Cata(
                v => _blockItemsPoolModule.GetBlockItems(v.ShapeBlocks).ToSome(),
                () => Option <BlockItem[]> .None);

            _gameGrid = new GameGrid(_playFieldAreaBounds, gridData, _blockItemsPoolModule);
            var inputReceiver = InputReceiver.Create();

            _shapeElement = ShapeElement.Create(inputReceiver, _gameGrid, _blockItemsPoolModule, shapeBlocksData);
        }
예제 #2
0
        public static BlockItem[] Create(ShapeType type, IBlockItemsPoolModule blockItemsPoolModule)
        {
            if (type == ShapeType.Combined)
            {
                type = Random.Range(0, 2) == 0 ? ShapeType.TType : ShapeType.Corner;
            }

            var itemsQuantity = type == ShapeType.Corner ? 5 : 4;
            var blocks        = blockItemsPoolModule.GetBlockItems(itemsQuantity, true);

            if (type == ShapeType.TType)
            {
                SetItemsTTypeItemsPosition(blocks);
            }
            else
            {
                SetItemsCornerItemsPosition(blocks);
            }

            return(blocks);
        }