Object lib serialization.

This commit is contained in:
jussi
2024-05-22 00:11:40 +03:00
parent c95c797da6
commit cb1bc03681
10 changed files with 198 additions and 8 deletions

View File

@@ -50,6 +50,7 @@ DETAILED CHANGES:
- ADDED: GetMeshData.
- FIXED: GenMeshCustom indices wasn't changing triangleCount.
- ADDED: GetPlatform.
- ADDED: Object lib serialization.
------------------------------------------------------------------------
Release: ReiLua version 0.7.0 Using Raylib 5.0 and Forked Raygui 4.0

View File

@@ -0,0 +1,136 @@
-- For luaJit compatibility.
if table.unpack == nil then
table.unpack = unpack
end
local Vector3 = require( "vector3" )
local BoundingBox = {}
local metatable = {
__index = BoundingBox,
__tostring = function( b )
return "{{"..tostring( b.min.x )..", "..tostring( b.min.y )..", "..tostring( b.min.z ).."}, {"
..tostring( b.max.x )..", "..tostring( b.max.y )..", "..tostring( b.max.z ).."}}"
end,
}
--- Expects format { ... }, { ... }
function BoundingBox:new( min, max )
local object = setmetatable( {}, metatable )
object.min = Vector3:newT( min )
object.max = Vector3:newT( max )
return object
end
--- Expects format { { ... }, { ... } }
function BoundingBox:newT( t )
local object = setmetatable( {}, metatable )
object.min = Vector3:newT( t[1] )
object.max = Vector3:newT( t[2] )
return object
end
--- Expects format { Vector3, Vector3 }
function BoundingBox:newV( min, max )
local object = setmetatable( {}, metatable )
object.min = min:clone()
object.max = max:clone()
return object
end
--- Expects format BoundingBox
function BoundingBox:newB( b )
local object = setmetatable( {}, metatable )
object.min = b.min:clone()
object.max = b.max:clone()
return object
end
function BoundingBox:serialize()
return table.concat( { "BoundingBox:new({", self.min.x, ",", self.min.y, ",", self.min.z, "},{", self.max.x, ",", self.max.y, ",", self.max.z, "})" } )
end
--- Expects format { ... }, { ... }
function BoundingBox:set( min, max )
self.min:setT( min )
self.max:setT( max )
end
--- Expects format { { ... }, { ... } }
function BoundingBox:setT( t )
self.min:setT( t[1] )
self.max:setT( t[2] )
end
--- Expects format { Vector3, Vector3 }
function BoundingBox:setV( min, max )
self.min:setV( min )
self.max:setV( max )
end
--- Expects format BoundingBox
function BoundingBox:setB( b )
self.min:setV( b.min )
self.max:setV( b.max )
end
function BoundingBox:arr()
return { { self.min.x, self.min.y, self.min.z }, { self.max.x, self.max.y, self.max.z } }
end
function BoundingBox:unpack()
return self.min, self.max
end
function BoundingBox:clone()
return BoundingBox:newB( self )
end
function BoundingBox:scale( scalar )
return BoundingBox:newV( self.min, self.max:scale( scalar ) )
end
function BoundingBox:getPoints()
return {
self.min:clone(), -- Down back left.
Vector3:new( self.max.x, self.min.y, self.min.z ), -- Down back right.
Vector3:new( self.min.x, self.min.y, self.max.z ), -- Down front left.
Vector3:new( self.max.x, self.min.y, self.max.z ), -- Down front right.
Vector3:new( self.min.x, self.max.y, self.min.z ), -- Up back left.
Vector3:new( self.max.x, self.max.y, self.min.z ), -- Up back right.
Vector3:new( self.min.x, self.max.y, self.max.z ), -- Up front left.
self.max:clone(), -- Up front right.
}
end
function BoundingBox:checkCollisionBox( b )
return RL.CheckCollisionBoxes( self:maxToPos(), b:maxToPos() )
end
function BoundingBox:checkCollisionSphere( center, radius )
return RL.CheckCollisionBoxSphere( self:maxToPos(), center, radius )
end
function BoundingBox:getRayCollision( ray )
return RL.GetRayCollisionBox( ray, self:maxToPos() )
end
-- Max to position from size.
function BoundingBox:maxToPos()
return BoundingBox:new( self.min, self.min + self.max )
end
-- Max to size from position.
function BoundingBox:maxToSize()
return BoundingBox:new( self.min, self.max - self.min )
end
return BoundingBox

View File

@@ -91,6 +91,10 @@ function Color:setC( c )
self.a = c.a
end
function Color:serialize()
return "Color:new("..self.r..","..self.g..","..self.b..","..self.a..")"
end
function Color:arr()
return { self.r, self.g, self.b, self.a }
end

