From cfd3d919426325797647e57034b9ff8051672a4c Mon Sep 17 00:00:00 2001 From: Fraser Graham Date: Wed, 6 Nov 2013 22:21:04 -0800 Subject: [PATCH] filter projectiles and objects by scanners --- game.go | 34 +++++++++++++++++++++++++++++++++- obstacle.go | 12 ++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/game.go b/game.go index e3b7ee6..893a2a6 100644 --- a/game.go +++ b/game.go @@ -165,7 +165,6 @@ func (g *game) send_update(payload *Boardstate) { for p := range g.players { // Copy the payload but only add the robots in scanner range player_payload := NewBoardstate() - player_payload.Projectiles = payload.Projectiles player_payload.Splosions = payload.Splosions player_payload.Obstacles = payload.Obstacles player_payload.AllBots = payload.AllBots @@ -176,7 +175,11 @@ func (g *game) send_update(payload *Boardstate) { player_payload.OtherRobots, p.Robot.GetTruncatedDetails()) + player_payload.Projectiles = []Projectile{} + player_payload.Obstacles = []Obstacle{} + if p.Robot.Health > 0 { + // Filter robots by scanner for player := range g.players { for _, scan_entry := range p.Robot.Scanners { if player.Robot.Id == scan_entry.Id { @@ -186,8 +189,37 @@ func (g *game) send_update(payload *Boardstate) { } } } + + // Filter projectiles + for proj := range g.projectiles { + + if proj.Owner == p { + player_payload.Projectiles = append( + player_payload.Projectiles, + *proj) + } + + for _, scan_entry := range p.Robot.Scanners { + if proj.Id == scan_entry.Id { + player_payload.Projectiles = append( + player_payload.Projectiles, + *proj) + } + } + } + + // Filter objects + for _, ob := range g.obstacles { + if ob.distance_from_point(p.Robot.Position) < float32(p.Robot.Stats.ScannerRadius) { + player_payload.Obstacles = append( + player_payload.Obstacles, + ob) + } + } } else { player_payload.OtherRobots = payload.OtherRobots + player_payload.Projectiles = payload.Projectiles + player_payload.Obstacles = payload.Obstacles } // x, _ := json.Marshal(player_payload) diff --git a/obstacle.go b/obstacle.go index bbb9516..5f2aff2 100644 --- a/obstacle.go +++ b/obstacle.go @@ -2,6 +2,7 @@ package main import ( v "bitbucket.org/hackerbots/vector" + "math" "math/rand" ) @@ -9,6 +10,17 @@ type Obstacle struct { Bounds v.Rect2d `json:"bounds"` } +func (o Obstacle) distance_from_point(p v.Point2d) float32 { + dist := math.MaxFloat32 + + dist = math.Min(dist, float64(p.Sub(o.Bounds.A).Mag())) + dist = math.Min(dist, float64(p.Sub(o.Bounds.B).Mag())) + dist = math.Min(dist, float64(p.Sub(v.Point2d{o.Bounds.A.X, o.Bounds.B.Y}).Mag())) + dist = math.Min(dist, float64(p.Sub(v.Point2d{o.Bounds.B.X, o.Bounds.A.Y}).Mag())) + + return float32(dist) +} + func GenerateObstacles(count int, width, height float32) []Obstacle { out := []Obstacle{} for i := 0; i < count; i++ {