local lg = assert( love.graphics ) local scene = assert( require 'scene' ) local shared = assert( require 'shared.shared' ) local server = assert( require 'udp' ) local packet = shared.packet local crepuscular = assert( require 'crepuscular' ) local game = {} local handlers = setmetatable( {}, {__index = function() return print end } ) local t = 0 local tick = 0 local serverTick = 0 function handlers.connected( data ) serverTick = math.max( data.tick, serverTick ) end function handlers.insect( data ) end function handlers.soleil( data ) end function handlers.playerChange( data ) end function handlers.chatMessage( msg ) print( msg.cmsg ) end function game.draw() lg.setColor( 1, 1, 1, 1 ) lg.print( tick, 0, 0 ) lg.print( serverTick, 0, 25 ) end function game.onPacket( msg ) if not msg or (#msg < 1) then return end local msgs, types = packet.deserialise( msg ) if not msgs then return game.onPacket( server.receive() ) end for i = 1, #msgs do --Handler returns something if msg should be discarded. if handlers[ types[i] ]( msgs[i] ) then break end end return game.onPacket( server.receive() ) end function game.update( dt ) t = dt + t game.onPacket( server.receive() ) if t > 0.1 then t = 0 tick = tick + 1 server.newPacket() assert( server.send( packet.get() ) ) end end function game.newGame( ) game.curWorld = shared.NewWorld() --Last world state received from server. game.preWorld = shared.NewWorld() --Current world state predicted by this client. end function game.disconnect( ) return scene.mainmenu( server.disconnect() ) end function game.onLoad( params ) end function game.keypressed( key, code, isRepeat ) if code == "escape" then return game.disconnect() end end scene.game = game return game