local scene = assert( require 'scene' ) local lg = assert( love.graphics ) local server = assert( require 'udp' ) local button = assert( require 'ui.button' ) local strings = assert( require 'strings' ) local connecting = {} local time, ip, port, attempts, svInfo = 0, 0, 0, 1 local cancelButton = button{ x = lg.getWidth() / 4, y = lg.getHeight() / 2, w = lg.getWidth() / 2, h = 100, text = lg.newText( lg.getFont(), strings.cancel_button ), } function connecting.mousemoved( x, y ) cancelButton.selected = cancelButton:contains( x, y ) end function connecting.mousepressed( x, y ) if cancelButton:contains( x, y ) then return scene.browser() end end function connecting.keypressed( x, y ) return scene.browser() end function connecting.draw() lg.setColor( 1,1,1,1 ) lg.printf( ("ADDRESS: %s"):format( ip ), lg.getWidth() / 4, 15, lg.getWidth() - 30, "left" ) lg.printf( ("ATTEMPTS: %d"):format( attempts ), lg.getWidth() / 4, 20 + lg.getFont():getHeight(), lg.getWidth() - 30, "left" ) cancelButton:draw() return false end function connecting.svChimo( msg ) return server.answerChallenge( msg.nonce ) end function connecting.connected( msg ) server.setToken( msg.token ) return scene.game() end function connecting.keypressed(key, code, isrepeat) if code == "escape" then return scene.browser() end end function connecting.read( msg ) if not msg then return false end local msgs, types = server.deserialise( msg ) for i = 1, #msgs do ( connecting[ types[i] ] or print )( msgs[i], ip, port ) end return connecting.read( server.receive() ) end function connecting.update(dt) time = time + dt if time > 2 then time = 0 attempts = attempts + 1 server.connect( ip, port ) --return scene.loadScene( scene.game ) end return connecting.read( server.receive() ) end function connecting:onLoad( params ) lg.setCanvas() time = 0 attempts = 1 params = params or { ip = "8.8.8.8", port = 8 } ip, port = params.ip, params.port if server.isValid( ip, port ) then server.setInfo( params.svInfo ) return server.connect( ip, port ) end end function connecting.exit() end scene.connecting = connecting return connecting