summaryrefslogtreecommitdiff
path: root/camera.lua
blob: 09e528ba117eb7dfcba8ffe755f5ed7a46678468 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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