ObjectLibrary is a simple library for the LÖVE2D game engine that allows users to create objects with physics, collision detection, and optional textures. If no texture is provided, the object defaults to a simple square shape. This library makes it easy to add basic physics interactions, object rendering, and collision handling to LÖVE2D projects.
- Easy Object Creation: Create objects with customizable positions, sizes, and optional textures.
 - Collision Detection: Automatically detects and handles collisions between objects.
 - Collision Response: Objects stop overlapping and are separated when colliding.
 - Simple Rendering: Objects can be drawn with textures or as default squares if no texture is provided.
 - Basic Physics: Objects can have velocity, acceleration, gravity, and friction, allowing for dynamic movement.
 - Force Application: Easily apply forces (e.g., gravity or user input) to objects to control their movement.
 
- Download 
ObjectLibrary.luaand place it in your LÖVE2D project folder. - Include it in your main file (
main.luaor equivalent) with:local ObjectLibrary = require("ObjectLibrary")
 
You can create an object by calling ObjectLibrary:new(x, y, width, height, imagePath), where:
xandyspecify the object's position.widthandheightspecify its dimensions.imagePathis an optional parameter for adding a texture image.
The object also has the following optional physics properties:
velocityX,velocityY: Control the object's velocity in the X and Y directions.accelerationX,accelerationY: Control the object's acceleration.gravity: Gravity is automatically applied to objects if not overridden.mass: The mass of the object, which influences how forces like gravity affect it.
local ObjectLibrary = require("ObjectLibrary")
local player = ObjectLibrary:new(100, 100, 50, 50, "player.png")
local wall = ObjectLibrary:new(200, 100, 50, 50) -- default to white squareIn your love.update(dt) function, you can move objects, apply forces, and check for collisions:
function love.update(dt)
    -- Store previous position for collision handling
    local prevX, prevY = player.x, player.y
    -- Apply force (e.g., user input for movement or gravity)
    if love.keyboard.isDown("right") then
        player:applyForce(100, 0)  -- Apply force to move right
    end
    if love.keyboard.isDown("left") then
        player:applyForce(-100, 0) -- Apply force to move left
    end
    if love.keyboard.isDown("up") then
        player:applyForce(0, -100) -- Apply force to move up
    end
    if love.keyboard.isDown("down") then
        player:applyForce(0, 100)  -- Apply force to move down
    end
    -- Update physics (apply gravity, velocity, position)
    player:update(dt)
    -- Resolve collision
    player:resolveCollision(wall)
    -- If collision occurs, restore the previous position
    if player.isColliding then
        player.x, player.y = prevX, prevY
    end
endTo render your objects, call draw() on each object in your love.draw() function:
function love.draw()
    player:draw()
    wall:draw()
    
    -- Optionally, draw a red border if a collision is detected
    if player.isColliding then
        love.graphics.setColor(1, 0, 0) -- red color for collision
        love.graphics.rectangle("line", player.x, player.y, player.width, player.height)
        love.graphics.setColor(1, 1, 1) -- reset color
    end
endYou can take advantage of the built-in physics features:
- Gravity: Automatically applied in the 
updatemethod (can be overridden). - Velocity: Update the object's position based on its velocity.
 - Acceleration: Apply forces like gravity, friction, or user input.
 
Use applyForce(fx, fy) to add external forces to objects. For instance, applying gravity or user-controlled movements.
function love.update(dt)
    -- Apply gravity force
    player:applyForce(0, player.gravity)
    -- Optionally, apply other forces like user input
    if love.keyboard.isDown("right") then
        player:applyForce(100, 0)
    end
    -- Update physics (gravity, velocity, position)
    player:update(dt)
endyour_project/
├── main.lua
├── ObjectLibrary.lua
└── assets/
    └── player.png
In this example, main.lua initializes the library and uses it to create objects. The assets/ folder holds any textures (like player.png) used by objects.
This library is free to use under the MIT License. See LICENSE for more details.
Feel free to open issues or submit pull requests with improvements or additional features. All contributions are welcome!
Developed by Virus.