File tree Expand file tree Collapse file tree 3 files changed +29
-0
lines changed Expand file tree Collapse file tree 3 files changed +29
-0
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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+
3438func (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+
5058func ToRadians (degrees float64 ) float64 {
5159 return degrees * (math .Pi / 180 )
5260}
5361
5462func 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+ }
Original file line number Diff line number Diff line change @@ -39,6 +39,9 @@ type Player struct {
3939}
4040
4141func (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
You can’t perform that action at this time.
0 commit comments