UNPKG

tsgammon-core

Version:

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

88 lines (87 loc) 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setBGStateListener = exports.concatBGListeners = exports.asSGEventHandler = void 0; const concat_1 = require("./utils/concat"); /** * BGHandlerをSingleGameHandlerに変換する * @returns */ function asSGEventHandler(cbState, handlers) { return { onStartGame: () => { var _a; (_a = handlers.onStartGame) === null || _a === void 0 ? void 0 : _a.call(handlers); }, onCommit: (sgState) => { var _a; if (cbState.tag === 'CBInPlay') { (_a = handlers.onCommit) === null || _a === void 0 ? void 0 : _a.call(handlers, { cbState, sgState }); } }, onRoll: (sgState) => { var _a; if (cbState.tag === 'CBToRoll' || cbState.tag === 'CBAction') { (_a = handlers.onRoll) === null || _a === void 0 ? void 0 : _a.call(handlers, { cbState, sgState }); } }, onRollOpening: (sgState) => { var _a; if (cbState.tag === 'CBOpening') { (_a = handlers.onRollOpening) === null || _a === void 0 ? void 0 : _a.call(handlers, { cbState, sgState }); } }, }; } exports.asSGEventHandler = asSGEventHandler; /** * BGListenerを接合し、一つのBGListenerにする * * @param bg1 BGListener(先に実行される) * @param bg2 BGListener(後に実行される) * @returns */ function concatBGListeners(bg1, bg2) { return { onBGGameStarted: (0, concat_1.concat0)(bg1.onBGGameStarted, bg2.onBGGameStarted), onBGOpeningRerolled: (0, concat_1.concat1)(bg1.onBGOpeningRerolled, bg2.onBGOpeningRerolled), onAwaitCubeAction: (0, concat_1.concat1)(bg1.onAwaitCubeAction, bg2.onAwaitCubeAction), onCubeActionStarted: (0, concat_1.concat1)(bg1.onCubeActionStarted, bg2.onCubeActionStarted), onCubeActionSkipped: (0, concat_1.concat1)(bg1.onCubeActionSkipped, bg2.onCubeActionSkipped), onDoubled: (0, concat_1.concat2)(bg1.onDoubled, bg2.onDoubled), onDoubleAccepted: (0, concat_1.concat2)(bg1.onDoubleAccepted, bg2.onDoubleAccepted), onPassed: (0, concat_1.concat2)(bg1.onPassed, bg2.onPassed), onAwaitCheckerPlay: (0, concat_1.concat1)(bg1.onAwaitCheckerPlay, bg2.onAwaitCheckerPlay), onCommitted: (0, concat_1.concat1)(bg1.onCommitted, bg2.onCommitted), onEndOfBGGame: (0, concat_1.concat1)(bg1.onEndOfBGGame, bg2.onEndOfBGGame), }; } exports.concatBGListeners = concatBGListeners; /** * 状態の保持を行うためのBGListenerを生成する * * @param defaultState ゲーム開始時の初期配置 * @param setBGState 状態保持関数 * @returns */ function setBGStateListener(defaultState, setBGState) { return { onBGGameStarted: () => setBGState(defaultState), onBGOpeningRerolled: (bgState) => setBGState(bgState), onAwaitCubeAction: () => { // }, onCubeActionStarted: (bgState) => setBGState(bgState), onAwaitCheckerPlay: (bgState) => setBGState(bgState), onCommitted: () => { // }, onDoubled: (bgState) => setBGState(bgState), onDoubleAccepted: (bgState) => setBGState(bgState), onPassed: () => { // }, onCubeActionSkipped: (bgState) => setBGState(bgState), onEndOfBGGame: (bgState) => setBGState(bgState), }; } exports.setBGStateListener = setBGStateListener;