tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
88 lines (87 loc) • 3.55 kB
JavaScript
;
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;