46 lines
1.2 KiB
Lua
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 }
|