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 }