48 lines
1.1 KiB
Lua
48 lines
1.1 KiB
Lua
local scene = {}
|
|
local love = assert( love )
|
|
|
|
local callbacks = {
|
|
draw = true,
|
|
mousepressed = true,
|
|
mousemoved = true,
|
|
keypressed = true,
|
|
update = true,
|
|
resize = true,
|
|
}
|
|
|
|
local mt = {}
|
|
|
|
print( 'scene', scene )
|
|
|
|
function scene.loadScene( scen, params )
|
|
print( "Loading Scene:", scen.name )
|
|
for k, v in pairs( callbacks ) do
|
|
if not scen[k] then print( "Warning: scene missing callback.", scen.name, k ) end
|
|
love[k] = scen[k] or love[k]
|
|
end
|
|
scen:onLoad( params )
|
|
end
|
|
|
|
local function newScene( scenes, name, t )
|
|
t.name = t.name or name
|
|
print( "Adding Scene:", t.name )
|
|
setmetatable( t, { __call = function() return scene.loadScene( t ) end } )
|
|
rawset( scenes, name, t )
|
|
end
|
|
|
|
function scene.overlayScene( scen, params )
|
|
print( "Adding Scene:", scen.name )
|
|
for k, v in pairs( callbacks ) do
|
|
local old = love[k]
|
|
local new = scen[k]
|
|
if new then
|
|
love[k] = function( ... ) return new( ... ) and old( ... ) end
|
|
end
|
|
end
|
|
scen:onLoad( params )
|
|
end
|
|
|
|
return setmetatable( scene,
|
|
{__call = scene.loadScene,
|
|
__newindex = newScene
|
|
} ) |