summaryrefslogtreecommitdiff
path: root/client/camera.lua
blob: 528b45b5df0d083cca22c05e171b78740829dbb0 (plain)
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
39
local coords = require"common.coords"
local class = require"common.class"

-- in screen units
local screen_width, screen_height = love.graphics.getDimensions()

-- zoom is screen pixels per world unit
local Camera = class()
function Camera.make(cls,pos,zoom)
	pos = pos or coords.Pos:make(0,0)
	zoom = zoom or 30
	return setmetatable({pos=pos,zoom=zoom},cls)
end
function Camera.apply_trans(self)
	love.graphics.origin()
	-- centre (0,0) in the middle of the screen
	love.graphics.translate(screen_width/2,screen_height/2)
	-- apply camera transformations

	love.graphics.scale(self.zoom)
	love.graphics.translate(-self.pos.x,-self.pos.y)
end

local screen_offset = coords.Pos:make(screen_width/2,screen_height/2)
function Camera.screen_to_world(self,pos)
	return (pos-screen_offset)/self.zoom + self.pos
end
function Camera.world_to_screen(self,pos)
	return (pos-self.pos) * self.zoom + screen_offset
end

function Camera.extents(self)
	-- returns top left and bottom right pos's in world coords
	return self:screen_to_world(coords.Pos:make(0,0)),
			self:screen_to_world(coords.Pos:make(screen_width,screen_height))
end


return {Camera=Camera}