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