UNPKG

tsgammon-core

Version:

A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui

121 lines (120 loc) 5.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.cubeGameDispatcher = exports.setCBStateListener = exports.concatCBListeners = void 0; const CubeGameState_1 = require("./CubeGameState"); const concat_1 = require("./utils/concat"); function concatCBListeners(base, ...listeners) { return listeners.reduce((prev, cur) => { return { onCubeGameStarted: (0, concat_1.concat0)(prev === null || prev === void 0 ? void 0 : prev.onCubeGameStarted, cur === null || cur === void 0 ? void 0 : cur.onCubeGameStarted), onAwaitCubeAction: (0, concat_1.concat1)(prev === null || prev === void 0 ? void 0 : prev.onAwaitCubeAction, cur === null || cur === void 0 ? void 0 : cur.onAwaitCubeAction), onCubeActionStarted: (0, concat_1.concat1)(prev === null || prev === void 0 ? void 0 : prev.onCubeActionStarted, cur === null || cur === void 0 ? void 0 : cur.onCubeActionStarted), onAwaitCheckerPlay: (0, concat_1.concat1)(prev === null || prev === void 0 ? void 0 : prev.onAwaitCheckerPlay, cur === null || cur === void 0 ? void 0 : cur.onAwaitCheckerPlay), onDoubled: (0, concat_1.concat2)(prev === null || prev === void 0 ? void 0 : prev.onDoubled, cur === null || cur === void 0 ? void 0 : cur.onDoubled), onDoubleAccepted: (0, concat_1.concat2)(prev === null || prev === void 0 ? void 0 : prev.onDoubleAccepted, cur === null || cur === void 0 ? void 0 : cur.onDoubleAccepted), onCubeActionSkipped: (0, concat_1.concat1)(prev === null || prev === void 0 ? void 0 : prev.onCubeActionSkipped, cur === null || cur === void 0 ? void 0 : cur.onCubeActionSkipped), onEndOfCubeGame: (0, concat_1.concat1)(prev === null || prev === void 0 ? void 0 : prev.onEndOfCubeGame, cur === null || cur === void 0 ? void 0 : cur.onEndOfCubeGame), }; }, base); } exports.concatCBListeners = concatCBListeners; function setCBStateListener(defaultState, setCBState) { return { onCubeGameStarted: () => setCBState(defaultState), onAwaitCubeAction: () => { // }, onCubeActionStarted: setCBState, onAwaitCheckerPlay: setCBState, onDoubled: setCBState, onDoubleAccepted: setCBState, onPassed: () => { // }, onCubeActionSkipped: setCBState, onEndOfCubeGame: setCBState, }; } exports.setCBStateListener = setCBStateListener; exports.cubeGameDispatcher = { doStartCubeGame, doDouble, doSkipCubeAction, doTake, doPass, doStartCubeAction, doStartOpeningCheckerPlay, doStartCheckerPlay, doEndOfCubeGame, }; function doStartCubeGame() { return (listeners) => { var _a; (_a = listeners.onCubeGameStarted) === null || _a === void 0 ? void 0 : _a.call(listeners); }; } function doDouble(state) { const nextState = state.doDouble(); return (listeners) => { var _a; (_a = listeners.onDoubled) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState, state); }; } function doSkipCubeAction(state) { const nextState = state.doSkipCubeAction(); return (listeners) => { var _a; (_a = listeners.onCubeActionSkipped) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState); }; } function doTake(state) { const nextState = state.doTake(); return (listeners) => { var _a; (_a = listeners.onDoubleAccepted) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState, state); }; } function doPass(state) { const nextState = state.doPass(); return (listeners) => { var _a, _b; (_a = listeners.onPassed) === null || _a === void 0 ? void 0 : _a.call(listeners, state, state.isDoubleFromRed); (_b = listeners.onEndOfCubeGame) === null || _b === void 0 ? void 0 : _b.call(listeners, nextState); }; } function doStartCubeAction(state, skipCubeAction) { const nextState = state.doStartCubeAction(skipCubeAction(state)); return (listeners) => { var _a, _b, _c; (_a = listeners.onAwaitCubeAction) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState); if (nextState.tag === 'CBAction') { (_b = listeners.onCubeActionStarted) === null || _b === void 0 ? void 0 : _b.call(listeners, nextState); } else { (_c = listeners.onCubeActionSkipped) === null || _c === void 0 ? void 0 : _c.call(listeners, nextState); } }; } function doStartOpeningCheckerPlay(state, isRed) { const nextState = isRed ? state.doStartCheckerPlayRed() : state.doStartCheckerPlayWhite(); return (listeners) => { var _a; (_a = listeners.onAwaitCheckerPlay) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState); }; } function doStartCheckerPlay(state) { const nextState = state.doStartCheckerPlay(); return (listeners) => { var _a; (_a = listeners.onAwaitCheckerPlay) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState); }; } function doEndOfCubeGame(state, sgResult, eogStatus) { const nextState = (0, CubeGameState_1.resultToCBEoG)(state.cubeState, sgResult, eogStatus); return (listeners) => { var _a; (_a = listeners.onEndOfCubeGame) === null || _a === void 0 ? void 0 : _a.call(listeners, nextState); }; }