diff options
| author | Alex Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
|---|---|---|
| committer | Alexander M Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
| commit | 3a975db66a3711f34e8b64bb27a8eaca79fdeca9 (patch) | |
| tree | fcc12f8f9d638ff575c1963796de76b7628854b4 /src/menu/game.moon | |
| download | ggj26-master.tar.gz ggj26-master.tar.bz2 ggj26-master.zip | |
Diffstat (limited to 'src/menu/game.moon')
| -rw-r--r-- | src/menu/game.moon | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/src/menu/game.moon b/src/menu/game.moon new file mode 100644 index 0000000..9b871a4 --- /dev/null +++ b/src/menu/game.moon @@ -0,0 +1,208 @@ +settings = require("settings") +poems = require("poems") +net = require("net") +world = require("world") +log = require("log") +ui = require("ui") +win = require("window") +task = require("task") +abilities = require("abilities") + +x = {} + +x.node = am.group! +net.register_message("RequestRole", {}) +net.register_message("RespondRole", { + required: { + youare: "string" + start: "number" + time: "number" + } + optional: { + hint: "string" + poem: "string" + } +}) +x.slide_and_fade = (node, delay) -> + delay = delay or 0 + tween = am.ease.sine + ease_color = (node) -> + end_color = node.color + node.color = end_color({a:0}) + node\action(am.series({ + am.delay(delay), + am.tween( + 0.5, + { + color: end_color + }, + tween + ) + })) + for _, text in pairs(node\all("text",true)) + ease_color(text) + for _, sprite in pairs(node\all("sprites",true)) + ease_color(sprite) + + translate = node\all("translate", true) + for _, translate_node in pairs(translate) + print("Examining translate node:", translate_node) + end_y = translate_node.y + translate_node.y += 50 + translate_node\action(am.series({ + am.delay(delay), + am.tween( + 0.5, + { + y: end_y + }, + tween + ) + })) + +-- data contains +-- > data.youare --("pawn" or "unmasked") +-- and then either +-- > data.hint -- (string) +-- or +-- > data.poem -- (text) +x.create_graphic = (data) -> + print("Creating mask on screen for data:" .. tostring(data)) + timer = ui.text(0,400,win.width-40, 100, "00:00") + timer.node\tag("timer") + alert_minute = false + alert_oot = false + timer.node\action(() -> + now = am.eval_js("Date.now()") + end_time = data.start + (data.time * 1000) + countdown = math.floor((end_time - now) / 1000) + minutes = math.floor(countdown/60) + seconds = countdown % 60 + time_txt = string.format("%02d : %02d",minutes, seconds) + timer.node("text").text = time_txt -- assume only 1 line? + if countdown < 60 and not alert_minute-- 1 minute + log.info("1 minute alert", {"client"}) + alert_minute = true + timer.node\action(am.play(17962709,false,1,1)) + if countdown < 0 and not alert_oot + -- Alert sound + log.info("out of time alert", {"client"}) + alert_oot = true + timer.node\action(am.play(96446209,false,1,1)) + return + ) + click = (n) -> + return () -> + log.info("Click " .. tostring(n), {"client"}) + return true + timer.node\action(am.series({ + am.parallel({ + am.play(68962308,false,1,1) + am.delay(1) + }), + am.parallel({ + am.play(68962308,false,1,0.75) + am.delay(1) + }), + am.parallel({ + am.play(68962308,false,1,0.25) + am.delay(1) + }) + })) + if data.youare == "unmasked" + -- Do unmasked stuff + youare = ui.text(0,300,win.width-40, 100, "You wear no mask") + x.slide_and_fade(youare.node) + fools = ui.text(0,200,win.width-40, 100, "These fools, they created an order based on ") + x.slide_and_fade(fools.node,0.5) + hint = ui.text(0,0,win.width-40, 100, data.hint) + x.slide_and_fade(hint.node, 1) + keep_looking = ui.text(0,-200,win.width-40,100,"Keep looking 5") + keep_looking.node\tag("keep_looking") + keep_looking.node\action(() -> + now = am.eval_js("Date.now()") + end_time = data.start + (5 * 1000) + if now < end_time + keep_looking.node("text").text = "Keep looking " .. math.ceil((end_time - now) / 1000) + else + ui.delete(keep_looking) + + ) + else + assert(abilities[data.youare], "No ability hint for role: " .. tostring(data.youare)) + print("Going into else branch for create_graphic") + print("ui.text was", ui.text) + print(debug.getinfo(ui.text)) + youare = ui.text(0,332,win.width-40,100,"You are " .. data.youare) + x.slide_and_fade(youare.node) + --ability = ui.text(0,264,win.width-40,100,abilities[data.youare]) + --x.slide_and_fade(ability.node) + assert(youare, "Failed to get a node from ui.text") + text = ui.text(0,200,win.width-40,100,"You remember the words we spoke at the founding, they were:") + x.slide_and_fade(text.node, 0.5) + poem = ui.text(0,0,win.width-40,100,data.poem) + x.slide_and_fade(poem.node, 1) + log.info("Finished creating graphic",{"client"}) + + +x.create = () -> + if world.hub + all_peers = world.hub.clients + peers = {} -- masked players + for clientid,connection in pairs(all_peers) + table.insert(peers, clientid) + unmasked = {} -- unmasked players + for i = 1, settings.n_unmasked + rng = math.random(#peers) + table.insert(unmasked, table.remove(peers, rng)) + poem = poems[math.random(#poems)] + hint = poem.hints[math.random(#poem.hints)] + start_time = am.eval_js("Date.now()") + client_data = {} + for _, clientid in ipairs(peers) + client_data[clientid] = { + youare: "a pawn" + poem: poem.text + start: start_time + time: settings.game_time + } + --world.hub\send(clientid, "Begin", { + --youare: "a pawn" + --poem: poem.text + --start: start_time + --time: settings.game_time + --}) + for _, clientid in ipairs(unmasked) + client_data[clientid] = { + youare: "unmasked" + hint: hint + start: start_time + time: settings.game_time + } + --world.hub\send(clientid, "Begin", { + --youare: "unmasked" + --hint: hint + --start: start_time + --time: settings.game_time + --}) + world.level_sync.client_data = client_data + --world.hub\listen("RequestRole","Request role", (clientid, _) -> + --log.info("Responding with role:" .. tostring(client_data[clientid]), {"net","server"}) + --world.hub\send(clientid, "RespondRole", client_data[clientid]) + --) + world.network\listen("RespondRole", "Respond role", (_, data) -> + log.info("Got role from server:" .. tostring(data), {"net","client"}) + x.create_graphic(data) + am.save_state("gameplay", data) + ) + world.network\send("RequestRole",{}) + --world.network\listen("Begin","Begin game", (hubid, data) -> + --log.info("Staring game, data: " .. tostring(data), {"net","client"}) + --role = data.youare + --time_pos = am.translate(vec2(100,20)) + --x.create_graphic(data) + --am.save_state("gameplay", data) + --log.info("Finished saving data:" .. tostring(am.load_state("gameplay")), {"net","client"}) + --) + +x |
