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
|