vision/src/client/scene.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
} )