|
|
|
|
@@ -28,9 +28,7 @@ export default class Room {
|
|
|
|
|
|
|
|
|
|
private conns: BaseConnection[] = [];
|
|
|
|
|
|
|
|
|
|
private connData = new Map<BaseConnection, RoomConnData>();
|
|
|
|
|
|
|
|
|
|
private nowPlayer: [conn: BaseConnection, state: number] = undefined;
|
|
|
|
|
private connData: Map<BaseConnection<any>, RoomConnData> = new Map<BaseConnection, RoomConnData>();
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
@@ -69,33 +67,36 @@ export default class Room {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** ChangeState */
|
|
|
|
|
public ChangeState(conn: BaseConnection, state: EGameState): void {
|
|
|
|
|
if (state === EGameState.Ready) {
|
|
|
|
|
this.SetReady(conn);
|
|
|
|
|
}
|
|
|
|
|
public ChangeState(state?: EGameState, conn?: BaseConnection): void {
|
|
|
|
|
this.connData.forEach((connData: RoomConnData, key: BaseConnection) => {
|
|
|
|
|
const player: WsConnection<ServiceType>[] = <WsConnection<ServiceType>[]>this.conns.filter((conn) => conn === key);
|
|
|
|
|
const apiNum: number = conn === key ? 100 : 200;
|
|
|
|
|
server.broadcastMsg("room/ChangeState", [connData.state + apiNum], player);
|
|
|
|
|
if (conn) {
|
|
|
|
|
const player: WsConnection<ServiceType>[] = <WsConnection<ServiceType>[]>this.conns.filter((conn) => conn === key);
|
|
|
|
|
const apiNum: number = conn === key ? 100 : 200;
|
|
|
|
|
server.broadcastMsg("room/ChangeState", [(connData.state ?? EGameState.Ready) + apiNum], player);
|
|
|
|
|
} else {
|
|
|
|
|
server.broadcastMsg("room/ChangeState", [state], <WsConnection<ServiceType>[]>this.conns);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
switch (state) {
|
|
|
|
|
case EGameState.Ready:
|
|
|
|
|
this.Ready(conn);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case EGameState.TurnEnd:
|
|
|
|
|
this.TurnEnd(conn);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
//#region Custom
|
|
|
|
|
//#region ChangeState
|
|
|
|
|
|
|
|
|
|
/** Join */
|
|
|
|
|
public Join(conn: BaseConnection): void {
|
|
|
|
|
this.conns.push(conn);
|
|
|
|
|
const data: RoomConnData = {
|
|
|
|
|
state: undefined,
|
|
|
|
|
card: undefined,
|
|
|
|
|
};
|
|
|
|
|
this.connData.set(conn, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** SetReady */
|
|
|
|
|
public SetReady(conn: BaseConnection): void {
|
|
|
|
|
/** Ready */
|
|
|
|
|
public Ready(conn: BaseConnection): void {
|
|
|
|
|
const self: this = this;
|
|
|
|
|
const cardCount: number = 24;
|
|
|
|
|
const data: RoomConnData = this.connData.get(conn);
|
|
|
|
|
@@ -113,10 +114,40 @@ export default class Room {
|
|
|
|
|
const card: number = RandomEx.GetInt(0, cardCount);
|
|
|
|
|
connData.state = key === self.conns[now] ? EGameState.TurnCards : EGameState.Wait;
|
|
|
|
|
connData.card = card;
|
|
|
|
|
self.connData.set(key, connData);
|
|
|
|
|
});
|
|
|
|
|
this.ChangeState(EGameState.TurnCards, self.conns[now]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** TurnEnd */
|
|
|
|
|
public TurnEnd(conn: BaseConnection): void {
|
|
|
|
|
const data: RoomConnData = this.connData.get(conn);
|
|
|
|
|
data.state = EGameState.TurnEnd;
|
|
|
|
|
this.connData.set(conn, data);
|
|
|
|
|
const index: number = this.conns.indexOf(conn);
|
|
|
|
|
const nextIndex: number = (index + 1) % this.conns.length;
|
|
|
|
|
const nextConn: BaseConnection = this.conns[nextIndex];
|
|
|
|
|
const nextData: RoomConnData = this.connData.get(nextConn);
|
|
|
|
|
nextData.state = EGameState.TurnCards;
|
|
|
|
|
this.connData.set(nextConn, nextData);
|
|
|
|
|
this.ChangeState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
//#region Custom
|
|
|
|
|
|
|
|
|
|
/** Join */
|
|
|
|
|
public Join(conn: BaseConnection): void {
|
|
|
|
|
this.conns.push(conn);
|
|
|
|
|
const data: RoomConnData = {
|
|
|
|
|
state: undefined,
|
|
|
|
|
card: undefined,
|
|
|
|
|
};
|
|
|
|
|
this.connData.set(conn, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** RestartGame */
|
|
|
|
|
public RestartGame(): void {
|
|
|
|
|
|
|
|
|
|
|