UNPKG

tsgammon-core

Version:

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

52 lines (51 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildRSEventHandler = void 0; const EOGStatus_1 = require("../EOGStatus"); const SGResult_1 = require("../records/SGResult"); const ResignState_1 = require("./ResignState"); const ResignOffer_1 = require("../ResignOffer"); /** * RSEventHandlerオブジェクトを生成する * * @param listeners ResignHandlerから呼ばせるListener * @returns */ function buildRSEventHandler(listeners) { // どの条件で降参するかの選択は、U.I.側の管理なのでここには登場しない // ResignEventHandlerでは条件での分岐がないので、dispatcherはなく、 // 単純にListenerに発生したイベントを通知するだけになっている return { onOfferResign: (offer, isRed) => isRed ? offerFromRedToWhite(offer) : offerFromWhiteToRed(offer), onRejectResign: (resignState) => { var _a; (_a = listeners.rejectResign) === null || _a === void 0 ? void 0 : _a.call(listeners, resignState); }, onAcceptResign: (resignState) => { var _a; const offer = resignState.offer; // resignState(=ResignをOfferされた側)がRedなら、Redの勝利 const result = resignState.isRed ? SGResult_1.SGResult.REDWON : SGResult_1.SGResult.WHITEWON; const eogStatus = (0, EOGStatus_1.eog)({ isGammon: offer === ResignOffer_1.ResignOffer.Gammon || offer === ResignOffer_1.ResignOffer.Backgammon, isBackgammon: offer === ResignOffer_1.ResignOffer.Backgammon, }); (_a = listeners.acceptResign) === null || _a === void 0 ? void 0 : _a.call(listeners, result, eogStatus); }, }; // 以下の二つは、Red/Whiteのどちらからどちらへの降参かを明示するための定義 function offerFromRedToWhite(offer) { var _a; const offered = ResignState_1.RSNONE.doOfferResignRed(offer); (_a = listeners.offerResign) === null || _a === void 0 ? void 0 : _a.call(listeners, offered); } function offerFromWhiteToRed(offer) { var _a; const offered = ResignState_1.RSNONE.doOfferResignWhite(offer); (_a = listeners.offerResign) === null || _a === void 0 ? void 0 : _a.call(listeners, offered); } } exports.buildRSEventHandler = buildRSEventHandler;