From a083b291fe6f29d3638c236f652bac44cbc2fce5 Mon Sep 17 00:00:00 2001 From: Luke Meyers Date: Sat, 8 Feb 2020 12:29:49 -0800 Subject: [PATCH] Add battery levels and indicator --- game/game.go | 14 ++++++++++---- game/physics.go | 7 ++++++- gfx/gfx.go | 17 +++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/game/game.go b/game/game.go index 9c9037e..a97b83e 100644 --- a/game/game.go +++ b/game/game.go @@ -147,6 +147,7 @@ type Racer struct { Position Position StartPos Position Kinetics Kinetics + Battery Battery } type Kinetics struct { @@ -180,6 +181,10 @@ func NewState() State { Lane: i, Pos: j * (Steps / numRacers), }, + Battery: Battery{ + Capacity: baseCharge, + Charge: baseCharge, + }, } r.Position = r.StartPos racers = append(racers, r) @@ -199,8 +204,9 @@ func NewState() State { } const ( - Steps = 50 - numRacers = 5 - NumTeams = 8 - NumLanes = NumTeams + Steps = 80 + numRacers = 3 + NumTeams = 8 + NumLanes = NumTeams + baseCharge = 4 ) diff --git a/game/physics.go b/game/physics.go index 190183a..67d68e4 100644 --- a/game/physics.go +++ b/game/physics.go @@ -8,6 +8,11 @@ func accelerate(r Racer) Racer { r.Kinetics.A = MaxA } + if r.Kinetics.A > r.Battery.Charge { + r.Kinetics.A = r.Battery.Charge + } + r.Battery.Charge -= r.Kinetics.A + r.Kinetics.V += r.Kinetics.A if r.Kinetics.V > MaxV { r.Kinetics.V = MaxV @@ -51,6 +56,6 @@ func collide(pos, lane int, s State) interface{} { const ( baseAccel = 1 MaxA = 1 - MaxV = 3 + MaxV = 4 PassDistance = 2 ) diff --git a/gfx/gfx.go b/gfx/gfx.go index 11e3f3b..3c0d51e 100644 --- a/gfx/gfx.go +++ b/gfx/gfx.go @@ -163,6 +163,23 @@ func renderRacer(ctx context, oldRacer, racer game.Racer, active bool, c pixel.R bounds := pic.Bounds() sprite := pixel.NewSprite(pic, bounds) sprite.DrawColorMask(ctx.w, pixel.IM.Moved(pos).ScaledXY(pos, pixel.Vec{2, 2}), c) + + im := imdraw.New(nil) + for i := 0; i < racer.Battery.Capacity; i++ { + pos := pos + pos.X -= racerWidth + pos.Y -= racerWidth + w := 4.0 + pos.X += (w * 2) * float64(i) + im.Color = colornames.Yellow + im.Push(pos) + var lw float64 + if i > racer.Battery.Charge { + lw = 1 + } + im.Circle(w, lw) + im.Draw(ctx.w) + } } func renderBaton(pos pixel.Vec, w *pixelgl.Window) {