import { singleton } from '../decorators/singleton.decorator' import { GameEnv } from './GameEnv' import { CardGameState } from '../rooms/schema/CardGameState' import { checkBitIdx, checkBitNumber } from '../utils/number.util' /** * 一个回合是否能多次吃牌 * @type {string} */ export const RULE_MULTIPLEEAT = 'multipeat' /** * 是否必须弃牌 * @type {string} */ export const RULE_DROPCARD = 'dropcard' /** * 当前游戏能否吃牌 * @type {string} */ export const RULE_CANEAT = 'caneat' /** * 单张牌能否下随从 * @type {string} */ export const RULE_SINGLEEAT = 'singleeat' @singleton export class RoomOptions { /** * 当前游戏能否吃牌 * @return {boolean} * @param opt */ public canEat(opt: {advMode: boolean}) { let result = 0 if (opt.advMode && new GameEnv().canEatAdv) { result = 1 } else if (!opt.advMode && new GameEnv().canEatBase) { result = 1 } return result } /** * 一个回合能不能吃多次 * //TODO: 根据配表判断 * @param opt */ public multipleEat(opt?: any) { return 0 } /** * 当前轮时间到了后, 是否自动出牌 * @param opt */ public autoDiscard(opt?: any) { return 1 } /** * 单张牌也能放技能和选随从 * @param opt */ public singleEat(opt?: any) { return 0 } public initGameRule(state: CardGameState, val: number) { if (val) { state.rules.set(RULE_CANEAT, checkBitNumber(val, 1)) state.rules.set(RULE_MULTIPLEEAT, checkBitNumber(val, 2)) state.rules.set(RULE_DROPCARD, checkBitNumber(val, 3)) state.rules.set(RULE_SINGLEEAT, checkBitNumber(val, 4)) } else { state.rules.set(RULE_CANEAT, this.canEat({advMode: state.advMode})) state.rules.set(RULE_MULTIPLEEAT, this.multipleEat()) state.rules.set(RULE_DROPCARD, this.autoDiscard()) state.rules.set(RULE_SINGLEEAT, this.singleEat()) } } }