summaryrefslogtreecommitdiff
path: root/examples/resources
diff options
context:
space:
mode:
authorjussi2023-04-14 00:34:43 +0300
committerjussi2023-04-14 00:34:43 +0300
commitd3164d838c63e134ff3963a4fe911180b1a94d18 (patch)
tree9ab0c61acd83c7ac5aa750bd2152cc6baf29dd68 /examples/resources
parentdc2edd69440fcc2470a45562149166695d4edbcc (diff)
downloadreilua-enhanced-d3164d838c63e134ff3963a4fe911180b1a94d18.tar.gz
reilua-enhanced-d3164d838c63e134ff3963a4fe911180b1a94d18.tar.bz2
reilua-enhanced-d3164d838c63e134ff3963a4fe911180b1a94d18.zip
lua lib folder has not been updating in a while since gitignore lib in root. WHOOPS!
Diffstat (limited to 'examples/resources')
-rwxr-xr-xexamples/resources/clib/rllib.sobin15576 -> 0 bytes
-rwxr-xr-xexamples/resources/clib/sampleclib.sobin15336 -> 0 bytes
-rw-r--r--examples/resources/lib/camera3d.lua166
-rw-r--r--examples/resources/lib/raygui.lua955
4 files changed, 1121 insertions, 0 deletions
diff --git a/examples/resources/clib/rllib.so b/examples/resources/clib/rllib.so
deleted file mode 100755
index 6368e17..0000000
--- a/examples/resources/clib/rllib.so
+++ /dev/null
Binary files differ
diff --git a/examples/resources/clib/sampleclib.so b/examples/resources/clib/sampleclib.so
deleted file mode 100755
index b232cc9..0000000
--- a/examples/resources/clib/sampleclib.so
+++ /dev/null
Binary files differ
diff --git a/examples/resources/lib/camera3d.lua b/examples/resources/lib/camera3d.lua
new file mode 100644
index 0000000..1e51844
--- /dev/null
+++ b/examples/resources/lib/camera3d.lua
@@ -0,0 +1,166 @@
+Util = require( "utillib" )
+Vec2 = require( "vector2" )
+Vec3 = require( "vector3" )
+
+Camera3D = {}
+Camera3D.meta = {
+ __index = Camera3D,
+}
+Camera3D.MODES = {
+ CUSTOM = 0,
+ FREE = 1,
+ FIRST_PERSON = 2,
+ ORBITAL = 3,
+}
+Camera3D.KEYS = {
+ FORWARD = RL.KEY_W,
+ BACKWARD = RL.KEY_S,
+ RIGHT = RL.KEY_D,
+ LEFT = RL.KEY_A,
+ PAN = RL.KEY_LEFT_SHIFT,
+ FAST = RL.KEY_LEFT_SHIFT,
+}
+Camera3D.MOUSE_MOVE_SPEED = 0.5
+Camera3D.KEYBOARD_MOVE_SPEED = 10
+Camera3D.KEYBOARD_MOVE_SPEED_MULTI = 3
+Camera3D.TURN_SPEED = 0.15
+Camera3D.ORBITAL_SPEED = 0.5
+Camera3D.ZOOM_AMOUNT = 0.1
+
+function Camera3D:new()
+ local object = setmetatable( {}, Camera3D.meta )
+
+ object.camera = RL.CreateCamera3D()
+ object.mode = object.MODES.CUSTOM
+
+ return object
+end
+
+function Camera3D:setPosition( pos )
+ RL.SetCamera3DPosition( self.camera, pos )
+end
+
+function Camera3D:setTarget( target )
+ RL.SetCamera3DTarget( self.camera, target )
+end
+
+function Camera3D:setUp( up )
+ RL.SetCamera3DUp( self.camera, up )
+end
+
+function Camera3D:setFoyv( foyv )
+ RL.SetCamera3DFovy( self.camera, foyv )
+end
+
+function Camera3D:setProjection( projection )
+ RL.SetCamera3DProjection( self.camera, projection )
+end
+
+function Camera3D:getPosition()
+ return Vec3:new( RL.GetCamera3DPosition( self.camera ) )
+end
+
+function Camera3D:getTarget()
+ return Vec3:new( RL.GetCamera3DTarget( self.camera ) )
+end
+
+function Camera3D:getUp()
+ return Vec3:new( RL.GetCamera3DUp( self.camera ) )
+end
+
+function Camera3D:getFoyv()
+ return RL.GetCamera3DFovy( self.camera )
+end
+
+function Camera3D:getProjection()
+ return RL.GetCamera3DProjection( self.camera )
+end
+
+--- Returns the cameras forward vector ( normalized )
+function Camera3D:getForward()
+ return Vec3:new( RL.GetCamera3DForward( self.camera ) )
+end
+
+--- Returns the cameras up vector ( normalized ) Note: The up vector might not be perpendicular to the forward vector
+function Camera3D:getUpward()
+ return Vec3:new( RL.GetCamera3DUpNormalized( self.camera ) )
+end
+
+function Camera3D:process( delta )
+ if self.mode == self.MODES.FREE then
+ if RL.IsMouseButtonDown( RL.MOUSE_BUTTON_MIDDLE ) then
+ local mouseDelta = Vec2:new( RL.GetMouseDelta() )
+
+ if RL.IsKeyDown( self.KEYS.PAN ) then
+ mouseDelta = mouseDelta:scale( self.MOUSE_MOVE_SPEED * delta )
+ local forward = RL.GetCamera3DForward( self.camera )[2]
+
+ RL.Camera3DMoveRight( self.camera, -mouseDelta.x, true )
+ RL.Camera3DMoveUp( self.camera, mouseDelta.y * -( ( 1 - math.abs( forward ) ) * Util.sign( forward ) ) )
+ RL.Camera3DMoveForward( self.camera, mouseDelta.y * math.abs( forward ), true )
+ else
+ mouseDelta = mouseDelta:scale( self.TURN_SPEED * delta )
+
+ RL.Camera3DYaw( self.camera, -mouseDelta.x, true )
+ RL.Camera3DPitch( self.camera, -mouseDelta.y, false, true, false )
+ end
+ end
+
+ local mouseScroll = RL.GetMouseWheelMove()
+
+ if mouseScroll ~= 0 then
+ RL.Camera3DMoveToTarget( self.camera, self.ZOOM_AMOUNT * self:getTargetDistance() * -mouseScroll )
+ end
+ elseif self.mode == self.MODES.FIRST_PERSON then
+ local mouseDelta = Vec2:new( RL.GetMouseDelta() )
+
+ mouseDelta = mouseDelta:scale( self.TURN_SPEED * delta )
+
+ RL.Camera3DYaw( self.camera, -mouseDelta.x, false )
+ RL.Camera3DPitch( self.camera, -mouseDelta.y, false, false, false )
+ RL.SetMousePosition( Vec2:new( RL.GetScreenSize() ):scale( 0.5 ) )
+
+ local distance = self.KEYBOARD_MOVE_SPEED * delta
+
+ if RL.IsKeyDown( self.KEYS.FAST ) then
+ distance = distance * self.KEYBOARD_MOVE_SPEED_MULTI
+ end
+
+ if RL.IsKeyDown( self.KEYS.FORWARD ) then
+ RL.Camera3DMoveForward( self.camera, distance, false )
+ elseif RL.IsKeyDown( self.KEYS.BACKWARD ) then
+ RL.Camera3DMoveForward( self.camera, -distance, false )
+ end
+
+ if RL.IsKeyDown( self.KEYS.RIGHT ) then
+ RL.Camera3DMoveRight( self.camera, distance, false )
+ elseif RL.IsKeyDown( self.KEYS.LEFT ) then
+ RL.Camera3DMoveRight( self.camera, -distance, false )
+ end
+ elseif self.mode == self.MODES.ORBITAL then
+ RL.Camera3DYaw( self.camera, self.ORBITAL_SPEED * delta, true )
+ end
+end
+
+--- Draw camera target.
+function Camera3D:draw()
+ local targetPos = self:getTarget()
+
+ RL.DrawLine3D( targetPos + Vec3:new( -0.5, 0, 0 ), targetPos + Vec3:new( 0.5, 0, 0 ), RL.GREEN )
+ RL.DrawLine3D( targetPos + Vec3:new( 0, -0.5, 0 ), targetPos + Vec3:new( 0, 0.5, 0 ), RL.BLUE )
+ RL.DrawLine3D( targetPos + Vec3:new( 0, 0, -0.5 ), targetPos + Vec3:new( 0, 0, 0.5 ), RL.RED )
+end
+
+function Camera3D:getTargetDistance()
+ return RL.Vector3Distance( self:getPosition(), self:getTarget() )
+end
+
+function Camera3D:beginMode3D()
+ RL.BeginMode3D( self.camera )
+end
+
+function Camera3D:endMode3D()
+ RL.EndMode3D()
+end
+
+return Camera3D
diff --git a/examples/resources/lib/raygui.lua b/examples/resources/lib/raygui.lua
new file mode 100644
index 0000000..dda2f80
--- /dev/null
+++ b/examples/resources/lib/raygui.lua
@@ -0,0 +1,955 @@
+-- Wrapper for raygui that should make using it a bit more convenient.
+
+Util = require( "utillib" )
+Rect = require( "rectangle" )
+Vec2 = require( "vector2" )
+-- Color = require( "color" )
+
+---@param text string
+---@return integer count, table rowItemCounts
+local function getItemCount( text )
+ local count, rowItemCounts = 1, { 1 }
+
+ for i = 1, #text do
+ if text:sub( i, i ) == "\n" then
+ table.insert( rowItemCounts, 1 )
+
+ count = count + 1
+ elseif text:sub( i, i ) == ";" then
+ rowItemCounts[ #rowItemCounts ] = rowItemCounts[ #rowItemCounts ] + 1
+
+ count = count + 1
+ end
+ end
+
+ return count, rowItemCounts
+end
+
+local function getItems( text )
+ if text == "" then
+ return {}
+ end
+
+ local items = {}
+ local startChar = 1
+
+ for i = 1, #text do
+ if text:sub( i, i ) == "\n" or text:sub( i, i ) == ";" then
+ table.insert( items, text:sub( startChar, i - 1 ) )
+ startChar = i + 1
+ end
+ end
+ -- Last one.
+ table.insert( items, text:sub( startChar, #text ) )
+
+ return items
+end
+
+-- Raygui.
+
+Raygui = {}
+Raygui.__index = Raygui
+
+function Raygui:new()
+ local object = setmetatable( {}, Raygui )
+
+ object.elements = {}
+ object.focused = 0
+
+ return object
+end
+
+function Raygui:add( element )
+ table.insert( self.elements, element )
+
+ return element
+end
+
+function Raygui:process()
+ for i = #self.elements, 1, -1 do
+ local element = self.elements[i]
+
+ if element.process ~= nil then
+ if element:process() then
+ self.focused = i
+
+ return
+ end
+ end
+ end
+end
+
+function Raygui:draw()
+ RL.GuiLock()
+
+ for i, element in ipairs( self.elements ) do
+ if i == self.focused then
+ RL.GuiUnlock()
+ end
+
+ if element.draw ~= nil then
+ element:draw()
+ end
+ end
+end
+
+-- Label.
+
+Label = {}
+Label.__index = Label
+
+function Label:new( bounds, text )
+ local object = setmetatable( {}, Label )
+
+ object.bounds = bounds:clone()
+ object.text = text
+
+ return object
+end
+
+function Label:setText( text )
+ self.text = text
+end
+
+function Label:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Label:draw()
+ RL.GuiLabel( self.bounds, self.text )
+end
+
+function Label:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- Button.
+
+Button = {}
+Button.__index = Button
+
+function Button:new( bounds, text, callback )
+ local object = setmetatable( {}, Button )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.callback = callback
+
+ object.clicked = false
+
+ return object
+end
+
+function Button:setText( text )
+ self.text = text
+end
+
+function Button:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Button:draw()
+ self.clicked = RL.GuiButton( self.bounds, self.text )
+
+ if self.clicked and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function Button:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- LabelButton.
+
+LabelButton = {}
+LabelButton.__index = LabelButton
+
+function LabelButton:new( bounds, text, callback )
+ local object = setmetatable( {}, LabelButton )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.callback = callback
+
+ object.clicked = false
+
+ return object
+end
+
+function LabelButton:setText( text )
+ self.text = text
+end
+
+function LabelButton:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function LabelButton:draw()
+ self.clicked = RL.GuiLabelButton( self.bounds, self.text )
+
+ if self.clicked and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function LabelButton:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- Toggle.
+
+Toggle = {}
+Toggle.__index = Toggle
+
+function Toggle:new( bounds, text, active, callback )
+ local object = setmetatable( {}, Toggle )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.active = active
+ object.callback = callback
+
+ return object
+end
+
+function Toggle:setText( text )
+ self.text = text
+end
+
+function Toggle:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Toggle:draw()
+ local oldActive = self.active
+
+ self.active = RL.GuiToggle( self.bounds, self.text, self.active )
+
+ if self.active ~= oldActive and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function Toggle:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- ToggleGroup.
+
+ToggleGroup = {}
+ToggleGroup.__index = ToggleGroup
+
+function ToggleGroup:new( bounds, text, active, callback )
+ local object = setmetatable( {}, ToggleGroup )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.active = active
+ object.callback = callback
+
+ object.focusBounds = {}
+ object:updateFocusBounds()
+
+ return object
+end
+
+function ToggleGroup:setText( text )
+ self.text = text
+
+ self:updateFocusBounds()
+end
+
+function ToggleGroup:getItem( id )
+ return getItems( self.text )[ id + 1 ]
+end
+
+function ToggleGroup:updateFocusBounds()
+ if self.text == "" then
+ return
+ end
+
+ local count, rowItemCounts = getItemCount( self.text )
+
+ self.focusBounds = {}
+
+ for y, rowItemCount in ipairs( rowItemCounts ) do
+ for x = 1, rowItemCount do
+ local pos = Vec2:new( x - 1, y - 1 )
+
+ table.insert( self.focusBounds, Rect:new(
+ self.bounds.x + pos.x * ( self.bounds.width + RL.GuiGetStyle( RL.TOGGLE, RL.GROUP_PADDING ) ),
+ self.bounds.y + pos.y * ( self.bounds.height + RL.GuiGetStyle( RL.TOGGLE, RL.GROUP_PADDING ) ),
+ self.bounds.width,
+ self.bounds.height
+ ) )
+ end
+ end
+end
+
+function ToggleGroup:process()
+ for _, bounds in ipairs( self.focusBounds ) do
+ if RL.CheckCollisionPointRec( RL.GetMousePosition(), bounds ) then
+ return true
+ end
+ end
+
+ return false
+end
+
+function ToggleGroup:draw()
+ local oldActive = self.active
+
+ self.active = RL.GuiToggleGroup( self.bounds, self.text, self.active )
+
+ if self.active ~= oldActive and self.callback ~= nil then
+ self.callback( self )
+ end
+
+ -- for _, rect in ipairs( self.focusBounds ) do
+ -- RL.DrawRectangleLines( rect, RL.RED )
+ -- end
+end
+
+function ToggleGroup:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+
+ self:updateFocusBounds()
+end
+
+-- CheckBox.
+
+--- Check Box control
+CheckBox = {}
+CheckBox.__index = CheckBox
+
+function CheckBox:new( bounds, text, checked, callback )
+ local object = setmetatable( {}, CheckBox )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.checked = checked
+ object.callback = callback
+
+ object.focusBounds = bounds:clone()
+ object:updateFocusBounds()
+
+ return object
+end
+
+function CheckBox:setText( text )
+ self.text = text
+
+ self:updateFocusBounds()
+end
+
+function CheckBox:updateFocusBounds()
+ if self.text == "" then
+ return
+ end
+
+ local textSize = Vec2:new( RL.MeasureText(
+ RL.GuiGetFont(),
+ self.text,
+ RL.GuiGetStyle( RL.DEFAULT, RL.TEXT_SIZE ),
+ RL.GuiGetStyle( RL.DEFAULT, RL.TEXT_SPACING )
+ ) )
+
+ local textBounds = Rect:new()
+
+ textBounds.width = textSize.x
+ textBounds.height = textSize.y
+ textBounds.x = self.bounds.x + self.bounds.width + RL.GuiGetStyle( RL.CHECKBOX, RL.TEXT_PADDING )
+ textBounds.x = self.bounds.y + self.bounds.height / 2 - RL.GuiGetStyle( RL.CHECKBOX, RL.TEXT_SIZE ) / 2
+
+ if RL.GuiGetStyle( RL.CHECKBOX, RL.TEXT_ALIGNMENT ) == RL.TEXT_ALIGN_LEFT then
+ textBounds.x = self.bounds.x - textBounds.width - RL.GuiGetStyle( RL.CHECKBOX, RL.TEXT_PADDING )
+ self.focusBounds.x = textBounds.x
+ else
+ self.focusBounds.x = self.bounds.x
+ end
+
+ self.focusBounds.y = self.bounds.y
+ self.focusBounds.width = self.bounds.width + textBounds.width + RL.GuiGetStyle( RL.CHECKBOX, RL.TEXT_PADDING )
+ self.focusBounds.height = self.bounds.height
+end
+
+function CheckBox:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.focusBounds )
+end
+
+function CheckBox:draw()
+ local oldChecked = self.checked
+
+ self.checked = RL.GuiCheckBox( self.bounds, self.text, self.checked )
+
+ if self.checked ~= oldChecked and self.callback ~= nil then
+ self.callback( self )
+ end
+
+ -- RL.DrawRectangleLines( self.focusBounds, RL.RED )
+end
+
+function CheckBox:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+
+ self:updateFocusBounds()
+end
+
+-- ComboBox.
+
+ComboBox = {}
+ComboBox.__index = ComboBox
+
+function ComboBox:new( bounds, text, active, callback )
+ local object = setmetatable( {}, ComboBox )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.active = active
+ object.callback = callback
+
+ return object
+end
+
+function ComboBox:setText( text )
+ self.text = text
+end
+
+function ComboBox:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function ComboBox:draw()
+ local oldActive = self.active
+
+ self.active = RL.GuiComboBox( self.bounds, self.text, self.active )
+
+ if self.active ~= oldActive and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function ComboBox:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- DropdownBox.
+
+DropdownBox = {}
+DropdownBox.__index = DropdownBox
+
+function DropdownBox:new( bounds, text, active, editMode, callback )
+ local object = setmetatable( {}, DropdownBox )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.active = active
+ object.editMode = editMode
+ object.callback = callback
+
+ object.editModeBounds = bounds:clone()
+ object:updateFocusBounds()
+
+ return object
+end
+
+function DropdownBox:setText( text )
+ self.text = text
+
+ self:updateFocusBounds()
+end
+
+function DropdownBox:getItem( id )
+ return getItems( self.text )[ id + 1 ]
+end
+
+function DropdownBox:updateFocusBounds()
+ if self.text == "" then
+ return
+ end
+
+ local count = getItemCount( self.text )
+
+ self.editModeBounds = self.bounds:clone()
+ self.editModeBounds.height = ( 1 + count ) * ( self.bounds.height + RL.GuiGetStyle( RL.DROPDOWNBOX, RL.DROPDOWN_ITEMS_SPACING ) )
+end
+
+function DropdownBox:process()
+ if self.editMode then
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.editModeBounds )
+ else
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+ end
+end
+
+function DropdownBox:draw()
+ local pressed = false
+
+ pressed, self.active = RL.GuiDropdownBox( self.bounds, self.text, self.active, self.editMode )
+
+ if pressed then
+ self.editMode = not self.editMode
+
+ if not self.editMode and self.callback ~= nil then
+ self.callback( self )
+ end
+ end
+end
+
+function DropdownBox:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- Spinner.
+
+Spinner = {}
+Spinner.__index = Spinner
+
+function Spinner:new( bounds, text, value, minValue, maxValue, editMode, callback )
+ local object = setmetatable( {}, Spinner )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.value = value
+ object.minValue = minValue
+ object.maxValue = maxValue
+ object.editMode = editMode
+ object.callback = callback
+
+ return object
+end
+
+function Spinner:setText( text )
+ self.text = text
+end
+
+function Spinner:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Spinner:draw()
+ local pressed = false
+ local oldValue = self.value
+
+ pressed, self.value = RL.GuiSpinner( self.bounds, self.text, self.value, self.minValue, self.maxValue, self.editMode )
+
+ if pressed then
+ self.editMode = not self.editMode
+ end
+
+ if self.value ~= oldValue and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function Spinner:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- ValueBox.
+
+ValueBox = {}
+ValueBox.__index = ValueBox
+
+function ValueBox:new( bounds, text, value, minValue, maxValue, editMode, callback )
+ local object = setmetatable( {}, ValueBox )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.value = value
+ object.minValue = minValue
+ object.maxValue = maxValue
+ object.editMode = editMode
+ object.callback = callback
+
+ return object
+end
+
+function ValueBox:setText( text )
+ self.text = text
+end
+
+function ValueBox:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function ValueBox:draw()
+ local pressed = false
+ local oldValue = self.value
+
+ pressed, self.value = RL.GuiValueBox( self.bounds, self.text, self.value, self.minValue, self.maxValue, self.editMode )
+
+ if pressed then
+ self.editMode = not self.editMode
+ end
+
+ if self.value ~= oldValue and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function ValueBox:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- TextBox.
+
+TextBox = {}
+TextBox.__index = TextBox
+
+function TextBox:new( bounds, text, textSize, editMode, callback )
+ local object = setmetatable( {}, TextBox )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.textSize = textSize
+ object.editMode = editMode
+ object.callback = callback
+ -- Option for preventing text to be drawn outside bounds.
+ object.scissorMode = false
+
+ return object
+end
+
+function TextBox:setText( text )
+ self.text = text
+end
+
+function TextBox:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function TextBox:draw()
+ local pressed = false
+
+ if self.scissorMode then
+ RL.BeginScissorMode( self.bounds )
+ end
+
+ pressed, self.text = RL.GuiTextBox( self.bounds, self.text, self.textSize, self.editMode )
+
+ if self.scissorMode then
+ RL.EndScissorMode()
+ end
+
+ if pressed then
+ self.editMode = not self.editMode
+
+ if not self.editMode and self.callback ~= nil then
+ self.callback( self )
+ end
+ end
+end
+
+function TextBox:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- TextBoxMulti.
+
+TextBoxMulti = {}
+TextBoxMulti.__index = TextBoxMulti
+
+function TextBoxMulti:new( bounds, text, textSize, editMode, callback )
+ local object = setmetatable( {}, TextBoxMulti )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.textSize = textSize
+ object.editMode = editMode
+ object.callback = callback
+
+ return object
+end
+
+function TextBoxMulti:setText( text )
+ self.text = text
+end
+
+function TextBoxMulti:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function TextBoxMulti:draw()
+ local pressed = false
+
+ pressed, self.text = RL.GuiTextBoxMulti( self.bounds, self.text, self.textSize, self.editMode )
+
+ if pressed then
+ self.editMode = not self.editMode
+
+ if not self.editMode and self.callback ~= nil then
+ self.callback( self )
+ end
+ end
+end
+
+function TextBoxMulti:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- Slider.
+
+Slider = {}
+Slider.__index = Slider
+
+function Slider:new( bounds, textLeft, textRight, value, minValue, maxValue, callback )
+ local object = setmetatable( {}, Slider )
+
+ object.bounds = bounds:clone()
+ object.textLeft = textLeft
+ object.textRight = textRight
+ object.value = value
+ object.minValue = minValue
+ object.maxValue = maxValue
+ object.callback = callback
+
+ return object
+end
+
+function Slider:setText( text )
+ self.text = text
+end
+
+function Slider:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Slider:draw()
+ local oldValue = self.value
+
+ self.value = RL.GuiSlider( self.bounds, self.textLeft, self.textRight, self.value, self.minValue, self.maxValue )
+
+ if self.value ~= oldValue then
+ self.callback( self )
+ end
+end
+
+function Slider:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- SliderBar.
+
+SliderBar = {}
+SliderBar.__index = SliderBar
+
+function SliderBar:new( bounds, textLeft, textRight, value, minValue, maxValue, callback )
+ local object = setmetatable( {}, SliderBar )
+
+ object.bounds = bounds:clone()
+ object.textLeft = textLeft
+ object.textRight = textRight
+ object.value = value
+ object.minValue = minValue
+ object.maxValue = maxValue
+ object.callback = callback
+
+ return object
+end
+
+function SliderBar:setText( text )
+ self.text = text
+end
+
+function SliderBar:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function SliderBar:draw()
+ local oldValue = self.value
+
+ self.value = RL.GuiSliderBar( self.bounds, self.textLeft, self.textRight, self.value, self.minValue, self.maxValue )
+
+ if self.value ~= oldValue then
+ self.callback( self )
+ end
+end
+
+function SliderBar:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- ProgressBar.
+
+ProgressBar = {}
+ProgressBar.__index = ProgressBar
+
+function ProgressBar:new( bounds, textLeft, textRight, value, minValue, maxValue, callback )
+ local object = setmetatable( {}, ProgressBar )
+
+ object.bounds = bounds:clone()
+ object.textLeft = textLeft
+ object.textRight = textRight
+ object.value = value
+ object.minValue = minValue
+ object.maxValue = maxValue
+ object.callback = callback
+
+ return object
+end
+
+function ProgressBar:setText( text )
+ self.text = text
+end
+
+function ProgressBar:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function ProgressBar:draw()
+ local oldValue = self.value
+
+ self.value = RL.GuiProgressBar( self.bounds, self.textLeft, self.textRight, self.value, self.minValue, self.maxValue )
+
+ if self.value ~= oldValue then
+ self.callback( self )
+ end
+end
+
+function ProgressBar:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- StatusBar.
+
+StatusBar = {}
+StatusBar.__index = StatusBar
+
+function StatusBar:new( bounds, text )
+ local object = setmetatable( {}, StatusBar )
+
+ object.bounds = bounds:clone()
+ object.text = text
+
+ return object
+end
+
+function StatusBar:setText( text )
+ self.text = text
+end
+
+function StatusBar:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function StatusBar:draw()
+ RL.GuiStatusBar( self.bounds, self.text )
+end
+
+function StatusBar:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- DummyRec.
+
+DummyRec = {}
+DummyRec.__index = DummyRec
+
+function DummyRec:new( bounds, text )
+ local object = setmetatable( {}, DummyRec )
+
+ object.bounds = bounds:clone()
+ object.text = text
+
+ return object
+end
+
+function DummyRec:setText( text )
+ self.text = text
+end
+
+function DummyRec:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function DummyRec:draw()
+ RL.GuiDummyRec( self.bounds, self.text )
+end
+
+function DummyRec:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+-- Grid.
+
+Grid = {}
+Grid.__index = Grid
+
+function Grid:new( bounds, text, spacing, subdivs, callback )
+ local object = setmetatable( {}, Grid )
+
+ object.bounds = bounds:clone()
+ object.text = text
+ object.spacing = spacing
+ object.subdivs = subdivs
+ object.callback = callback
+
+ object.cell = Vec2:new()
+
+ return object
+end
+
+function Grid:setText( text )
+ self.text = text
+end
+
+function Grid:process()
+ return RL.CheckCollisionPointRec( RL.GetMousePosition(), self.bounds )
+end
+
+function Grid:draw()
+ local oldCell = self.cell:clone()
+
+ self.cell = Vec2:new( RL.GuiGrid( self.bounds, self.text, self.spacing, self.subdivs ) )
+
+ if oldCell ~= self.cell and self.callback ~= nil then
+ self.callback( self )
+ end
+end
+
+function Grid:setPosition( pos )
+ self.bounds.x = pos.x
+ self.bounds.y = pos.y
+end
+
+--Assingments.
+
+Raygui.Label = Label
+Raygui.Button = Button
+Raygui.LabelButton = LabelButton
+Raygui.Toggle = Toggle
+Raygui.ToggleGroup = ToggleGroup
+Raygui.CheckBox = CheckBox
+Raygui.ComboBox = ComboBox
+Raygui.DropdownBox = DropdownBox
+Raygui.Spinner = Spinner
+Raygui.ValueBox = ValueBox
+Raygui.TextBox = TextBox
+Raygui.TextBoxMulti = TextBoxMulti
+Raygui.Slider = Slider
+Raygui.SliderBar = SliderBar
+Raygui.ProgressBar = ProgressBar
+Raygui.StatusBar = StatusBar
+Raygui.DummyRec = DummyRec
+Raygui.Grid = Grid
+
+return Raygui