diff --git a/game/ai.go b/game/ai.go index 806b80f..7a317e2 100644 --- a/game/ai.go +++ b/game/ai.go @@ -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 } } diff --git a/game/commands.go b/game/commands.go index d13bb5a..65f728c 100644 --- a/game/commands.go +++ b/game/commands.go @@ -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) } diff --git a/game/game.go b/game/game.go index 3a0ffb9..9c9037e 100644 --- a/game/game.go +++ b/game/game.go @@ -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 { diff --git a/game/physics.go b/game/physics.go index 40bb474..a0d4845 100644 --- a/game/physics.go +++ b/game/physics.go @@ -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 {