sprout Kinetics struct

This commit is contained in:
Luke Meyers 2020-02-08 11:57:31 -08:00
parent 794c54764e
commit 47bf19265d
4 changed files with 23 additions and 19 deletions

View File

@ -20,7 +20,7 @@ func chooseCommand(s State, teamID int) command {
if nextRacer != nil {
if h.Position.Lane != nextRacer.Position.Lane {
if abs(nextRacer.Position.Pos-h.Position.Pos) < h.v {
if abs(nextRacer.Position.Pos-h.Position.Pos) < h.Kinetics.V {
return slowDown
}
}

View File

@ -23,11 +23,11 @@ func doCommand(cmd command, s State, teamID int) State {
switch cmd {
case speedUp:
r.a += da
r.Kinetics.A += da
*r = accelerate(*r)
s = updateRacer(s, *r)
case slowDown:
r.a -= da
r.Kinetics.A -= da
*r = accelerate(*r)
s = updateRacer(s, *r)
case left:
@ -40,7 +40,7 @@ func doCommand(cmd command, s State, teamID int) State {
pos := r.Position
pos.Pos++
s = removeObstacle(s, pos)
r.v = 0
r.Kinetics.V = 0
s = updateRacer(s, *r)
}

View File

@ -33,11 +33,11 @@ func maybePassBaton(s State, teamID int) State {
continue
}
if abs(r.Position.Pos-h.Position.Pos) <= PassDistance {
h.v = 0
h.a = 0
h.Kinetics.V = 0
h.Kinetics.A = 0
s = updateRacer(s, *h)
newH := t.Racers[i]
newH.a = baseAccel
newH.Kinetics.A = baseAccel
t.Baton.HolderID = newH.ID
s = updateTeam(s, t)
return updateRacer(s, newH)
@ -146,8 +146,12 @@ type Racer struct {
TeamID int
Position Position
StartPos Position
v int
a int
Kinetics Kinetics
}
type Kinetics struct {
V int
A int
}
type Position struct {

View File

@ -1,26 +1,26 @@
package game
func accelerate(r Racer) Racer {
if r.a < -MaxA {
r.a = -MaxA
if r.Kinetics.A < -MaxA {
r.Kinetics.A = -MaxA
}
if r.a > MaxA {
r.a = MaxA
if r.Kinetics.A > MaxA {
r.Kinetics.A = MaxA
}
r.v += r.a
if r.v > MaxV {
r.v = MaxV
r.Kinetics.V += r.Kinetics.A
if r.Kinetics.V > MaxV {
r.Kinetics.V = MaxV
}
if r.v < -MaxV {
r.v = -MaxV
if r.Kinetics.V < -MaxV {
r.Kinetics.V = -MaxV
}
return r
}
func moveRacer(s State, r Racer) State {
for i := 0; i < r.v; i++ {
for i := 0; i < r.Kinetics.V; i++ {
if o := collide(r.Position.Pos+1, r.Position.Lane, s); o != nil {
return destroyRacer(s, r)
} else {