diff --git a/components/board/board.component.js b/components/board/board.component.js index e7dc273..286c549 100644 --- a/components/board/board.component.js +++ b/components/board/board.component.js @@ -10,16 +10,16 @@ import Message from './message.component'; import Muncher from './muncher.component'; import Troggles from './troggles.component'; -import BoardLogic from '../../logic/board.logic'; +import BoardCtrl from '../../controllers/board.controller'; let listener; export class Board extends Component { componentDidMount() { - BoardLogic.setDispatch(this.props.dispatch); - BoardLogic.nextLevel(); + BoardCtrl.setDispatch(this.props.dispatch); + BoardCtrl.nextLevel(); - listener = BoardLogic.keyListener.bind(BoardLogic); + listener = BoardCtrl.keyListener.bind(BoardCtrl); window.addEventListener('keydown', listener); }; diff --git a/components/board/grid.component.js b/components/board/grid.component.js index 5aa1010..21dba36 100644 --- a/components/board/grid.component.js +++ b/components/board/grid.component.js @@ -4,14 +4,9 @@ import { Component } from 'react'; import { connect } from 'react-redux'; import GridCell from './grid-cell.component'; -import GridActions from '../../actions/board/grid.actions'; import { SETTINGS } from '../../App'; export class Grid extends Component { - componentDidMount() { - this.props.dispatch(GridActions.update()); - }; - render() { const { values } = this.props.values; const cells = []; diff --git a/components/board/troggles.component.js b/components/board/troggles.component.js index 91df776..184c32a 100644 --- a/components/board/troggles.component.js +++ b/components/board/troggles.component.js @@ -4,11 +4,11 @@ import { Component } from 'react'; import { connect } from 'react-redux'; import Troggle from './troggle.component'; -import TroggleLogic from '../../logic/troggle.logic.js'; +import TroggleCtrl from '../../controllers/troggle.controller.js'; export class Troggles extends Component { componentWillUnmount() { - TroggleLogic.clearTimers(); + TroggleCtrl.clearTimers(); }; render() { diff --git a/controllers/board.controller.js b/controllers/board.controller.js new file mode 100644 index 0000000..12a1659 --- /dev/null +++ b/controllers/board.controller.js @@ -0,0 +1,66 @@ +import { SETTINGS } from '../App.js'; + +import * as ScorebarActions from '../actions/board/scorebar.actions'; +import * as MessageActions from '../actions/board/message.actions'; + +import TroggleCtrl from './troggle.controller'; +import MessageCtrl from './message.controller'; +import MuncherCtrl from './muncher.controller'; +import GridCtrl from './grid.controller'; + +const level = 0; +let dispatch; + +const BoardCtrl = { + setDispatch: (d) => { + dispatch = d; + GridCtrl.setDispatch(d); + MuncherCtrl.setDispatch(d); + }, + + munch() { + const index = MuncherCtrl.getY() * SETTINGS.GRID_WIDTH + MuncherCtrl.getX(); + + if (GridCtrl.getValues()[index].valid) { + GridCtrl.hideValue(index); + + if (GridCtrl.isCompleted() === true) { + dispatch(MessageActions.exclaim()); + } + } + else { + dispatch(MessageActions.show(`Uh oh - ${GridCtrl.getValues()[index].value} is not a match.`)); + } + }, + + keyListener(e) { + if (e.keyCode === 32 && GridCtrl.isCompleted() === true) { + this.nextLevel(); + dispatch(MessageActions.hide()); + } + else if (e.keyCode === 32 && MessageCtrl.isShowing() === true) { + dispatch(MessageActions.hide()); + } + else if (e.keyCode === 32 && MessageCtrl.isShowing() === false) { + this.munch(); + } + else if (MessageCtrl.isShowing() === false) { + MuncherCtrl.move(e); + } + }, + + nextLevel() { + GridCtrl.generateValues(level); + // TroggleCtrl.clearAll(this.props.dispatch); + // TroggleCtrl.createTroggles(this.props.dispatch); + }, + + // if (troggles[i].x === muncher.x && troggles[i].y === muncher.y) { + // this.props.dispatch(MessageActions.show("You've been eaten by a troggle!")); + // this.props.dispatch(ScorebarActions.munchFailed()); + // TroggleCtrl.frozen = true; + // ReactDOM.findDOMNode(this.refs.message).focus(); + // } +}; + +export default BoardCtrl; diff --git a/logic/grid.logic.js b/controllers/grid.controller.js similarity index 64% rename from logic/grid.logic.js rename to controllers/grid.controller.js index ac2939e..c5b7b0e 100644 --- a/logic/grid.logic.js +++ b/controllers/grid.controller.js @@ -1,21 +1,21 @@ import GridActions from '../actions/board/grid.actions'; -import ValuesLogic from './values.logic'; +import ValuesCtrl from './values.controller'; import { SETTINGS } from '../App'; let values; let dispatch; -const GridLogic = { +const GridCtrl = { setDispatch: d => dispatch = d, getValues: () => values, generateValues: (level) => { - values = ValuesLogic.generate(SETTINGS.GRID_WIDTH * SETTINGS.GRID_HEIGHT, level); + values = ValuesCtrl.generate(SETTINGS.GRID_WIDTH * SETTINGS.GRID_HEIGHT, level); dispatch(GridActions.update()); }, isCompleted: (level) => { - return ValuesLogic.checkComplete(values, level) + return ValuesCtrl.checkComplete(values, level) }, hideValue: (index) => { @@ -24,4 +24,4 @@ const GridLogic = { } }; -export default GridLogic; +export default GridCtrl; diff --git a/logic/message.logic.js b/controllers/message.controller.js similarity index 67% rename from logic/message.logic.js rename to controllers/message.controller.js index 409b962..35d7db5 100644 --- a/logic/message.logic.js +++ b/controllers/message.controller.js @@ -1,9 +1,9 @@ let show = false; -const MessageLogic = { +const MessageCtrl = { hide: () => show = false, show: () => show = true, isShowing: () => show }; -export default MessageLogic; +export default MessageCtrl; diff --git a/logic/muncher.logic.js b/controllers/muncher.controller.js similarity index 95% rename from logic/muncher.logic.js rename to controllers/muncher.controller.js index a38fd9d..dde9342 100644 --- a/logic/muncher.logic.js +++ b/controllers/muncher.controller.js @@ -5,7 +5,7 @@ let x = 0; let y = 0; let dispatch; -const MuncherLogic = { +const MuncherCtrl = { getX: () => x, getY: () => y, setDispatch: d => dispatch = d, @@ -43,4 +43,4 @@ const MuncherLogic = { } }; -export default MuncherLogic; +export default MuncherCtrl; diff --git a/logic/troggle.logic.js b/controllers/troggle.controller.js similarity index 98% rename from logic/troggle.logic.js rename to controllers/troggle.controller.js index 1fe951c..57221de 100644 --- a/logic/troggle.logic.js +++ b/controllers/troggle.controller.js @@ -5,7 +5,7 @@ import * as TroggleActions from '../actions/board/troggle.actions'; const troggleMoveTimers = []; const troggleCreateTimers = []; -const TroggleLogic = { +const TroggleCtrl = { frozen: false, clearAll(dispatch) { @@ -117,4 +117,4 @@ const TroggleLogic = { } }; -export default TroggleLogic; +export default TroggleCtrl; diff --git a/logic/values.logic.js b/controllers/values.controller.js similarity index 91% rename from logic/values.logic.js rename to controllers/values.controller.js index cfc6054..e7c29db 100644 --- a/logic/values.logic.js +++ b/controllers/values.controller.js @@ -1,10 +1,8 @@ -import { dispatch } from 'redux'; - const validate = function(value, level) { return ((value || -1) % (level + 2) === 0); }; -const ValuesLogic = { +const ValuesCtrl = { // Anagrams, multiples, equality generate(n, level) { const values = []; @@ -41,4 +39,4 @@ const ValuesLogic = { } }; -export default ValuesLogic; +export default ValuesCtrl; diff --git a/logic/board.logic.js b/logic/board.logic.js deleted file mode 100644 index 7f21b6d..0000000 --- a/logic/board.logic.js +++ /dev/null @@ -1,67 +0,0 @@ -import { SETTINGS } from '../App.js'; - -import * as ScorebarActions from '../actions/board/scorebar.actions'; -import * as MessageActions from '../actions/board/message.actions'; - -import TroggleLogic from './troggle.logic'; -import MessageLogic from './message.logic'; -import MuncherLogic from './muncher.logic'; -import GridLogic from './grid.logic'; - -const level = 0; -let dispatch; - -const BoardLogic = { - setDispatch: (d) => { - dispatch: d, - GridLogic.setDispatch(d); - MuncherLogic.setDispatch(d); - }, - - munch() { - const index = MuncherLogic.getY() * SETTINGS.GRID_WIDTH + MuncherLogic.getX(); - - if (GridLogic.getValues()[index].valid) { - GridLogic.hideValue(index); - - if (GridLogic.isCompleted() === true) { - dispatch(MessageActions.exclaim()); - } - } - else { - const msg = Values.getError(values[index].value, level); - dispatch(MessageActions.show(msg)); - } - }, - - keyListener(e) { - if (e.keyCode === 32 && GridLogic.isCompleted() === true) { - this.nextLevel(); - dispatch(MessageActions.hide()); - } - else if (e.keyCode === 32 && MessageLogic.isShowing() === true) { - dispatch(MessageActions.hide()); - } - else if (e.keyCode === 32 && MessageLogic.isShowing() === false) { - this.munch(); - } - else if (MessageLogic.isShowing() === false) { - MuncherLogic.move(e); - } - }, - - nextLevel() { - GridLogic.generateValues(level); - // TroggleLogic.clearAll(this.props.dispatch); - // TroggleLogic.createTroggles(this.props.dispatch); - }, - - // if (troggles[i].x === muncher.x && troggles[i].y === muncher.y) { - // this.props.dispatch(MessageActions.show("You've been eaten by a troggle!")); - // this.props.dispatch(ScorebarActions.munchFailed()); - // TroggleLogic.frozen = true; - // ReactDOM.findDOMNode(this.refs.message).focus(); - // } -}; - -export default BoardLogic; diff --git a/reducers/board/board.reducer.js b/reducers/board/board.reducer.js index c31182b..9aad4fe 100644 --- a/reducers/board/board.reducer.js +++ b/reducers/board/board.reducer.js @@ -1,7 +1,7 @@ const Immutable = require('immutable'); import * as BoardActions from '../../actions/board/board.actions'; -import ValuesLogic from '../../logic/values.logic.js'; +import ValuesController from '../../controllers/values.controller.js'; import { SETTINGS } from '../../App'; const initial = { @@ -31,8 +31,8 @@ const reducer = (state = initial, action) => { const lvl = state.level + 1; return Immutable.Map(state) .set('level', lvl) - .set('title', ValuesLogic.getDescription(lvl)) - .set('values', ValuesLogic.generate(count, lvl)) + .set('title', ValuesController.getDescription(lvl)) + .set('values', ValuesController.generate(count, lvl)) .toObject(); } diff --git a/reducers/board/grid.reducer.js b/reducers/board/grid.reducer.js index 7f1f37d..c32dd10 100644 --- a/reducers/board/grid.reducer.js +++ b/reducers/board/grid.reducer.js @@ -1,7 +1,7 @@ const Immutable = require('immutable'); import * as GridActions from '../../actions/board/grid.actions'; -import GridLogic from '../../logic/grid.logic.js'; +import GridCtrl from '../../controllers/grid.controller.js'; const initial = []; @@ -11,7 +11,7 @@ const reducer = (state = initial, action) => { } if (action.action === GridActions.UPDATE) { - return Immutable.List(GridLogic.getValues()).toArray(); + return Immutable.List(GridCtrl.getValues()).toArray(); } return state; diff --git a/reducers/board/message.reducer.js b/reducers/board/message.reducer.js index a73f8fe..fc9328c 100644 --- a/reducers/board/message.reducer.js +++ b/reducers/board/message.reducer.js @@ -1,7 +1,7 @@ const Immutable = require('immutable'); import * as MessageActions from '../../actions/board/message.actions'; -import MessageLogic from '../../logic/message.logic'; +import MessageCtrl from '../../controllers/message.controller'; const exclamations = [ 'Congratulations!', @@ -23,7 +23,7 @@ const reducer = (state = initial, action) => { switch (action.action) { case MessageActions.EXCLAIM: - MessageLogic.show(); + MessageCtrl.show(); const msg = exclamations[Math.floor(Math.random() * exclamations.length)]; return Immutable.Map(state) .set('hidden', false) @@ -31,14 +31,14 @@ const reducer = (state = initial, action) => { .toObject(); case MessageActions.SHOW: - MessageLogic.show(); + MessageCtrl.show(); return Immutable.Map(state) .set('hidden', false) .set('message', action.message) .toObject(); case MessageActions.HIDE: - MessageLogic.hide(); + MessageCtrl.hide(); return Immutable.Map(state) .set('hidden', true) .toObject(); diff --git a/reducers/board/muncher.reducer.js b/reducers/board/muncher.reducer.js index a4d4bf1..e55a1c6 100644 --- a/reducers/board/muncher.reducer.js +++ b/reducers/board/muncher.reducer.js @@ -1,6 +1,6 @@ const Immutable = require('immutable'); import * as MuncherActions from '../../actions/board/muncher.actions'; -import MuncherLogic from '../../logic/muncher.logic'; +import MuncherCtrl from '../../controllers/muncher.controller'; import { SETTINGS } from '../../App'; const initial = { x: 0, y: 0, frozen: false }; @@ -12,8 +12,8 @@ const reducer = (state = initial, action) => { if (action.action === MuncherActions.UPDATE) { return Immutable.Map(state) - .set('x', MuncherLogic.getX()) - .set('y', MuncherLogic.getY()) + .set('x', MuncherCtrl.getX()) + .set('y', MuncherCtrl.getY()) .set('frozen', false) .toObject(); } diff --git a/reducers/board/troggle.reducer.js b/reducers/board/troggle.reducer.js index 1d1a890..cc1ec85 100644 --- a/reducers/board/troggle.reducer.js +++ b/reducers/board/troggle.reducer.js @@ -1,7 +1,7 @@ const Immutable = require('immutable'); import * as TroggleActions from '../../actions/board/troggle.actions'; -import TroggleLogic from '../../logic/troggle.logic.js'; +import TroggleCtrl from '../../controllers/troggle.controller'; const initial = []; @@ -13,15 +13,15 @@ const reducer = (state = initial, action) => { switch (action.action) { case TroggleActions.MOVE: const t = state[action.index]; - const coords1 = TroggleLogic.getMoveCoords(t.x, t.y, t.mx, t.my); - + const coords1 = TroggleCtrl.getMoveCoords(t.x, t.y, t.mx, t.my); + return Immutable.fromJS(state) .setIn([action.index, 'x'], coords1.x) .setIn([action.index, 'y'], coords1.y) .toJS(); case TroggleActions.CREATE: - const coords2 = TroggleLogic.getStartingCoords(); + const coords2 = TroggleCtrl.getStartingCoords(); return Immutable.List(state).set(action.index, { x: coords2.x, y: coords2.y }).toArray(); case TroggleActions.CLEAR_ALL: