From 082b737805068f5492e379757088c3a2e7cb1920 Mon Sep 17 00:00:00 2001 From: Fraser Graham Date: Wed, 6 Nov 2013 22:50:59 -0800 Subject: [PATCH] first pass at repair mode --- player.go | 49 +++++++++++++++++++++++++++++++++++++------------ robot.go | 28 +++++++++++++++------------- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/player.go b/player.go index 0bfb04d..6be3b44 100644 --- a/player.go +++ b/player.go @@ -39,18 +39,32 @@ func (p *player) recv() { log.Print("problem receiving JSON from player: ", err) break } - if msg.MoveTo != nil { - p.Robot.MoveTo = msg.MoveTo - } - if msg.FireAt != nil { - p.Robot.FireAt = msg.FireAt + + if msg.Repair != nil { + p.Robot.TargetSpeed = 0 + p.Robot.FireAt = nil + p.Robot.MoveTo = nil + if p.Robot.RepairCounter <= 0 { + p.Robot.RepairCounter = 3.0 + } + } else { + p.Robot.RepairCounter = 0 + + // Reapiring halts all other activity + if msg.MoveTo != nil { + p.Robot.MoveTo = msg.MoveTo + } + if msg.FireAt != nil { + p.Robot.FireAt = msg.FireAt + } + + if msg.TargetSpeed != nil { + p.Robot.TargetSpeed = float32(*msg.TargetSpeed) + } else { + p.Robot.TargetSpeed = p.Robot.Stats.Speed + } } - if msg.TargetSpeed != nil { - p.Robot.TargetSpeed = float32(*msg.TargetSpeed) - } else { - p.Robot.TargetSpeed = p.Robot.Stats.Speed - } } log.Printf("player %s: recv close", p.Robot.Id) p.ws.Close() @@ -116,8 +130,11 @@ func (p *player) Tick(g *game) { current_heading = p.Robot.MoveTo.Sub(p.Robot.Position).Normalize() } - // Where do we WANT to be heading? - new_heading := p.Robot.MoveTo.Sub(p.Robot.Position).Normalize() + new_heading := current_heading + if p.Robot.MoveTo != nil { + // Where do we WANT to be heading? + new_heading = p.Robot.MoveTo.Sub(p.Robot.Position).Normalize() + } if new_heading.Mag() > 0 { // Is our direction change too much? Hard coding to 5 degrees/s for now @@ -165,6 +182,14 @@ func (p *player) Tick(g *game) { } } + if math.Abs(float64(p.Robot.Speed)) < v.Epsilon && p.Robot.RepairCounter > 0 { + p.Robot.RepairCounter -= delta + if p.Robot.RepairCounter < 0 { + p.Robot.Health += 5 + p.Robot.RepairCounter = 3.0 + } + } + if p.Robot.FireAt != nil { proj := p.fire(g.projectiles, g.turn) if proj != nil { diff --git a/robot.go b/robot.go index 3c05fbb..5165f43 100644 --- a/robot.go +++ b/robot.go @@ -5,19 +5,20 @@ import ( ) type Robot struct { - Id string `json:"id"` - Name string `json:"name"` - Stats Stats `json:"-"` - TargetSpeed float32 `json:"-"` - Speed float32 `json:"speed"` - Health int `json:"health"` - Position v.Point2d `json:"position"` - Heading v.Vector2d `json:"heading"` - MoveTo *v.Point2d `json:"-"` - FireAt *v.Point2d `json:"-"` - Scanners []Scanner `json:"scanners"` - LastFired int `json:"-"` - Collision bool `json:"collision"` + Id string `json:"id"` + Name string `json:"name"` + Stats Stats `json:"-"` + TargetSpeed float32 `json:"-"` + Speed float32 `json:"speed"` + Health int `json:"health"` + RepairCounter float32 `json:"repair"` + Position v.Point2d `json:"position"` + Heading v.Vector2d `json:"heading"` + MoveTo *v.Point2d `json:"-"` + FireAt *v.Point2d `json:"-"` + Scanners []Scanner `json:"scanners"` + LastFired int `json:"-"` + Collision bool `json:"collision"` } // This is the subset of data we send to players about robots @@ -157,5 +158,6 @@ type Instruction struct { MoveTo *v.Point2d `json:"move_to,omitempty"` FireAt *v.Point2d `json:"fire_at,omitempty"` TargetSpeed *float32 `json:"target_speed,omitempty"` + Repair *bool `json:"repair,omitempty"` Stats Stats `json:"stats"` }