GameStore.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. 'use strict';
  2. const AppDispatcher = require('../dispatcher/AppDispatcher');
  3. const EventEmitter = require('eventemitter2').EventEmitter2;
  4. const GameConstants = require('../constants/GameConstants');
  5. const Immutable = require('immutable');
  6. const {List, Map, OrderedMap, Set} = Immutable;
  7. const CHANGE_EVENT = 'change';
  8. var _gameOver = Map({
  9. status: false,
  10. type: null,
  11. winner: null
  12. });
  13. var _capturedPieces = OrderedMap([
  14. ['white', List()],
  15. ['black', List()]
  16. ]);
  17. var _moves = List();
  18. var _promotion = 'q';
  19. var _turn = 'w';
  20. var _fen = null;
  21. const GameStore = Object.assign({}, EventEmitter.prototype, {
  22. getState() {
  23. return {
  24. gameOver: _gameOver,
  25. promotion: _promotion,
  26. turn: _turn
  27. };
  28. },
  29. getCapturedPieces() {
  30. return _capturedPieces;
  31. },
  32. getMoves() {
  33. return _moves;
  34. },
  35. getFEN() {
  36. return _fen;
  37. }
  38. });
  39. function rematch() {
  40. _gameOver = _gameOver
  41. .set('status', false)
  42. .set('winner', null)
  43. .set('type', null);
  44. }
  45. function gameOver(options) {
  46. _gameOver = _gameOver
  47. .set('status', true)
  48. .set('winner', options.winner)
  49. .set('type', options.type);
  50. }
  51. AppDispatcher.register(payload => {
  52. var action = payload.action;
  53. switch (action.actionType) {
  54. case GameConstants.REMATCH:
  55. rematch();
  56. break;
  57. case GameConstants.GAME_OVER:
  58. gameOver(action.options);
  59. break;
  60. case GameConstants.CHANGE_PROMOTION:
  61. _promotion = action.promotion;
  62. break;
  63. default:
  64. return true;
  65. }
  66. GameStore.emit(CHANGE_EVENT);
  67. return true;
  68. });
  69. module.exports = GameStore;