diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rwxr-xr-x | examples/resources/clib/rllib.so | bin | 15576 -> 0 bytes | |||
| -rwxr-xr-x | examples/resources/clib/sampleclib.so | bin | 15336 -> 0 bytes | |||
| -rw-r--r-- | examples/resources/lib/camera3d.lua | 166 | ||||
| -rw-r--r-- | examples/resources/lib/raygui.lua | 955 | ||||
| -rw-r--r-- | lib/.gitignore | 2 |
6 files changed, 1124 insertions, 2 deletions
@@ -1,2 +1 @@ -.vscode -lib
\ No newline at end of file +.vscode
\ No newline at end of file diff --git a/examples/resources/clib/rllib.so b/examples/resources/clib/rllib.so Binary files differdeleted file mode 100755 index 6368e17..0000000 --- a/examples/resources/clib/rllib.so +++ /dev/null diff --git a/examples/resources/clib/sampleclib.so b/examples/resources/clib/sampleclib.so Binary files differdeleted file mode 100755 index b232cc9..0000000 --- a/examples/resources/clib/sampleclib.so +++ /dev/null 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 diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..6e2ad66 --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1,2 @@ +liblua.a +libraylib.a |
