aboutsummaryrefslogtreecommitdiff
path: root/src/camera.lua
diff options
context:
space:
mode:
authorne_mene <[email protected]>2026-04-03 12:39:33 +0200
committerne_mene <[email protected]>2026-04-03 12:39:33 +0200
commit0abd7de08d71e6260c9b0ad9f326f8c6b7536941 (patch)
treeea2a8393377c9d3d597db90fd788f7fe267f9f1b /src/camera.lua
parent318d6d8fbd989d8ae8abff28bbd0038c52289603 (diff)
actual camera code this time
Diffstat (limited to 'src/camera.lua')
-rw-r--r--src/camera.lua41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/camera.lua b/src/camera.lua
new file mode 100644
index 0000000..a328099
--- /dev/null
+++ b/src/camera.lua
@@ -0,0 +1,41 @@
+local DEFAULT_CAMERA_SMOOTHING = 30
+
+Cam = {}
+Cam.__index = Cam
+
+function Cam.new(x, y)
+ local self = setmetatable({}, Cam)
+
+ self.x = x or 0
+ self.y = y or 0
+ self.realx = self.x
+ self.realy = self.y
+ self.zoom = 2
+
+ self.smoothing = DEFAULT_CAMERA_SMOOTHING
+
+ return self
+end
+
+function Cam:update(dt)
+ self.realx = dlerp(self.realx, self.x, self.smoothing * dt)
+ self.realy = dlerp(self.realy, self.y, self.smoothing * dt)
+end
+
+local active_cam = Cam.new()
+
+function get_active_camera()
+ return active_cam
+end
+
+function set_active_camera(new_cam)
+ active_cam = new_cam
+end
+
+function use_camera_transform()
+ local w, h = SCR_WIDTH / 2, SCR_HEIGHT / 2
+ lg.scale(active_cam.zoom)
+ lg.translate(
+ -active_cam.realx + w / active_cam.zoom,
+ -active_cam.realy + h / active_cam.zoom)
+end