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); }
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); }