From 3e805d3da7865f7f89b978cb6d1a859f164290c9 Mon Sep 17 00:00:00 2001 From: Stephen McQuay Date: Wed, 4 Sep 2013 00:07:47 -0700 Subject: [PATCH] remove game from player struct --- game.go | 4 +++- http.go | 1 - player.go | 12 +++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/game.go b/game.go index 42960cf..21fe8a2 100644 --- a/game.go +++ b/game.go @@ -55,6 +55,7 @@ func (g *game) run() { for { select { case <-g.kill: + log.Printf("%s: received kill signal, dying gracefully", g.id) return case p := <-g.register: g.players[p] = true @@ -77,6 +78,7 @@ func (g *game) run() { log.Printf("Explosions: %v", len(g.splosions)) } + // TODO: making one of these every iteration seems wasteful payload := bot.NewBoardstate(g.turn) robots_remaining := 0 @@ -84,7 +86,7 @@ func (g *game) run() { for p := range g.players { if p.Robot.Health > 0 { robots_remaining++ - p.scan() + p.scan(g.players) p.nudge() // XXX: change to pointer, check for pointer as (0, 0) is valid target if p.Robot.FireAt != nil { diff --git a/http.go b/http.go index ef46494..7cb9984 100644 --- a/http.go +++ b/http.go @@ -76,7 +76,6 @@ func addPlayer(ws *websocket.Conn) { Scanners: make([]bot.Scanner, 0)}, send: make(chan *bot.Boardstate), ws: ws, - game: game, } p.reset() log.Printf("game: %+v", game) diff --git a/player.go b/player.go index ca7ca18..9ee9ac5 100644 --- a/player.go +++ b/player.go @@ -10,7 +10,6 @@ import ( type player struct { ws *websocket.Conn - game *game Robot bot.Robot send chan *bot.Boardstate Instruction instruction @@ -61,9 +60,10 @@ func (p *player) nudge() { p.Robot.Position.Y = newPos.Y } -func (p *player) scan() { +func (p *player) scan(players map[*player]bool) { + // TODO: perhaps keep the same one around? p.Robot.Scanners = make([]bot.Scanner, 0) - for player := range p.game.players { + for player, _ := range players { if player.Robot.Id == p.Robot.Id || player.Robot.Health <= 0 { continue } @@ -80,8 +80,10 @@ func (p *player) scan() { } } -func (p *player) fire() *bot.Projectile { - for proj := range p.game.projectiles { +func (p *player) fire(projectiles map[*bot.Projectile]bool) *bot.Projectile { + // XXX: is this to prevent us from having multiple projectiles from the + // same bot? + for proj := range projectiles { if proj.Id == p.Robot.Id { return nil }