You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
package manager
|
|
|
|
import "git.noahlan.cn/northlan/ntools-go/uuid"
|
|
|
|
func newRoomData() *RoomData {
|
|
return &RoomData{
|
|
BattleId: 0,
|
|
CurrentStatus: GameInit,
|
|
UserMap: make(map[int32]map[int64]User),
|
|
}
|
|
}
|
|
|
|
func (m *RoomData) SetStatus(status GameStatus) {
|
|
if status == GameStarted {
|
|
m.startGame()
|
|
} else if status == GameEnded {
|
|
m.endGame()
|
|
}
|
|
|
|
m.CurrentStatus = status
|
|
}
|
|
|
|
func (m *RoomData) UserJoin(user User) {
|
|
tm, ok := m.UserMap[user.Team]
|
|
if !ok {
|
|
tm = make(map[int64]User)
|
|
m.UserMap[user.Team] = tm
|
|
}
|
|
tm[user.ID] = user
|
|
}
|
|
|
|
func (m *RoomData) UserLeave(userId int64) {
|
|
for _, tm := range m.UserMap {
|
|
if _, ok := tm[userId]; ok {
|
|
delete(tm, userId)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (m *RoomData) GetUser(userId int64) (*User, bool) {
|
|
for _, tm := range m.UserMap {
|
|
if u, ok := tm[userId]; ok {
|
|
return &u, true
|
|
}
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
func (m *RoomData) startGame() {
|
|
m.BattleId = uuid.NextId()
|
|
m.UserMap = make(map[int32]map[int64]User)
|
|
}
|
|
|
|
func (m *RoomData) endGame() {
|
|
m.BattleId = 0
|
|
m.UserMap = make(map[int32]map[int64]User)
|
|
}
|