View File

@@ -20,7 +20,7 @@ local function copyMatrix( orig )
end
local Matrix = {}
Matrix.meta = {
local metatable = {
__index = Matrix,
__tostring = function( m )
return "{\n"
@@ -45,7 +45,7 @@ Matrix.meta = {
}
function Matrix:new( m )
local object = setmetatable( {}, Matrix.meta )
local object = setmetatable( {}, metatable )
object.m = copyMatrix( m )
@@ -56,6 +56,28 @@ function Matrix:set( m )
self.m = copyMatrix( m )
end
function Matrix:serialize()
local str = { "Matrix:new({" }
for i, row in ipairs( self.m ) do
table.insert( str, "{" )
for c, v in ipairs( row ) do
table.insert( str, v )
if c < 4 then
table.insert( str, "," )
end
end
table.insert( str, "}" )
if i < 4 then
table.insert( str, "," )
end
end
table.insert( str, "})" )
return table.concat( str )
end
function Matrix:clone()
return Matrix:new( self.m )
end

View File

@@ -86,6 +86,10 @@ function Quaternion:setQ( q )
self.w = q.w
end
function Quaternion:serialize()
return "Quaternion:new("..self.x..","..self.y..","..self.z..","..self.w..")"
end
function Quaternion:arr()
return { self.x, self.y, self.z, self.w }
end

View File

@@ -6,7 +6,7 @@ end
local Vector2 = require( "vector2" )
local Rectangle = {}
Rectangle.meta = {
local metatable = {
__index = Rectangle,
__tostring = function( r )
return "{"..tostring( r.x )..", "..tostring( r.y )..", "..tostring( r.width )..", "..tostring( r.height ).."}"
@@ -44,7 +44,7 @@ Rectangle.meta = {
}
function Rectangle:new( x, y, width, height )
local object = setmetatable( {}, Rectangle.meta )
local object = setmetatable( {}, metatable )
object.x = x or 0
object.y = y or object.x
@@ -55,7 +55,7 @@ function Rectangle:new( x, y, width, height )
end
function Rectangle:newT( t )
local object = setmetatable( {}, Rectangle.meta )
local object = setmetatable( {}, metatable )
object.x, object.y, object.width, object.height = table.unpack( t )
@@ -63,7 +63,7 @@ function Rectangle:newT( t )
end
function Rectangle:newR( r )
local object = setmetatable( {}, Rectangle.meta )
local object = setmetatable( {}, metatable )
object.x = r.x
object.y = r.y
@@ -91,6 +91,10 @@ function Rectangle:setR( r )
self.height = r.height
end
function Rectangle:serialize()
return "Rectangle:new("..self.x..","..self.y..","..self.width..","..self.height..")"
end
function Rectangle:arr()
return { self.x, self.y, self.width, self.height }
end

View File

@@ -32,6 +32,10 @@ function Rune:set( string )
self.string = string or ""
end
function Rune:serialize()
return "Rune:new("..self.string..")"
end
function Rune:clone()
return Rune:new( self.string )
end

View File

@@ -132,7 +132,7 @@ function utillib.toBoolean( v )
return false
end
function utillib.bool2Number( bool )
function utillib.boolToNumber( bool )
return bool and 1 or 0
end

View File

@@ -67,7 +67,6 @@ function Vector2:newV( v )
return object
end
function Vector2:set( x, y )
self.x = x or 0
self.y = y or self.x
@@ -82,6 +81,10 @@ function Vector2:setV( v )
self.y = v.y
end
function Vector2:serialize()
return "Vector2:new("..self.x..","..self.y..")"
end
function Vector2:arr()
return { self.x, self.y }
end
@@ -106,6 +109,10 @@ function Vector2:max( v2 )
return Vector2:new( math.max( self.x, v2.x ), math.max( self.y, v2.y ) )
end
function Vector2:round()
return Vector2:new( RL.Round( self.x ), RL.Round( self.y ) )
end
function Vector2:floor()
return Vector2:new( math.floor( self.x ), math.floor( self.y ) )
end

View File

@@ -87,6 +87,10 @@ function Vector3:setV( v )
self.z = v.z
end
function Vector3:serialize()
return "Vector3:new("..self.x..","..self.y..","..self.z..")"
end
function Vector3:arr()
return { self.x, self.y, self.z }
end
@@ -123,6 +127,10 @@ function Vector3:max( v2 )
return Vector3:newT( RL.Vector3Max( self, v2 ) )
end
function Vector3:round()
return Vector3:new( RL.Round( self.x ), RL.Round( self.y ), RL.Round( self.z ) )
end
function Vector3:floor()
return Vector3:new( math.floor( self.x ), math.floor( self.y ), math.floor( self.z ) )
end