From 7076b2136d932b2289b25e5fc3229d2f95fd270d Mon Sep 17 00:00:00 2001 From: Patryk Hes Date: Mon, 14 Dec 2015 10:34:52 +0100 Subject: [PATCH] chore(app): created a class Game for top-level game routines --- app.js | 42 +++------------------------------------ js/game.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 39 deletions(-) create mode 100644 js/game.js diff --git a/app.js b/app.js index 88a0181..a5fe053 100644 --- a/app.js +++ b/app.js @@ -1,43 +1,7 @@ /*global window:false*/ import 'normalize.css'; -import d3 from 'd3'; -import * as tile from './js/tile'; -import * as level from './js/level'; -import * as board from './js/board'; +import * as game from './js/game'; -const demoLevel = new level.Level(level.levels[0]); - -const gameBoard = new board.Board(demoLevel, d3.select('svg'), d3.select('#helper')); -gameBoard.reset(); - -// for debugging purposes -window.gameBoard = gameBoard; -window.tile = tile; - -gameBoard.setAnimationControls(d3.select('#animation-controls')); - -d3.select('#select-level').on('click', () => { - d3.select('#level-selector').remove(); - gameBoard.stop(); - - const levelSelector = d3.select('body').append('div') - .attr('id', 'level-selector') - .attr('class', 'item-selector'); - - levelSelector.append('ul').attr('class', 'level-item').selectAll('li') - .data(level.levels) - .enter() - .append('li') - .attr('class', 'level-item') - .text((d) => `[${d.group}] ${d.i}. ${d.name}`) - .on('click', (d) => { - gameBoard.level = new level.Level(d); - gameBoard.reset(); - levelSelector.remove(); - }); -}); - -d3.select('#clip-board-a').on('click', function () { - gameBoard.clipBoard(this); -}); +const quantumGame = new game.Game(); +quantumGame.htmlReady(); diff --git a/js/game.js b/js/game.js new file mode 100644 index 0000000..b51fd14 --- /dev/null +++ b/js/game.js @@ -0,0 +1,58 @@ +/*global window:false*/ +import d3 from 'd3'; + +import * as tile from './tile'; +import * as level from './level'; +import * as board from './board'; + +export class Game { + constructor() { + this.gameBoard = null; + } + + htmlReady() { + this.createGameBoard(); + this.bindMenuEvents(); + + // for debugging purposes + window.gameBoard = this.gameBoard; + window.tile = tile; + } + + createGameBoard() { + const demoLevel = new level.Level(level.levels[0]); + this.gameBoard = new board.Board( + demoLevel, + d3.select('svg'), + d3.select('#helper')); + this.gameBoard.reset(); + this.gameBoard.setAnimationControls(d3.select('#animation-controls')); + } + + bindMenuEvents() { + d3.select('#select-level').on('click', () => { + d3.select('#level-selector').remove(); + this.gameBoard.stop(); + + const levelSelector = d3.select('body').append('div') + .attr('id', 'level-selector') + .attr('class', 'item-selector'); + + levelSelector.append('ul').attr('class', 'level-item').selectAll('li') + .data(level.levels) + .enter() + .append('li') + .attr('class', 'level-item') + .text((d) => `[${d.group}] ${d.i}. ${d.name}`) + .on('click', (d) => { + this.gameBoard.level = new level.Level(d); + this.gameBoard.reset(); + levelSelector.remove(); + }); + }); + + d3.select('#clip-board-a').on('click', function () { + this.gameBoard.clipBoard(this); + }); + } +}