diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ad5fc99..6a22e1a 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -15,6 +15,12 @@ let display_class_topic; /** @type {string} */ let display_name_topic; +/** @type {string} */ +let alliance_selecting = ""; +/** @type {string} */ +let alliance_selected = ""; +let selection_state = ""; + /** @type {string} */ let display_sponsor_topic; @@ -47,9 +53,9 @@ let animation_timer_interval = setInterval(animation_timer, 10); let event_name = "Mecha Mayhem 2024"; let match_name = "No Match"; -let match_name_show = "No Match"; let round = ""; let number = ""; +let instance = ""; let score_red = 0; let score_red_str = ""; let score_blue = 0; @@ -79,6 +85,31 @@ const client = mqtt.connect("ws://10.42.0.36:8883"); client.on("connect", () => { console.log("connected to mqtt"); + + client.subscribe("alliance/selecting", (err) => { + if (err) { + console.log(err); + } else { + console.log(`subscribed to alliance/selecting`); + } + }); + + client.subscribe("alliance/selected", (err) => { + if (err) { + console.log(err); + } else { + console.log(`subscribed to alliance/selected`); + } + }); + + client.subscribe("alliance/status", (err) => { + if (err) { + console.log(err); + } else { + console.log(`subscribed to alliance/status`); + } + }); + client.subscribe("time", (err) => { if (err) { console.log(err); @@ -178,12 +209,32 @@ client.on("message", (topic, message) => { let message_str = message.toString(); switch(topic_str){ + case "alliance/selecting": + alliance_selecting = message_str; + break; + case "alliance/selected": + alliance_selected = message_str; + break; + case "alliance/status": + selection_state = message_str; + if(selection_state == "accepted") { + display_state = "accepted"; + setTimeout(() => { + display_state = "alliance-selection"; + }, 4000); + } else if(selection_state == "declined") { + display_state = "denied"; + setTimeout(() => { + display_state = "alliance-selection"; + }, 4000); + } + break; case "time": let local = Date.now(); let server = JSON.parse(message_str) * 1000; offset = server - local; - if (timer != "Scoring" && timer != "Scored" && match_name_show != "Next Match") { + if (timer != "Scoring" && timer != "Scored") { stop_timer(); tick_timer(); timer_next_tick = setInterval(tick_timer, 50); @@ -199,8 +250,13 @@ client.on("message", (topic, message) => { round = field_obj.tuple.round; if (round == "Qualification") { round = "Qual"; + } else if (round == "QuarterFinals") { + round = "QF" + } else if (round == "SemiFinals") { + round = "SF" } - match_name = `${round} ${num}`; + instance = `${field_obj.tuple.instance}`; + match_name = `${round} ${instance}-${num}`; number = `${num}`; break; case field_state_topic: @@ -215,18 +271,15 @@ client.on("message", (topic, message) => { score_blue_str = ""; score_blue = 0; score_red = 0; - match_name_show = "Next Match"; display_state = "pre-game"; break; case "Timeout": timer = "Timeout"; - match_name_show = match_name; break; case "Driver": timer_end = start_ms + 105; tick_timer(); timer_next_tick = setInterval(tick_timer, 50); - match_name_show = match_name; break; case "DriverDone": timer = "Scoring"; @@ -249,28 +302,23 @@ client.on("message", (topic, message) => { timer_end = start_ms + 15; tick_timer(); timer_next_tick = setInterval(tick_timer, 50); - match_name_show = match_name; break; case "AutonomousDone": - match_name_show = match_name; timer = "Scoring"; score_red_str = ""; score_blue_str = ""; break; case "Abandoned": timer = "Abandoned"; - match_name_show = match_name; break; case "Stopped": timer = "Stopped"; - match_name_show = match_name; break; case "Scored": timer = "Scored"; score_red_str = `${score_red}`; score_blue_str = `${score_blue}`; display_state = "timer"; - match_name_show = match_name; break; } break; @@ -337,7 +385,7 @@ onMount(() => {
{event_name}
{display_name}
{timer}
-{match_name_show}
+{match_name}
{score_red_str}
{score_blue_str}
@@ -383,7 +431,7 @@ onMount(() => {{round}
VS
{number}
+{instance}-{number}
{teams_blue[0]}
@@ -394,7 +442,7 @@ onMount(() => {{teams_blue[1]}
Captain
Selected
{alliance_selecting}
+{alliance_selected}
+