UNPKG

tsgammon-core

Version:

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

65 lines (64 loc) 2.07 kB
"use strict"; 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;