Skip to content

Commit 73d1201

Browse files
committed
Always choose shortest rotation
1 parent df79807 commit 73d1201

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

hoverrace/game.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ func (g *Game) handleThrottle(playerId string, event cg.Event) {
182182
data.Level = -1
183183
}
184184

185+
data.Angle = NormalizeAngle(data.Angle)
186+
185187
player := g.players[playerId]
186188
player.targetThrottle = data.Level
187189
player.targetAngle = data.Angle

hoverrace/math.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ func (v Vec) Normalize() Vec {
3131
}
3232
}
3333

34+
func (v Vec) ToAngle() float64 {
35+
return math.Atan2(-v.Y, v.X)*180/math.Pi + 90
36+
}
37+
3438
func (v Vec) Magnitude() float64 {
3539
return math.Sqrt(v.MagnitudeSquared())
3640
}
@@ -47,10 +51,30 @@ func VecFromAngle(degrees float64) Vec {
4751
}
4852
}
4953

54+
func (v Vec) AngleTo(other Vec) float64 {
55+
return NormalizeAngle((v.ToAngle() - other.ToAngle()))
56+
}
57+
5058
func ToRadians(degrees float64) float64 {
5159
return degrees * (math.Pi / 180)
5260
}
5361

5462
func ToDegrees(radians float64) float64 {
5563
return radians * (180 / math.Pi)
5664
}
65+
66+
func NormalizeAngle(degrees float64) float64 {
67+
angle := math.Mod(math.Mod(degrees, 360)+360, 360)
68+
if angle > 180 {
69+
angle = -(360 - angle)
70+
}
71+
return angle
72+
}
73+
74+
func AngleDifference(a, b float64) float64 {
75+
diff := math.Mod((b-a+180), 360) - 180
76+
if diff < -180 {
77+
diff += 360
78+
}
79+
return diff
80+
}

hoverrace/player.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ type Player struct {
3939
}
4040

4141
func (p *Player) update(delta time.Duration) {
42+
diff := AngleDifference(p.angle, p.targetAngle)
43+
p.targetAngle = p.angle + diff
44+
4245
p.move(delta)
4346
p.checkCollisions()
4447

0 commit comments

Comments
 (0)