summaryrefslogtreecommitdiff
path: root/examples/resources
diff options
context:
space:
mode:
Diffstat (limited to 'examples/resources')
-rw-r--r--examples/resources/lib/color.lua2
-rw-r--r--examples/resources/lib/matrix.lua8
-rw-r--r--examples/resources/lib/quaternion.lua153
3 files changed, 159 insertions, 4 deletions
diff --git a/examples/resources/lib/color.lua b/examples/resources/lib/color.lua
index 5f868b6..8948ac7 100644
--- a/examples/resources/lib/color.lua
+++ b/examples/resources/lib/color.lua
@@ -3,6 +3,8 @@ if table.unpack == nil then
table.unpack = unpack
end
+local Vector3 = require( "vector3" )
+
Color = {}
Color.meta = {
__index = Color,
diff --git a/examples/resources/lib/matrix.lua b/examples/resources/lib/matrix.lua
index 4b8cee3..e825102 100644
--- a/examples/resources/lib/matrix.lua
+++ b/examples/resources/lib/matrix.lua
@@ -27,10 +27,10 @@ Matrix.meta = {
__index = Matrix,
__tostring = function( m )
return "{\n"
- .." { "..m.m[1][1]..", "..m.m[1][2]..", "..m.m[1][3]..", "..m.m[1][4].." },\n"
- .." { "..m.m[2][1]..", "..m.m[2][2]..", "..m.m[2][3]..", "..m.m[2][4].." },\n"
- .." { "..m.m[3][1]..", "..m.m[3][2]..", "..m.m[3][3]..", "..m.m[3][4].." },\n"
- .." { "..m.m[3][1]..", "..m.m[3][2]..", "..m.m[3][3]..", "..m.m[3][4].." },\n"
+ .." {"..m.m[1][1]..", "..m.m[1][2]..", "..m.m[1][3]..", "..m.m[1][4].."},\n"
+ .." {"..m.m[2][1]..", "..m.m[2][2]..", "..m.m[2][3]..", "..m.m[2][4].."},\n"
+ .." {"..m.m[3][1]..", "..m.m[3][2]..", "..m.m[3][3]..", "..m.m[3][4].."},\n"
+ .." {"..m.m[3][1]..", "..m.m[3][2]..", "..m.m[3][3]..", "..m.m[3][4].."},\n"
.."}"
end,
__add = function( m1, m2 )
diff --git a/examples/resources/lib/quaternion.lua b/examples/resources/lib/quaternion.lua
new file mode 100644
index 0000000..4c42265
--- /dev/null
+++ b/examples/resources/lib/quaternion.lua
@@ -0,0 +1,153 @@
+-- For luaJit compatibility.
+if table.unpack == nil then
+ table.unpack = unpack
+end
+
+local Vector3 = require( "vector3" )
+local Matrix = require( "matrix" )
+
+Quaternion = {}
+Quaternion.meta = {
+ __index = Quaternion,
+ __tostring = function( q )
+ return "{"..tostring( q.x )..", "..tostring( q.y )..", "..tostring( q.z )..", "..tostring( q.w ).."}"
+ end,
+ __add = function( q1, q2 )
+ return Quaternion:new( RL.QuaternionAdd( q1, q2 ) )
+ end,
+ __sub = function( q1, q2 )
+ return Quaternion:new( RL.QuaternionSubtract( q1, q2 ) )
+ end,
+ __mul = function( q1, q2 )
+ return Quaternion:new( RL.QuaternionMultiply( q1, q2 ) )
+ end,
+ __div = function( q1, q2 )
+ return Quaternion:new( RL.QuaternionDivide( q1, q2 ) )
+ end,
+ __unm = function( q )
+ return Quaternion:new( RL.QuaternionInvert( q ) )
+ end,
+ __len = function( _ )
+ return 4
+ end,
+ __eq = function( q1, q2 )
+ return RL.QuaternionEquals( q1, q2 ) == 1
+ end,
+}
+
+function Quaternion:new( x, y, z, w )
+ if type( x ) == "table" then
+ x, y, z, w = table.unpack( x )
+ elseif type( x ) == "nil" then
+ x, y, z, w = 0, 0, 0, 1 -- QuaternionIdentity.
+ end
+
+ local object = setmetatable( {}, Quaternion.meta )
+
+ object.x = x
+ object.y = y
+ object.z = z
+ object.w = w
+
+ return object
+end
+
+function Quaternion:set( x, y, z, w )
+ if type( x ) == "table" then
+ x, y, z, w = table.unpack( x )
+ elseif type( x ) == "nil" then
+ x, y, z, w = 0, 0, 0, 1 -- QuaternionIdentity.
+ end
+
+ self.x = x
+ self.y = y
+ self.z = z
+ self.w = w
+end
+
+function Quaternion:arr()
+ return { self.x, self.y, self.z, self.w }
+end
+
+function Quaternion:unpack()
+ return self.x, self.y, self.z, self.w
+end
+
+function Quaternion:clone()
+ return Quaternion:new( self.x, self.y, self.z, self.w )
+end
+
+function Quaternion:addValue( value )
+ return Quaternion:new( RL.QuaternionAddValue( self, value ) )
+end
+
+function Quaternion:subValue( value )
+ return Quaternion:new( RL.QuaternionSubtractValue( self, value ) )
+end
+
+function Quaternion:identity()
+ return Quaternion:new( RL.QuaternionIdentity() )
+end
+
+function Quaternion:length()
+ return RL.QuaternionLength( self )
+end
+
+function Quaternion:normalize()
+ return Quaternion:new( RL.QuaternionNormalize( self ) )
+end
+
+function Quaternion:invert()
+ return Quaternion:new( RL.QuaternionInvert( self ) )
+end
+
+function Quaternion:scale( scalar )
+ return Quaternion:new( RL.QuaternionScale( self, scalar ) )
+end
+
+function Quaternion:lerp( q2, value )
+ return Quaternion:new( RL.QuaternionLerp( self, q2, value ) )
+end
+
+function Quaternion:nLerp( q2, value )
+ return Quaternion:new( RL.QuaternionNLerp( self, q2, value ) )
+end
+
+function Quaternion:sLerp( q2, value )
+ return Quaternion:new( RL.QuaternionSLerp( self, q2, value ) )
+end
+
+function Quaternion:fromVector3ToVector3( from, to )
+ return Vector3:new( RL.QuaternionFromVector3ToVector3( from, to ) )
+end
+
+function Quaternion:fromMatrix( mat )
+ return Quaternion:new( RL.QuaternionFromMatrix( mat ) )
+end
+
+function Quaternion:toMatrix()
+ return Matrix:new( RL.QuaternionToMatrix( self ) )
+end
+
+function Quaternion:fromAxisAngle( axis, angle )
+ return Quaternion:new( RL.QuaternionFromAxisAngle( axis, angle ) )
+end
+
+function Quaternion:toAxisAngle()
+ local axis, angle = Quaternion:new( RL.QuaternionToAxisAngle( self ) )
+ return Vector3:new( axis ), angle
+end
+
+function Quaternion:fromEuler( pitch, yaw, roll )
+ return Quaternion:new( RL.QuaternionFromEuler( pitch, yaw, roll ) )
+end
+
+function Quaternion:toEuler()
+ return Vector3:new( RL.QuaternionToEuler( self ) )
+end
+
+function Quaternion:transform( mat )
+ return Quaternion:new( RL.QuaternionTransform( self, mat ) )
+end
+
+return Quaternion