40 lines
865 B
TypeScript
40 lines
865 B
TypeScript
|
import { ApiMsgEnum } from '..'
|
||
|
import type Player from './Player'
|
||
|
import PlayerManager from './PlayerManager'
|
||
|
import RoomManager from './RoomManager'
|
||
|
|
||
|
export default class Room {
|
||
|
id: number
|
||
|
players: Set<Player> = new Set()
|
||
|
|
||
|
constructor(rid: number) {
|
||
|
this.id = rid
|
||
|
}
|
||
|
|
||
|
join(uid: number) {
|
||
|
const player = PlayerManager.Instance.getPlayerById(uid)
|
||
|
if (player) {
|
||
|
player.rid = this.id
|
||
|
this.players.add(player)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
leave(uid: number) {
|
||
|
const player = PlayerManager.Instance.getPlayerById(uid)
|
||
|
if (player) {
|
||
|
player.rid = -1
|
||
|
this.players.delete(player)
|
||
|
if (!this.players.size) {
|
||
|
RoomManager.Instance.closeRoom(this.id)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sync() {
|
||
|
for (const player of this.players) {
|
||
|
player.connection.sendMsg(ApiMsgEnum.MsgRoom, RoomManager.Instance.getRoomView(this))
|
||
|
}
|
||
|
}
|
||
|
}
|