Add battery levels and indicator
This commit is contained in:
parent
7fc869a675
commit
a083b291fe
10
game/game.go
10
game/game.go
|
@ -147,6 +147,7 @@ type Racer struct {
|
||||||
Position Position
|
Position Position
|
||||||
StartPos Position
|
StartPos Position
|
||||||
Kinetics Kinetics
|
Kinetics Kinetics
|
||||||
|
Battery Battery
|
||||||
}
|
}
|
||||||
|
|
||||||
type Kinetics struct {
|
type Kinetics struct {
|
||||||
|
@ -180,6 +181,10 @@ func NewState() State {
|
||||||
Lane: i,
|
Lane: i,
|
||||||
Pos: j * (Steps / numRacers),
|
Pos: j * (Steps / numRacers),
|
||||||
},
|
},
|
||||||
|
Battery: Battery{
|
||||||
|
Capacity: baseCharge,
|
||||||
|
Charge: baseCharge,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
r.Position = r.StartPos
|
r.Position = r.StartPos
|
||||||
racers = append(racers, r)
|
racers = append(racers, r)
|
||||||
|
@ -199,8 +204,9 @@ func NewState() State {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Steps = 50
|
Steps = 80
|
||||||
numRacers = 5
|
numRacers = 3
|
||||||
NumTeams = 8
|
NumTeams = 8
|
||||||
NumLanes = NumTeams
|
NumLanes = NumTeams
|
||||||
|
baseCharge = 4
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,6 +8,11 @@ func accelerate(r Racer) Racer {
|
||||||
r.Kinetics.A = MaxA
|
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
|
r.Kinetics.V += r.Kinetics.A
|
||||||
if r.Kinetics.V > MaxV {
|
if r.Kinetics.V > MaxV {
|
||||||
r.Kinetics.V = MaxV
|
r.Kinetics.V = MaxV
|
||||||
|
@ -51,6 +56,6 @@ func collide(pos, lane int, s State) interface{} {
|
||||||
const (
|
const (
|
||||||
baseAccel = 1
|
baseAccel = 1
|
||||||
MaxA = 1
|
MaxA = 1
|
||||||
MaxV = 3
|
MaxV = 4
|
||||||
PassDistance = 2
|
PassDistance = 2
|
||||||
)
|
)
|
||||||
|
|
17
gfx/gfx.go
17
gfx/gfx.go
|
@ -163,6 +163,23 @@ func renderRacer(ctx context, oldRacer, racer game.Racer, active bool, c pixel.R
|
||||||
bounds := pic.Bounds()
|
bounds := pic.Bounds()
|
||||||
sprite := pixel.NewSprite(pic, bounds)
|
sprite := pixel.NewSprite(pic, bounds)
|
||||||
sprite.DrawColorMask(ctx.w, pixel.IM.Moved(pos).ScaledXY(pos, pixel.Vec{2, 2}), c)
|
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) {
|
func renderBaton(pos pixel.Vec, w *pixelgl.Window) {
|
||||||
|
|
Loading…
Reference in New Issue