From 28bfd0fb251fab685046b8951b1c7aa9c59ef020 Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:38:38 +0200 Subject: camera --- src/init.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/init.lua b/src/init.lua index 50d542f..66f1b9e 100644 --- a/src/init.lua +++ b/src/init.lua @@ -11,6 +11,7 @@ require "src.room_editor" require "src.export" require "src.sound" require "src.specks" +require "src.camera" SCR_WIDTH = 320 SCR_HEIGHT = 180 -- cgit v1.3-2-g0d8e From 318d6d8fbd989d8ae8abff28bbd0038c52289603 Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:38:51 +0200 Subject: camera correct mouse --- src/input.lua | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/input.lua b/src/input.lua index 5dacd81..7c625ed 100644 --- a/src/input.lua +++ b/src/input.lua @@ -101,12 +101,25 @@ function love.wheelmoved(...) end function get_mouse_pos() + local cam = get_active_camera() local scrw, scrh = love.graphics.getDimensions() + local offset_x = (scrw - SCR_WIDTH * WindowScale) / 2 local offset_y = (scrh - SCR_HEIGHT * WindowScale) / 2 - return (lm.getX() - offset_x) / WindowScale, - (lm.getY() - offset_y) / WindowScale + local mx = (lm.getX() - offset_x) / WindowScale + local my = (lm.getY() - offset_y) / WindowScale + + mx = mx - SCR_WIDTH / 2 + my = my - SCR_HEIGHT / 2 + + mx = mx / cam.zoom + my = my / cam.zoom + + mx = mx + cam.realx + my = my + cam.realy + + return mx, my end function input_step() -- cgit v1.3-2-g0d8e From 0abd7de08d71e6260c9b0ad9f326f8c6b7536941 Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:39:33 +0200 Subject: actual camera code this time --- src/camera.lua | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/camera.lua (limited to 'src') 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 -- cgit v1.3-2-g0d8e From c8540ad8a6bb3f17da2b0cb87d52a232af7be127 Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:39:50 +0200 Subject: camera component --- src/objs/camera_comp.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/objs/camera_comp.lua (limited to 'src') diff --git a/src/objs/camera_comp.lua b/src/objs/camera_comp.lua new file mode 100644 index 0000000..3b8edf4 --- /dev/null +++ b/src/objs/camera_comp.lua @@ -0,0 +1,10 @@ + +register_comp("Camera", function (ent) + assert(has_comp(ent, "Position"), "Why camera when no position bruh? Are you dumb??") + ent.camera = Cam.new(ent.x, ent.y) +end) + +function camera_move_system(ent) + ent.camera.x = ent.x + ent.camera.y = ent.y +end -- cgit v1.3-2-g0d8e From ab2e3af8db54fd1eec648eacbfb369e69c362ffb Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:40:00 +0200 Subject: player camera --- src/objs/player.lua | 2 ++ src/scenes/game.lua | 1 + 2 files changed, 3 insertions(+) (limited to 'src') diff --git a/src/objs/player.lua b/src/objs/player.lua index 55a8ebe..5c7da0f 100644 --- a/src/objs/player.lua +++ b/src/objs/player.lua @@ -119,6 +119,8 @@ function new_player(x, y) layers = {}, mask = { "Hard" }, }) + add_comp(ent, "Camera") + set_active_camera(ent.camera) add_comp(ent, "Sprite", "res/img/player.ase", { offsetx = 0.5, diff --git a/src/scenes/game.lua b/src/scenes/game.lua index 4a31a99..45083ca 100644 --- a/src/scenes/game.lua +++ b/src/scenes/game.lua @@ -8,6 +8,7 @@ function start_game_scene() event_bind(scn.on_update, "Sprite", sprite_anim_sys) event_bind(scn.on_update, "Speck_System", speck_update_sys) event_bind(scn.on_update, "Speck_Entity", speck_entity_system) + event_bind(scn.on_update, "Camera", camera_move_system) event_bind(scn.on_draw, "Sprite", sprite_draw_sys) event_bind(scn.on_draw, "Tilemap", tilemap_draw_sys) -- cgit v1.3-2-g0d8e From f26ba2147c7325595780bdc5dae56f1315e5495e Mon Sep 17 00:00:00 2001 From: ne_mene Date: Fri, 3 Apr 2026 12:43:22 +0200 Subject: camera zoom test --- src/camera.lua | 2 +- src/objs/player.lua | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/camera.lua b/src/camera.lua index a328099..3283c0c 100644 --- a/src/camera.lua +++ b/src/camera.lua @@ -10,7 +10,7 @@ function Cam.new(x, y) self.y = y or 0 self.realx = self.x self.realy = self.y - self.zoom = 2 + self.zoom = 1 self.smoothing = DEFAULT_CAMERA_SMOOTHING diff --git a/src/objs/player.lua b/src/objs/player.lua index 5c7da0f..dee4df5 100644 --- a/src/objs/player.lua +++ b/src/objs/player.lua @@ -121,6 +121,7 @@ function new_player(x, y) }) add_comp(ent, "Camera") set_active_camera(ent.camera) + ent.camera.zoom = 0.5 add_comp(ent, "Sprite", "res/img/player.ase", { offsetx = 0.5, -- cgit v1.3-2-g0d8e