gists/lua-moving-ball/main.lua
2025-04-29 09:04:41 +03:00

100 lines
2.1 KiB
Lua

-- Gist accompanying https://alloca.space/blog/lua-lang.html
--
-- Build and Run
-- -------------
--
-- 1. Install https://love2d.org on your system
--
-- 2. Run with:
--
-- love .
-- Constants
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
BALL_SPEED = 200
BALL_RADIUS = 50
-- Objects
local background = {
["color"] = {
["r"] = 0x08 / 255,
["g"] = 0x18 / 255,
["b"] = 0x29 / 255,
}
}
local ball = {
position = {
["x"] = SCREEN_WIDTH/3,
["y"] = SCREEN_HEIGHT/3,
},
direction = {
["x"] = 1,
["y"] = 1,
},
color = {
["r"] = 0xf9 / 255,
["g"] = 0x92 / 255,
["b"] = 0x26 / 255,
},
["radius"] = BALL_RADIUS,
}
-- Main
function love.load()
love.window.setMode(SCREEN_WIDTH, SCREEN_HEIGHT, {vsync=true,msaa=4})
end
function love.update()
updateBall(ball)
end
function love.draw()
love.graphics.clear(background.color.r, background.color.g, background.color.b, 255, true, true)
love.graphics.setColor(ball.color.r, ball.color.g, ball.color.b)
love.graphics.circle("fill", ball.position.x, ball.position.y, ball.radius)
end
-- Update
function updateBall(ball)
applyKeys(ball)
swingBall(ball)
end
function applyKeys(ball)
if love.keyboard.isDown("d") then ball.direction.x = 1 end
if love.keyboard.isDown("a") then ball.direction.x = -1 end
if love.keyboard.isDown("s") then ball.direction.y = 1 end
if love.keyboard.isDown("w") then ball.direction.y = -1 end
end
function swingBall(ball)
local p, d = swing(ball.position.x, ball.direction.x, 0 + ball.radius, SCREEN_WIDTH - ball.radius)
ball.position.x = p
ball.direction.x = d
local p, d = swing(ball.position.y, ball.direction.y, 0 + ball.radius, SCREEN_HEIGHT - ball.radius)
ball.position.y = p
ball.direction.y = d
end
function swing(position, direction, min, max)
if (position <= min) then
position = min
direction = 1
elseif (position >= max) then
position = max
direction = -1
end
local dt = love.timer.getDelta()
position = position + (direction * BALL_SPEED * dt)
return position, direction
end