85 lines
1.9 KiB
TypeScript
85 lines
1.9 KiB
TypeScript
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())
|
|
}
|
|
}
|
|
|
|
}
|