// methods import Init from './Init.js' import Reset from './Reset.js'; import CreateChess from './chess/CreateChess.js'; import Fill from './Fill.js'; import BreakMatch3 from './BreakMatch3.js'; import PreTest from './PreTest.js'; import GetAllMatch from './match/GetAllMatch.js'; const GetValue = Phaser.Utils.Objects.GetValue; class Board { constructor(bejeweled, config) { var scene = bejeweled.scene; this.scene = scene; this.rexBoard = bejeweled.rexBoard; this.board = this.rexBoard.add.board(GetValue(config, 'board', undefined)); this.match = this.rexBoard.add.match(GetValue(config, 'match', undefined)); this.match.setBoard(this.board); this.initSymbolsMap = GetValue(config, 'initMap', undefined); // 2d array // configuration of chess this.chessTileZ = GetValue(config, 'chess.tileZ', 1); this.candidateSymbols = GetValue(config, 'chess.symbols', undefined); this.chessCallbackScope = GetValue(config, 'chess.scope', undefined); this.chessCreateCallback = GetValue(config, 'chess.create', undefined); this.chessMoveTo = GetValue(config, 'chess.moveTo', {}); this.chessMoveTo.occupiedTest = true; // Mask & layer this.rowMaskGameObject = undefined; this.rowMask = undefined; this.layer = undefined; if (GetValue(config, 'mask', false)) { this.resetBoardMask(); } if (GetValue(config, 'layer', false)) { this.enableBoardLayer(); } } shutdown() { this.match.destroy(); this.board.destroy(); if (this.rowMaskGameObject) { this.layer.setMask(); this.rowMaskGameObject.destroy(); this.rowMask.destroy(); } if (this.layer) { this.layer.destroy(); } this.board = undefined; this.match = undefined; this.initSymbolsMap = undefined; this.candidateSymbols = undefined; this.chessCallbackScope = undefined; this.chessCreateCallback = undefined; this.chessMoveTo = undefined; return this; } destroy() { this.shutdown(); return this; } setBoardWidth(width) { this.board.setBoardWidth(width); return this; } setBoardHeight(height) { this.board.setBoardHeight(height); return this; } setInitSymbolsMap(map) { this.initSymbolsMap = map; // 2d array return this; } enableBoardLayer() { if (!this.layer) { this.layer = this.scene.add.layer(); } return this; } resetBoardMask() { if (!this.rowMaskGameObject) { this.rowMaskGameObject = this.scene.make.graphics().setVisible(false); this.rowMask = this.rowMaskGameObject.createGeometryMask().setInvertAlpha(); this.enableBoardLayer(); this.layer.setMask(this.rowMask); } // Rectangle of upper rows var board = this.board; var grid = board.grid; var x = grid.x - (grid.width / 2); var y = grid.y - (grid.height / 2); var width = board.width * grid.width; var height = (board.height / 2) * grid.height; this.rowMaskGameObject.fillRect(x, y, width, height); return this; } worldXYToChess(worldX, worldY) { return this.board.worldXYToChess(worldX, worldY, this.chessTileZ); } tileXYToChess(tileX, tileY) { return this.board.tileXYZToChess(tileX, tileY, this.chessTileZ); } getNeighborChessAtAngle(chess, angle) { var direction = this.board.angleSnapToDirection(chess, angle); return this.getNeighborChessAtDirection(chess, direction); } getNeighborChessAtDirection(chess, direction) { var neighborTileXY = this.board.getNeighborTileXY(chess, direction); var neighborChess = (neighborTileXY) ? this.board.tileXYZToChess(neighborTileXY.x, neighborTileXY.y, this.chessTileZ) : null; return neighborChess; } } var methods = { init: Init, reset: Reset, createChess: CreateChess, fill: Fill, breakMatch3: BreakMatch3, preTest: PreTest, getAllMatch: GetAllMatch, } Object.assign( Board.prototype, methods ); export default Board;