|
|
@ -40,8 +40,22 @@ func (ml *MapLock) add(g *game) { |
|
|
|
ml.Unlock() |
|
|
|
} |
|
|
|
|
|
|
|
type WinnerMap struct { |
|
|
|
m map[string]int |
|
|
|
type BotStats struct { |
|
|
|
Kills int |
|
|
|
Deaths int |
|
|
|
Suicides int |
|
|
|
Shots int |
|
|
|
Hits int |
|
|
|
Wins int |
|
|
|
} |
|
|
|
|
|
|
|
type PlayerStats struct { |
|
|
|
BotStats map[string]*BotStats |
|
|
|
Wins int |
|
|
|
} |
|
|
|
|
|
|
|
type GameStats struct { |
|
|
|
PlayerStats map[string]*PlayerStats |
|
|
|
sync.RWMutex |
|
|
|
} |
|
|
|
|
|
|
@ -65,7 +79,7 @@ type game struct { |
|
|
|
repair_hp int |
|
|
|
repair_rate float32 |
|
|
|
tick_duration int |
|
|
|
winners WinnerMap |
|
|
|
stats GameStats |
|
|
|
mode GameMode |
|
|
|
} |
|
|
|
|
|
|
@ -97,7 +111,7 @@ func NewGame(id string, width, height float32, obstacles, tick, maxPoints int, m |
|
|
|
repair_rate: 3.0, |
|
|
|
tick_duration: tick, |
|
|
|
players_remaining: 2, |
|
|
|
winners: WinnerMap{m: make(map[string]int)}, |
|
|
|
stats: GameStats{PlayerStats: make(map[string]*PlayerStats)}, |
|
|
|
} |
|
|
|
|
|
|
|
if mode == "melee" { |
|
|
@ -279,6 +293,13 @@ func (g *game) run() { |
|
|
|
return |
|
|
|
case p := <-g.register: |
|
|
|
g.players[p] = true |
|
|
|
g.stats.PlayerStats[p.Id] = &PlayerStats{ |
|
|
|
BotStats: make(map[string]*BotStats), |
|
|
|
} |
|
|
|
for _, r := range p.Robots { |
|
|
|
g.stats.PlayerStats[p.Id].BotStats[r.Name] = &BotStats{} |
|
|
|
r.gameStats = g.stats.PlayerStats[p.Id].BotStats[r.Name] |
|
|
|
} |
|
|
|
case p := <-g.unregister: |
|
|
|
delete(g.players, p) |
|
|
|
close(p.send) |
|
|
|