ecs = require("ecs") world = require("world") shader = require("shaders.world") sprites = require("sprites") task = require("task") LobbyGraphic = require("prefab.lobby") GraphicsComponent = require("ecs.graphics") ClientNetworkedComponent = require("ecs.client_networked") NetworkedComponent = require("ecs.networked") log = require("log") level = {} lobby = nil level.create = (code) -> log.info("Creating level:" .. code,{"level"}) -- We can set this even on the client, it just won't get used. world.level_sync.ref = { id: "Level from lobby.moon" get_spawn_location: () -> {0,0,0} } log.info("world.domain was" .. tostring(world.domain),{"level"}) if world.domain == "client" lobby = ecs.Entity! lobby_graphic = LobbyGraphic("graphic",{}) lobby\add(lobby_graphic,"grapic") lobby\add(ClientNetworkedComponent("net",{ type: "level", level_name: "levels.lobby" level_data: {code} }),"net") code = world.level_sync.data[1] path = am.eval_js("window.CLIPBOARD.get_path()") url = string.format("%s?i=%s",path,code) --todo: set qr code am.eval_js([[ var s = document.createElement('div'); s.setAttribute("id","qrcode"); s.setAttribute("style","z-index: 1; position:absolute; visibility:hidden;"); var p = document.getElementById("container"); p.prepend(s); console.log("[JS] Added qrcode", s); new QRCode(s, "]] .. url .. [["); ]]) co = coroutine.create(() -> print("Start of coroutine.") imgsrc = "" while imgsrc == "" imgsrc = am.eval_js([[document.getElementById("qrcode").children[1].src;]]) print("Waiting on imgsrc...") coroutine.yield! print("Got imgsrc.") b64 = imgsrc\match("^data:image/png;base64,(.+)") print("Found base64 png of qrcode.") qrbuffer = am.base64_decode(b64) print("Got qrbuffer") qrimg = am.decode_png(qrbuffer) print("Created img") qrtex = am.texture2d(qrimg) print("Created texture2d") sprite = { texture: qrtex s1: 0 t1: 0 s2: 1 t2: 1 x1: 0 y1: 0 x2: qrimg.width y2: qrimg.height wdith: qrimg.width height: qrimg.height } qrcode = ecs.Entity! qrcode_texture = { vec4(0,1,1,1), vec4(1,1,1,1), vec4(1,0,1,1), vec4(1,0,1,1), vec4(0,0,1,1), vec4(0,1,1,1) } code_graphic = GraphicsComponent("graphic",{ graphic: sprite }) qrcode\add(code_graphic) code_graphic\moveto(vec3(-0.5,-0.25,0)) ) log.info("Creating qrcode coroutine for lobby",{"ui"}) require("task").add(co) elseif world.domain == "server" lobby = ecs.Entity! lobby\add(NetworkedComponent("net",{ type: "level", level_name: "levels.lobby" level_data: {world.hub.peer.id} }), "net") qrcode = ecs.Entity! else error("Unknown domain:" .. world.domain) level.destroy = () -> if not lobby error("Tried to destory lobby before it was built") lobby\destroy! level