summaryrefslogtreecommitdiff
path: root/examples/resources/lib/vector3.lua
diff options
context:
space:
mode:
authorjussi2024-04-17 00:35:58 +0300
committerjussi2024-04-17 00:35:58 +0300
commit70b40f67824b3d612235c382aa83821c054fa51e (patch)
tree5d594cc457d6fed8af87e31977a0b9352677a4f5 /examples/resources/lib/vector3.lua
parent41b67398247d9031aed4ca6e3ffd6799ec8b1bca (diff)
downloadreilua-enhanced-70b40f67824b3d612235c382aa83821c054fa51e.tar.gz
reilua-enhanced-70b40f67824b3d612235c382aa83821c054fa51e.tar.bz2
reilua-enhanced-70b40f67824b3d612235c382aa83821c054fa51e.zip
Object libraries like Vector2 optimizations.
Diffstat (limited to 'examples/resources/lib/vector3.lua')
-rw-r--r--examples/resources/lib/vector3.lua108
1 files changed, 75 insertions, 33 deletions
diff --git a/examples/resources/lib/vector3.lua b/examples/resources/lib/vector3.lua
index eda39e2..cdc4576 100644
--- a/examples/resources/lib/vector3.lua
+++ b/examples/resources/lib/vector3.lua
@@ -44,31 +44,31 @@ local metatable = {
}
function Vector3:new( x, y, z )
- if type( x ) == "table" then
- x, y, z = table.unpack( x )
- elseif type( x ) == "nil" then
- x, y, z = 0, 0, 0
- end
+ local object = setmetatable( {}, metatable )
+ object.x = x or 0
+ object.y = y or 0
+ object.z = z or 0
+
+ return object
+end
+
+function Vector3:newT( t )
local object = setmetatable( {}, metatable )
- object.x = x
- object.y = y
- object.z = z
+ object.x, object.y, object.z = table.unpack( t )
return object
end
function Vector3:set( x, y, z )
- if type( x ) == "table" then
- x, y, z = table.unpack( x )
- elseif type( x ) == "nil" then
- x, y, z = 0, 0, 0
- end
+ self.x = x or 0
+ self.y = y or 0
+ self.z = z or 0
+end
- self.x = x
- self.y = y
- self.z = z
+function Vector3:setT( t )
+ self.x, self.y, self.z = table.unpack( t )
end
function Vector3:arr()
@@ -100,11 +100,11 @@ function Vector3:abs()
end
function Vector3:min( v2 )
- return Vector3:new( RL.Vector3Min( self, v2 ) )
+ return Vector3:newT( RL.Vector3Min( self, v2 ) )
end
function Vector3:max( v2 )
- return Vector3:new( RL.Vector3Max( self, v2 ) )
+ return Vector3:newT( RL.Vector3Max( self, v2 ) )
end
function Vector3:floor()
@@ -116,23 +116,23 @@ function Vector3:ceil()
end
function Vector3:addValue( value )
- return Vector3:new( RL.Vector3AddValue( self, value ) )
+ return Vector3:newT( RL.Vector3AddValue( self, value ) )
end
function Vector3:subValue( value )
- return Vector3:new( RL.Vector3SubtractValue( self, value ) )
+ return Vector3:newT( RL.Vector3SubtractValue( self, value ) )
end
function Vector3:scale( scalar )
- return Vector3:new( RL.Vector3Scale( self, scalar ) )
+ return Vector3:newT( RL.Vector3Scale( self, scalar ) )
end
function Vector3:cross( v2 )
- return Vector3:new( RL.Vector3CrossProduct( self, v2 ) )
+ return Vector3:newT( RL.Vector3CrossProduct( self, v2 ) )
end
function Vector3:perpendicular()
- return Vector3:new( RL.Vector3Perpendicular( self ) )
+ return Vector3:newT( RL.Vector3Perpendicular( self ) )
end
function Vector3:length()
@@ -160,11 +160,11 @@ function Vector3:angle( v2 )
end
function Vector3:negate()
- return Vector3:new( RL.Vector3Negate( self ) )
+ return Vector3:newT( RL.Vector3Negate( self ) )
end
function Vector3:normalize()
- return Vector3:new( RL.Vector3Normalize( self ) )
+ return Vector3:newT( RL.Vector3Normalize( self ) )
end
function Vector3:orthoNormalize( v2 )
@@ -173,35 +173,35 @@ function Vector3:orthoNormalize( v2 )
end
function Vector3:transform( mat )
- return Vector3:new( RL.Vector3Transform( self, mat ) )
+ return Vector3:newT( RL.Vector3Transform( self, mat ) )
end
function Vector3:rotateByQuaternion( q )
- return Vector3:new( RL.Vector3RotateByQuaternion( self, q ) )
+ return Vector3:newT( RL.Vector3RotateByQuaternion( self, q ) )
end
function Vector3:rotateByAxisAngle( axis, angle )
- return Vector3:new( RL.Vector3RotateByAxisAngle( self, axis, angle ) )
+ return Vector3:newT( RL.Vector3RotateByAxisAngle( self, axis, angle ) )
end
function Vector3:lerp( v2, value )
- return Vector3:new( RL.Vector3Lerp( self, v2, value ) )
+ return Vector3:newT( RL.Vector3Lerp( self, v2, value ) )
end
function Vector3:reflect( normal )
- return Vector3:new( RL.Vector3Reflect( self, normal ) )
+ return Vector3:newT( RL.Vector3Reflect( self, normal ) )
end
function Vector3:invert()
- return Vector3:new( RL.Vector3Invert( self ) )
+ return Vector3:newT( RL.Vector3Invert( self ) )
end
function Vector3:clamp( min, max )
- return Vector3:new( RL.Vector3Clamp( self, min, max ) )
+ return Vector3:newT( RL.Vector3Clamp( self, min, max ) )
end
function Vector3:clampValue( min, max )
- return Vector3:new( RL.Vector3ClampValue( self, min, max ) )
+ return Vector3:newT( RL.Vector3ClampValue( self, min, max ) )
end
function Vector3:equals( v2 )
@@ -232,4 +232,46 @@ function Vector3:divEq( v2 )
self.z = self.z / v2.z
end
+local TEMP_COUNT = 100
+local tempPool = {}
+local curTemp = 1
+
+for _ = 1, TEMP_COUNT do
+ table.insert( tempPool, Vector3:new( 0, 0, 0 ) )
+end
+
+-- Uses pre generated objects to avoid "slow" table generation.
+function Vector3:temp( x, y, z )
+ local object = tempPool[ curTemp ]
+ curTemp = curTemp + 1
+
+ if TEMP_COUNT < curTemp then
+ curTemp = 1
+ end
+
+ object.x = x or 0
+ object.y = y or 0
+ object.z = z or 0
+
+ return object
+end
+
+-- Uses pre generated objects to avoid "slow" table generation.
+function Vector3:tempT( t )
+ local object = tempPool[ curTemp ]
+ curTemp = curTemp + 1
+
+ if TEMP_COUNT < curTemp then
+ curTemp = 1
+ end
+
+ object.x, object.y, object.z = table.unpack( t )
+
+ return object
+end
+
+function Vector3:getTempId()
+ return curTemp
+end
+
return Vector3