From 25102a6bbceae65d6aa8a60572843ebdf4dbe655 Mon Sep 17 00:00:00 2001 From: Ada Werefox Date: Thu, 7 Mar 2024 03:46:23 -0600 Subject: [PATCH] Cross codes now update in place, as soon as a new save file is created. --- .../tracker/static/tracker/assets/refresh.js | 113 ++++++++++++++++-- .../tracker}/data/holy_cross_codes.json | 14 +-- .../templates/tracker/breakdown/block.html | 6 +- .../templates/tracker/codes/block.html | 36 +++--- .../templates/tracker/codes/index.html | 23 ++-- tunictracker/tracker/views.py | 16 +-- 6 files changed, 154 insertions(+), 54 deletions(-) rename tunictracker/tracker/{ => static/tracker}/data/holy_cross_codes.json (91%) diff --git a/tunictracker/tracker/static/tracker/assets/refresh.js b/tunictracker/tracker/static/tracker/assets/refresh.js index 2a6b48e..b8143da 100644 --- a/tunictracker/tracker/static/tracker/assets/refresh.js +++ b/tunictracker/tracker/static/tracker/assets/refresh.js @@ -1,10 +1,25 @@ var current_hash = ""; window.onload = () => { - const refresh_interval = setInterval(refresh_elements, 500); + fetch("http://localhost:8080/static/tracker/data/holy_cross_codes.json") + .then((response) => response.json()) + .then( + (data) => { + const cross_codes = JSON.parse(JSON.stringify(data)); + // console.log(cross_codes); + const refresh_interval = setInterval( + refresh_elements, + 500, + cross_codes + ); + }, + (error) => { + console.log(error); + } + ); }; -async function refresh_elements() { +async function refresh_elements(cross_codes) { fetch("http://localhost:8000/spoiler") .then((response) => response.json()) .then( @@ -28,7 +43,9 @@ async function refresh_elements() { const current_scene_name = response_object.Current.Scene; const all_scenes = response_object.Scenes; const debug_info = response_object.Debug; - const cross_codes = response_object.Codes; + const cross_codes_entered = response_object.Codes; + const default_cross_codes = cross_codes.Default; + const global_cross_codes = cross_codes.Global; // Refresh elements with new data from the back end. @@ -47,6 +64,11 @@ async function refresh_elements() { .getElementById("overview") .querySelector(".breakdown-list") .firstElementChild.cloneNode(true); + let cross_codes_block = document + .getElementById("overview") + .querySelector(".breakdown-list") + .firstElementChild.querySelector(".codes-block") + .cloneNode(true); breakdown_block.classList.remove("hidden"); let debug_item = document .getElementById("debug-block") @@ -122,18 +144,31 @@ async function refresh_elements() { .firstElementChild.cloneNode(true); breakdown_block_mapped_list_item.classList.remove("hidden"); + cross_codes_block = document + .getElementById("overview") + .querySelector(".breakdown-list") + .firstElementChild.querySelector(".codes-block") + .cloneNode(true); + let new_cross_codes_block_list = cross_codes_block + .querySelector(".codes-list") + .cloneNode(true); + let cross_codes_block_list_item = cross_codes_block + .querySelector(".codes-list") + .firstElementChild.cloneNode(true); + // Clear out current list content. new_breakdown_block_checks_list.innerHTML = ""; new_breakdown_block_entrances_list.innerHTML = ""; new_breakdown_block_mapped_list.innerHTML = ""; + new_cross_codes_block_list.innerHTML = ""; new_breakdown_block_checks_list.appendChild( - breakdown_block_checks_list_item.cloneNode() + breakdown_block_checks_list_item.cloneNode(true) ); new_breakdown_block_entrances_list.appendChild( - breakdown_block_entrances_list_item.cloneNode() + breakdown_block_entrances_list_item.cloneNode(true) ); new_breakdown_block_mapped_list.appendChild( - breakdown_block_mapped_list_item.cloneNode() + breakdown_block_mapped_list_item.cloneNode(true) ); // Create variables for commonly used values. @@ -143,6 +178,7 @@ async function refresh_elements() { let scene_entrances_undiscovered = all_scenes[scene].Totals.Entrances.Undiscovered; let scene_entrances_total = all_scenes[scene].Totals.Entrances.Total; + let scene_has_codes = Object.keys(cross_codes).includes(scene); // Set textContent. summary_title.textContent = scene; @@ -152,7 +188,7 @@ async function refresh_elements() { breakdown_block_checks_title.textContent = `Checks: ${all_scenes[scene].Totals.Checks.Undiscovered}/${all_scenes[scene].Totals.Checks.Total}`; breakdown_block_entrances_title.textContent = `Entrances: ${all_scenes[scene].Totals.Entrances.Undiscovered}/${all_scenes[scene].Totals.Entrances.Total}`; - // Create checks, entrances, and mapped entrances lists. + // Create checks, entrances, mapped entrances, and cross code lists. Object.keys(all_scenes[scene].Checks).forEach((check) => { if (!all_scenes[scene].Checks[check]) { breakdown_block_checks_list_item.textContent = `❌ ${check}`; @@ -174,6 +210,63 @@ async function refresh_elements() { ); } }); + Object.keys(default_cross_codes).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = default_cross_codes[code] + .replace(/U/g, "⬆️ ") + .replace(/R/g, "➡️ ") + .replace(/D/g, "⬇️ ") + .replace(/L/g, "⬅️ "); + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + Object.keys(global_cross_codes).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = global_cross_codes[code] + .replace(/U/g, "⬆️ ") + .replace(/R/g, "➡️ ") + .replace(/D/g, "⬇️ ") + .replace(/L/g, "⬅️ "); + if (cross_codes_entered.Global[code]) { + cross_codes_block_list_item.classList.add("hidden"); + } else { + cross_codes_block_list_item.classList.remove("hidden"); + } + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + if (scene_has_codes) { + Object.keys(cross_codes[scene]).forEach((code) => { + cross_codes_block_list_item.querySelector( + ".codes-list-item-title" + ).textContent = code; + cross_codes_block_list_item.querySelector( + ".codes-list-item-code" + ).textContent = cross_codes[scene][code] + .replace(/U/g, "⬆️ ") + .replace(/R/g, "➡️ ") + .replace(/D/g, "⬇️ ") + .replace(/L/g, "⬅️ "); + if (cross_codes_entered[scene][code]) { + cross_codes_block_list_item.classList.add("hidden"); + } else { + cross_codes_block_list_item.classList.remove("hidden"); + } + new_cross_codes_block_list.appendChild( + cross_codes_block_list_item.cloneNode(true) + ); + }); + } // Apply color coding to summary block summary_block.classList.remove( @@ -207,10 +300,16 @@ async function refresh_elements() { breakdown_block .querySelector(".breakdown-block-mapped-list") .replaceWith(new_breakdown_block_mapped_list); + breakdown_block + .querySelector(".codes-list") + .replaceWith(new_cross_codes_block_list); // Append relevant elements to lists. if (scene == current_scene_name) { summary_block.classList.add("hidden"); + breakdown_block + .querySelector(".codes-block") + .classList.remove("hidden"); document .getElementById("breakdown-current") .firstElementChild.replaceWith(breakdown_block.cloneNode(true)); diff --git a/tunictracker/tracker/data/holy_cross_codes.json b/tunictracker/tracker/static/tracker/data/holy_cross_codes.json similarity index 91% rename from tunictracker/tracker/data/holy_cross_codes.json rename to tunictracker/tracker/static/tracker/data/holy_cross_codes.json index 4109e1c..7b8c64c 100644 --- a/tunictracker/tracker/data/holy_cross_codes.json +++ b/tunictracker/tracker/static/tracker/data/holy_cross_codes.json @@ -1,7 +1,8 @@ { "Default": { "Speedrunner Code": "RULDDRULU", - "Seeking Spell": "ULURDL" + "Seeking Spell": "ULURDL", + "Healing Spell": "DRDLURU" }, "Cathedral": { "Secret Legend Door": "LULURULURDRRURDLDRDLDL" @@ -19,6 +20,11 @@ "Eastern Vault Fortress": { "Candles Fairy": "RLDRUL" }, + "Global": { + "Firebomb": "LURDRURDRURDL", + "Firecracker": "DRURULULDLDR", + "Icebomb": "LDRURDRURDRUL" + }, "Hourglass Cave": { "Hourglass Door": "RULURULUURDLDRDLDR", "Hourglass Fairy": "LURURDRURULLLURU" @@ -65,12 +71,6 @@ "Secret Gathering Place": { "Waterfall Fairy": "DRURURULULURURULDLDLDRDLDRDRUR" }, - "Spells": { - "Healing Spell": "DRDLURU", - "Dynamite": "DRURULULDLDR", - "Fire Bomb": "LURDRURDRURDL", - "Ice Bomb": "LDRURDLURDLUL" - }, "West Garden": { "Sword Door": "DRULUR", "Tiles Fairy": "URULURULURDRULRLURULURULU", diff --git a/tunictracker/tracker/templates/tracker/breakdown/block.html b/tunictracker/tracker/templates/tracker/breakdown/block.html index 185eddb..d7476a7 100644 --- a/tunictracker/tracker/templates/tracker/breakdown/block.html +++ b/tunictracker/tracker/templates/tracker/breakdown/block.html @@ -57,9 +57,5 @@ {% endfor %} - {% if current_scene.title != scene_title %} - - {% else %} -
{% include "tracker/codes/index.html" %}
- {% endif %} +
{% include "tracker/codes/index.html" %}
diff --git a/tunictracker/tracker/templates/tracker/codes/block.html b/tunictracker/tracker/templates/tracker/codes/block.html index 4357d20..ebada44 100644 --- a/tunictracker/tracker/templates/tracker/codes/block.html +++ b/tunictracker/tracker/templates/tracker/codes/block.html @@ -1,18 +1,20 @@ - + +{% endif %} diff --git a/tunictracker/tracker/templates/tracker/codes/index.html b/tunictracker/tracker/templates/tracker/codes/index.html index 8023370..49a05a7 100644 --- a/tunictracker/tracker/templates/tracker/codes/index.html +++ b/tunictracker/tracker/templates/tracker/codes/index.html @@ -1,17 +1,20 @@ -