summaryrefslogtreecommitdiffhomepage
path: root/main.lua
blob: deff1a1689508d41ce5bc99cd88c606af57f7a8f (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
-- "NOTNAUTS"
-- WHOLE CODE HAS FLAG OF "need a cleanup"

-- Pretend you didn't see this
-- This is work for scene manager
Scene = nil
function changeScene(scene)
	if Scene ~= nil then
		Scene:delete()
	end
	Scene = scene
end

-- Should be moved to scene/camera
function getScale()
	return math.max(1, math.floor(math.max(love.graphics.getWidth() / 320, love.graphics.getHeight() / 180)))
end
function getRealScale()
	return math.max(1, math.max(love.graphics.getWidth() / 320, love.graphics.getHeight() / 180))
end
-- Should be moved to Sprite metaclass (non-existent yet)
function newImage(path)
	local imagedata = love.image.newImageData(path)
	local transparency = function(x, y, r, g, b, a)
		if (r == 0 and g == 128 and b == 64) or
		   (r == 0 and g == 240 and b ==  6) then
			a = 0
		end
		return r, g, b, a
	end
	imagedata:mapPixel(transparency)
	local image = love.graphics.newImage(imagedata)
	return image
end

-- Require
require "world"
require "camera"
require "menu"
require "controller"
require "music"
require "settings"

-- Temporary debug
debug = false

-- LÖVE2D callbacks
function love.load()
	-- Graphics
	love.graphics.setBackgroundColor(90, 90, 90)
	love.graphics.setDefaultFilter("nearest", "nearest")
	-- Font
	Font = love.graphics.newImageFont("assets/font-normal.png", " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.,:;-_/\\!@#$%^&*?=+~`|'\"()[]{}<>", -1)
	Bold = love.graphics.newImageFont("assets/font-big.png", " 0123456789AEFILNORSTUW", -2)
	Font:setLineHeight(9/16)
	love.graphics.setFont(Font) 
	-- Modules
	Controller.load()
	Settings.load()
	-- Scene
	Scene = Menu:new()
end
function love.update(dt)
	Scene:update(dt)
end
function love.draw()
	Scene:draw()
	if debug then
		local scale = getScale()
		love.graphics.setFont(Font)
		love.graphics.setColor(255, 0, 0, 255)
		love.graphics.print("Debug ON", 10, 10, 0, scale, scale)
		love.graphics.setColor(255, 255, 255, 255)
		love.graphics.print("Current FPS: "..tostring(love.timer.getFPS()), 10, 10+9*scale, 0, scale, scale)
	end
end
function love.quit()
	Settings.save()
end
-- Pass input to Controller
function love.gamepadaxis(joystick, axis, value) Controller.gamepadaxis(joystick, axis, value) end
function love.gamepadpressed(joystick, key) Controller.gamepadpressed(joystick, key) end
function love.gamepadreleased(joystick, key) Controller.gamepadreleased(joystick, key) end
function love.keypressed(key) Controller.keypressed(key) end
function love.keyreleased(key) Controller.keyreleased(key) end

-- Controller callbacks
function Controller.controlpressed(set, action, key)
	-- pass to current Scene
	Scene:controlpressed(set, action, key)
	-- globals
	if key == "escape" then
		love.event.quit()
	end
	if key == "f5" then
		debug = not debug
	end
end
function Controller.controlreleased(set, action, key)
	-- pass to current Scene
	Scene:controlreleased(set, action, key)
end