heroes-of-nerevelon/camera.lua
Neckrat 0293409dd9 camera refactor
Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
2025-08-02 02:16:20 +03:00

46 lines
1.2 KiB
Lua

local Vec3 = require "lib/vec3"
local tree = require "lib/tree"
--- @class (exact) Camera
--- @field target Vec3
--- @field speed number
--- @field pixelsPerMeter integer
local camera = {
target = Vec3 {},
speed = 5,
pixelsPerMeter = 100
}
function camera:update(dt)
local ws = tree.instance().wheelscroll
if ws.delta:length() > 0 then
local worldDelta = ws.delta * (1 / self.pixelsPerMeter)
self.target = self.target + worldDelta
return
end
if love.keyboard.isDown("w") then self.target = self.target + Vec3({ 0, -dt * self.speed }) end
if love.keyboard.isDown("a") then self.target = self.target + Vec3({ -dt * self.speed }) end
if love.keyboard.isDown("s") then self.target = self.target + Vec3({ 0, dt * self.speed }) end
if love.keyboard.isDown("d") then self.target = self.target + Vec3({ dt * self.speed }) end
end
function camera:attach()
love.graphics.push()
love.graphics.scale(self.pixelsPerMeter)
love.graphics.translate(-self.target.x, -self.target.y)
end
function camera:detach()
love.graphics.pop()
end
--- @return Camera
local function new()
return setmetatable({}, {
__index = camera
})
end
return { new = new }