tsgammon-core
Version:
A Backgammon library for Typescript, formerly developed as a part of tsgammon-ui
65 lines (64 loc) • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setSGStateListener = exports.singleGameDispatcher = void 0;
const sgResultToSGEoG_1 = require("./utils/sgResultToSGEoG");
/**
* SingleGameDispatcherオブジェクトを生成する
*/
exports.singleGameDispatcher = {
doStartGame: () => {
return (listener) => {
listener.onGameStarted();
};
},
doOpeningRoll: (state, dices) => {
const nextState = state.doOpening(dices);
return (listener) => {
if (nextState.tag === 'SGInPlay') {
listener.onOpeningCheckerPlayStarted(nextState);
}
else {
listener.onRerollOpening(nextState);
}
};
},
doCommitCheckerPlay: (state) => {
const revertTo = state.revertTo;
const nextState = state.doCheckerPlayCommit(state.boardStateNode, revertTo);
return (listener) => {
listener.onCheckerPlayCommitted(state);
if (nextState.tag === 'SGEoG') {
listener.onEndOfGame(nextState);
}
else {
listener.onAwaitRoll(nextState);
}
};
},
doRoll: (state, dices) => {
const nextState = state.doRoll(dices);
return (listener) => {
listener.onCheckerPlayStarted(nextState);
};
},
doEndOfGame: (sgState, result, eog) => {
const nextState = (0, sgResultToSGEoG_1.sgResultToSGEoG)(sgState, result, eog);
return (listeners) => {
listeners.onEndOfGame(nextState);
};
},
};
function setSGStateListener(defaultSGState, setState) {
return {
onGameStarted: () => setState(defaultSGState),
onOpeningCheckerPlayStarted: setState,
onCheckerPlayStarted: setState,
onCheckerPlayCommitted: () => {
//
},
onRerollOpening: setState,
onAwaitRoll: setState,
onEndOfGame: setState,
};
}
exports.setSGStateListener = setSGStateListener;