Skip to content

Commit 3350456

Browse files
authored
Angle core optimizations (#3214)
* Angle core optimizations * Linter pass * Linter pass
1 parent 43fc8dd commit 3350456

File tree

1 file changed

+36
-22
lines changed
  • lua/entities/gmod_wire_expression2/core

1 file changed

+36
-22
lines changed

lua/entities/gmod_wire_expression2/core/angle.lua

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ registerType("angle", "a", Angle(0, 0, 0),
1111
end
1212
)
1313

14-
local pi = math.pi
1514
local floor, ceil = math.floor, math.ceil
1615

1716
/******************************************************************************/
@@ -32,7 +31,7 @@ e2function angle ang(rv1, rv2, rv3)
3231
return Angle(rv1, rv2, rv3)
3332
end
3433

35-
// Convert Vector -> Angle
34+
-- Convert Vector -> Angle
3635
e2function angle ang(vector rv1)
3736
return Angle(rv1[1], rv1[2], rv1[3])
3837
end
@@ -150,7 +149,10 @@ end
150149
__e2setcost(5)
151150

152151
e2function angle angnorm(angle rv1)
153-
return Angle((rv1[1] + 180) % 360 - 180, (rv1[2] + 180) % 360 - 180, (rv1[3] + 180) % 360 - 180)
152+
local ang = Angle(rv1)
153+
ang:Normalize()
154+
155+
return ang
154156
end
155157

156158
e2function number angnorm(rv1)
@@ -173,17 +175,26 @@ end
173175

174176
__e2setcost(2)
175177

176-
// SET methods that returns angles
178+
-- SET methods that returns angles
177179
e2function angle angle:setPitch(rv2)
178-
return Angle(rv2, this[2], this[3])
180+
local ang = Angle(this)
181+
ang.pitch = rv2
182+
183+
return ang
179184
end
180185

181186
e2function angle angle:setYaw(rv2)
182-
return Angle(this[1], rv2, this[3])
187+
local ang = Angle(this)
188+
ang.yaw = rv2
189+
190+
return ang
183191
end
184192

185193
e2function angle angle:setRoll(rv2)
186-
return Angle(this[1], this[2], rv2)
194+
local ang = Angle(this)
195+
ang.roll = rv2
196+
197+
return ang
187198
end
188199

189200
/******************************************************************************/
@@ -241,7 +252,7 @@ e2function angle floor(angle rv1, decimals)
241252
)
242253
end
243254

244-
// Performs modulo on p,y,r separately
255+
-- Performs modulo on p,y,r separately
245256
e2function angle mod(angle rv1, rv2)
246257
local p,y,r
247258
if rv1[1] >= 0 then
@@ -256,7 +267,7 @@ e2function angle mod(angle rv1, rv2)
256267
return Angle(p, y, r)
257268
end
258269

259-
// Modulo where divisors are defined as an angle
270+
-- Modulo where divisors are defined as an angle
260271
e2function angle mod(angle rv1, angle rv2)
261272
local p,y,r
262273
if rv1[1] >= 0 then
@@ -271,7 +282,7 @@ e2function angle mod(angle rv1, angle rv2)
271282
return Angle(p, y, r)
272283
end
273284

274-
// Clamp each p,y,r separately
285+
-- Clamp each p,y,r separately
275286
e2function angle clamp(angle rv1, rv2, rv3)
276287
local p,y,r
277288

@@ -290,7 +301,7 @@ e2function angle clamp(angle rv1, rv2, rv3)
290301
return Angle(p, y, r)
291302
end
292303

293-
// Clamp according to limits defined by two min/max angles
304+
-- Clamp according to limits defined by two min/max angles
294305
e2function angle clamp(angle rv1, angle rv2, angle rv3)
295306
local p,y,r
296307

@@ -309,7 +320,7 @@ e2function angle clamp(angle rv1, angle rv2, angle rv3)
309320
return Angle(p, y, r)
310321
end
311322

312-
// Mix two angles by a given proportion (between 0 and 1)
323+
-- Mix two angles by a given proportion (between 0 and 1)
313324
e2function angle mix(angle rv1, angle rv2, rv3)
314325
local p = rv1[1] * rv3 + rv2[1] * (1-rv3)
315326
local y = rv1[2] * rv3 + rv2[2] * (1-rv3)
@@ -319,7 +330,7 @@ end
319330

320331
__e2setcost(2)
321332

322-
// Circular shift function: shiftr( p,y,r ) = ( r,p,y )
333+
-- Circular shift function: shiftr( p,y,r ) = ( r,p,y )
323334
e2function angle shiftR(angle rv1)
324335
return Angle(rv1[3], rv1[1], rv1[2])
325336
end
@@ -330,7 +341,7 @@ end
330341

331342
__e2setcost(5)
332343

333-
// Returns 1 if the angle lies between (or is equal to) the min/max angles
344+
-- Returns 1 if the angle lies between (or is equal to) the min/max angles
334345
e2function normal inrange(angle rv1, angle rv2, angle rv3)
335346
if rv1[1] < rv2[1] then return 0 end
336347
if rv1[2] < rv2[2] then return 0 end
@@ -343,35 +354,38 @@ e2function normal inrange(angle rv1, angle rv2, angle rv3)
343354
return 1
344355
end
345356

346-
// Rotate an angle around a vector by the given number of degrees
357+
-- Rotate an angle around a vector by the given number of degrees
347358
e2function angle angle:rotateAroundAxis(vector axis, degrees)
348359
local ang = Angle(this)
349360
ang:RotateAroundAxis( axis:GetNormalized(), degrees )
350361
return ang
351362
end
352363

353-
// Convert the magnitude of the angle to radians
364+
-- Convert the magnitude of the angle to radians
365+
local deg2rad = math.pi / 180
366+
local rad2deg = 180 / math.pi
367+
354368
e2function angle toRad(angle rv1)
355-
return Angle(rv1[1] * pi / 180, rv1[2] * pi / 180, rv1[3] * pi / 180)
369+
return rv1 * deg2rad
356370
end
357371

358-
// Convert the magnitude of the angle to degrees
372+
-- Convert the magnitude of the angle to degrees
359373
e2function angle toDeg(angle rv1)
360-
return Angle(rv1[1] * 180 / pi, rv1[2] * 180 / pi, rv1[3] * 180 / pi)
374+
return rv1 * rad2deg
361375
end
362376

363377
/******************************************************************************/
364378

365379
e2function vector angle:forward()
366-
return Angle(this[1], this[2], this[3]):Forward()
380+
return this:Forward()
367381
end
368382

369383
e2function vector angle:right()
370-
return Angle(this[1], this[2], this[3]):Right()
384+
return this:Right()
371385
end
372386

373387
e2function vector angle:up()
374-
return Angle(this[1], this[2], this[3]):Up()
388+
return this:Up()
375389
end
376390

377391
e2function string toString(angle a)

0 commit comments

Comments
 (0)