-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscene.lua
78 lines (72 loc) · 1.68 KB
/
scene.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
local u = require "love_engine.utils"
local M = {}
local scene_functions = {}
scene_functions["__t"] = "scene"
function scene_functions.select (self, obj)
if type(obj) == "string" then
obj = self.find (obj)
end
if self.selected ~= obj then
if self.selected then
self.selected.selected = false
end
self.selected = obj
self.selected.selected = true
print("Select object:" .. obj.name)
end
end
function scene_functions.find (self, name)
if type(name) == "table" then
for k, i in ipairs(self) do
if name == i then
return k, i
end
end
elseif type(name) == "string" then
for k, i in ipairs(self) do
if i.name == name then
return k, i
end
end
end
end
function scene_functions.add(self, obj)
table.insert(self, obj)
obj.parent = self
if self.loaded and not obj.loaded then
u.pcall(obj.load, obj)
obj.loaded = true
end
end
function scene_functions.remove(self, obj)
if type(obj) == "number" then
table.remove(self, obj)
else
local k, i = self:find(obj)
table.remove(self, k)
end
end
local scene_mt = {__index = scene_functions}
local function register_event (self, event, obj)
assert(self[event], ("not found callback named '%s'"):format(event))
table.insert(self[event], obj)
end
local event_mt = {__index = {register = register_event}}
function M.generate_scene()
local S = setmetatable({}, scene_mt)
S.keys = setmetatable({}, event_mt)
S.keys.pressed = {}
S.keys.released = {}
S.mouse = setmetatable({}, event_mt)
S.mouse.pressed = {}
S.mouse.released = {}
S.mouse.moved = {}
S.mouse.wheel = {}
S.touch = setmetatable({}, event_mt)
S.touch.pressed = {}
S.touch.released = {}
S.touch.moved = {}
S.loaded = false
return S
end
return M