-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmain.lua
92 lines (78 loc) · 1.51 KB
/
main.lua
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
-- this is just a bootstrap for all the demos, nothing interesting here.
-- check the files in src/, instead!
local l3d = require "love3d"
l3d.import()
local demos = {
current = 1,
"forward",
"deferred",
"skeletal-animation"
}
local callbacks = {}
function switch(demo)
callbacks = {}
require("src." .. demo)
end
function register(callback, fn)
callbacks[callback] = fn
end
function love.load()
switch(demos[demos.current])
end
local cbs = {
"mousemoved",
"mousepressed",
"mousereleased",
"keyreleased",
"textinput",
"textedited",
}
for _, cb in ipairs(cbs) do
love[cb] = function(...)
if callbacks[cb] then
callbacks[cb](...)
end
end
end
function love.keypressed(k)
if love.keyboard.isDown("lshift", "rshift") and k == "escape" then
love.event.quit()
end
local do_switch = false
local demo = demos[demos.current]
if k == "left" then
demos.current = demos.current - 1
if demos.current < 1 then
demos.current = #demos
end
do_switch = true
elseif k == "right" then
demos.current = demos.current + 1
if demos.current > #demos then
demos.current = 1
end
do_switch = true
end
if do_switch then
love.graphics.reset()
l3d.reset()
package.loaded["src."..demo] = nil
switch(demos[demos.current])
return
end
if callbacks.keypressed then
callbacks.keypressed(k)
end
end
function love.update(dt)
if callbacks.update then
callbacks.update(dt)
end
end
function love.draw()
if callbacks.draw then
love.graphics.push("all")
callbacks.draw()
love.graphics.pop()
end
end