diff options
Diffstat (limited to 'camera.lua')
| -rw-r--r-- | camera.lua | 38 |
1 files changed, 38 insertions, 0 deletions
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 |
