From eb9466c8d3d18d65eb4bab2f6770f55cba9d8de3 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Sat, 9 May 2026 18:38:21 -0700 Subject: Adding a simple grid-based camera --- camera.lua | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 camera.lua (limited to 'camera.lua') diff --git a/camera.lua b/camera.lua new file mode 100644 index 0000000..09e528b --- /dev/null +++ b/camera.lua @@ -0,0 +1,38 @@ +SCREEN = vec2(128, 128) + +_chunk_size = vec2(102, 102) +_chunk_size:apply(function (v) assert(v % 2 == 0) end) +_padding = (SCREEN - _chunk_size) / 2 +assert(_chunk_size.x < SCREEN.x and _chunk_size.y < SCREEN.y) + +Camera = {} +Camera.__index = Camera +function Camera:update() + line(_padding.x, SCREEN.y - _padding.y, _padding.x, _padding.y, 5) + line(_chunk_size.x + _padding.x, SCREEN.y - _padding.y, _chunk_size.x + _padding.x, _padding.y, 5) + line(_padding.x, _padding.y, SCREEN.x - _padding.x, _padding.y, 5) + line(_padding.x, _chunk_size.y + _padding.y, SCREEN.x - _padding.x, _chunk_size.y + _padding.y, 5) + + assert(self.tracking.position) + tracking_chunk = vec2(self.tracking.position / _chunk_size):apply(flr) + if (tracking_chunk == self.current_chunk) then return end + + self.position = (tracking_chunk * _chunk_size) - _padding + self.current_chunk = tracking_chunk +end + +function Camera:render(entity) + screen_position = (entity.sprite_position or entity.position) - self.position + entity:render(screen_position) +end + +function Camera:new(tracking) + cam = setmetatable({ + -- position = vec2(0, 0), + -- current_chunk = vec2(0, 0), + tracking = tracking + }, Camera) + + AddUpdateHook(function (dt) cam:update() end) + return cam +end \ No newline at end of file -- cgit v1.3