AgentVerse's picture
first commit
670a607
// 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;