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 } )