state sync
This commit is contained in:
@@ -62,11 +62,36 @@ div#main-button-bar {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
button.main-bar {
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
margin: 2.5px;
|
||||
background-color: rgba(0,0,0,0);
|
||||
border: 1px solid black;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
div#main-log {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
div#harvest-button-bar {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
min-height: 125px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
button.harvest-button {
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
margin: 2.5px;
|
||||
background-color: rgba(0,0,0,0);
|
||||
border: 1px solid black;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
div.log-line {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -127,15 +152,6 @@ div#modal {
|
||||
padding: 0.3em
|
||||
}
|
||||
|
||||
button.main-bar {
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
margin: 2.5px;
|
||||
background-color: rgba(0,0,0,0);
|
||||
border: 1px solid black;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
button#button-modal-close {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
@@ -229,4 +245,16 @@ div#charsheet-upgrade-tree {
|
||||
flex-wrap: nowrap;
|
||||
flex-direction: row;
|
||||
width: max-content;
|
||||
}
|
||||
|
||||
div#charsheet-upgrade-details {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mermaid svg {
|
||||
height: auto;
|
||||
min-height: 400px;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
var charsheet_elements = {}
|
||||
charsheet_elements["lbl_agility"] = document.getElementById("lbl-attr-agility");
|
||||
charsheet_elements["lbl_instinct"] = document.getElementById("lbl-attr-instinct");
|
||||
charsheet_elements["lbl_leadership"] = document.getElementById("lbl-attr-leadership");
|
||||
charsheet_elements["lbl_instinct_txt"] = document.getElementById("lbl-attr-instinct-txt");
|
||||
charsheet_elements["btn_upgrade_agility"] = document.getElementById("btn-upgrade-agility");
|
||||
charsheet_elements["btn_upgrade_instinct"] = document.getElementById("btn-upgrade-instinct");
|
||||
charsheet_elements["btn_upgrade_leadership"] = document.getElementById("btn-upgrade-leadership");
|
||||
charsheet_elements["blk_tree"] = document.getElementById("charsheet-upgrade-tree");
|
||||
|
||||
function update_charsheet() {
|
||||
charsheet_elements["lbl_agility"].innerHTML = gamestate["agility"];
|
||||
charsheet_elements["lbl_instinct"].innerHTML = gamestate["instinct"];
|
||||
charsheet_elements["lbl_leadership"].innerHTML = gamestate["leadership"];
|
||||
|
||||
if (gamestate["story_beat"] >= 3) {
|
||||
charsheet_elements["lbl_instinct_txt"].innerHTML = "Intelligence";
|
||||
charsheet_elements["btn_upgrade_instinct"].innerHTML = "Intelligence Upgrades";
|
||||
}
|
||||
}
|
||||
|
||||
async function purchase_upgrade(tree, upgrade) {
|
||||
var upgrade_data = await fetch(`/upgrades/${tree}/${upgrade}`)
|
||||
.then(res => res.text())
|
||||
console.log(upgrade_data)
|
||||
}
|
||||
|
||||
async function display_tree(tree) {
|
||||
var upgrade_tree = await fetch(`/upgrades/${tree}`)
|
||||
.then(res => res.text())
|
||||
//console.log(upgrade_tree)
|
||||
|
||||
charsheet_elements["blk_tree"].innerHTML = upgrade_tree
|
||||
}
|
||||
|
||||
charsheet_elements["btn_upgrade_agility"].addEventListener("click", (ev) => {display_tree("agility")});
|
||||
charsheet_elements["btn_upgrade_instinct"].addEventListener("click", (ev) => {display_tree("instinct")});
|
||||
charsheet_elements["btn_upgrade_leadership"].addEventListener("click", (ev) => {display_tree("leadership")});
|
||||
100
pak/static/js/dlg-charsheet.mjs
Normal file
100
pak/static/js/dlg-charsheet.mjs
Normal file
@@ -0,0 +1,100 @@
|
||||
import mermaid from "/static/js/mermaid/mermaid.esm.min.mjs";
|
||||
mermaid.initialize({
|
||||
startOnLoad: false,
|
||||
theme: "base",
|
||||
useMaxWidth: true,
|
||||
securityLevel: "loose"
|
||||
});
|
||||
|
||||
var charsheet_elements = {}
|
||||
charsheet_elements["lbl_agility"] = document.getElementById("lbl-attr-agility");
|
||||
charsheet_elements["lbl_instinct"] = document.getElementById("lbl-attr-instinct");
|
||||
charsheet_elements["lbl_leadership"] = document.getElementById("lbl-attr-leadership");
|
||||
charsheet_elements["lbl_instinct_txt"] = document.getElementById("lbl-attr-instinct-txt");
|
||||
charsheet_elements["btn_upgrade_agility"] = document.getElementById("btn-upgrade-agility");
|
||||
charsheet_elements["btn_upgrade_instinct"] = document.getElementById("btn-upgrade-instinct");
|
||||
charsheet_elements["btn_upgrade_leadership"] = document.getElementById("btn-upgrade-leadership");
|
||||
charsheet_elements["blk_tree"] = document.getElementById("charsheet-upgrade-tree");
|
||||
charsheet_elements["blk_details"] = document.getElementById("charsheet-upgrade-details");
|
||||
charsheet_elements["lbl_upgrade_name"] = document.getElementById("lbl-upgrade-name");
|
||||
charsheet_elements["txt_upgrade_desc"] = document.getElementById("txt-upgrade-desc");
|
||||
charsheet_elements["lst_upgrade_reqs"] = document.getElementById("lst-upgrade-requires");
|
||||
|
||||
function update_charsheet() {
|
||||
charsheet_elements["lbl_agility"].innerHTML = gamestate["agility"];
|
||||
charsheet_elements["lbl_instinct"].innerHTML = gamestate["instinct"];
|
||||
charsheet_elements["lbl_leadership"].innerHTML = gamestate["leadership"];
|
||||
|
||||
if (gamestate["story_beat"] >= 3) {
|
||||
charsheet_elements["lbl_instinct_txt"].innerHTML = "Intelligence";
|
||||
charsheet_elements["btn_upgrade_instinct"].innerHTML = "Intelligence Upgrades";
|
||||
}
|
||||
}
|
||||
|
||||
globalThis.purchase_upgrade = async function (tree, upgrade) {
|
||||
charsheet_elements["blk_details"].style.visibility = "visible";
|
||||
charsheet_elements["blk_details"].style.display = "flex";
|
||||
charsheet_elements["blk_tree"].style.visibility = "hidden";
|
||||
charsheet_elements["blk_tree"].style.display = "none";
|
||||
var upgrade_data = await fetch(`/upgrades/${tree}/${upgrade}`)
|
||||
.then(res => res.text())
|
||||
console.log(upgrade_data)
|
||||
var upgrade = JSON.parse(upgrade_data);
|
||||
|
||||
charsheet_elements["lbl_upgrade_name"].innerHTML = upgrade["name"];
|
||||
charsheet_elements["txt_upgrade_desc"].innerHTML = upgrade["desc"];
|
||||
charsheet_elements["lst_upgrade_reqs"].innerHTML = "";
|
||||
|
||||
if (upgrade["food"] > 0) {
|
||||
var foodli = document.createElement("li");
|
||||
foodli.innerHTML = `🍏 ${upgrade["food"]} food`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(foodli);
|
||||
}
|
||||
if (upgrade["shinies"] > 0) {
|
||||
var shiniesli = document.createElement("li");
|
||||
shiniesli.innerHTML = `🪙 ${upgrade["shinies"]} shinies`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(shiniesli);
|
||||
}
|
||||
if (upgrade["agility"] > 0) {
|
||||
var agilityli = document.createElement("li");
|
||||
agilityli.innerHTML = `An agility score of ${upgrade["agility"]}`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(agilityli);
|
||||
}
|
||||
if (upgrade["instinct"] > 0) {
|
||||
var instinctli = document.createElement("li");
|
||||
instinctli.innerHTML = `An instinct score of ${upgrade["instinct"]}`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(instinctli);
|
||||
}
|
||||
if (upgrade["leadership"] > 0) {
|
||||
var leadershipli = document.createElement("li");
|
||||
leadershipli.innerHTML = `A leadership score of ${upgrade["leadership"]}`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(leadershipli);
|
||||
}
|
||||
|
||||
for (item in upgrade["requires"]) {
|
||||
var itemli = document.createElement("li");
|
||||
itemli.innerHTML = `The upgrade ${item}`;
|
||||
charsheet_elements["lst_upgrade_reqs"].appendChild(itemli);
|
||||
}
|
||||
}
|
||||
|
||||
async function display_tree(tree) {
|
||||
charsheet_elements["blk_details"].style.visibility = "hidden";
|
||||
charsheet_elements["blk_details"].style.display = "none";
|
||||
charsheet_elements["blk_tree"].style.visibility = "visible";
|
||||
charsheet_elements["blk_tree"].style.display = "flex";
|
||||
|
||||
var upgrade_tree = await fetch(`/upgrades/${tree}`)
|
||||
.then(res => res.text())
|
||||
//console.log(upgrade_tree)
|
||||
var data_block = document.getElementById("upgrade-tree-data");
|
||||
data_block.removeAttribute("data-processed");
|
||||
|
||||
//charsheet_elements["blk_tree"].innerHTML = upgrade_tree
|
||||
data_block.innerHTML = upgrade_tree;
|
||||
await mermaid.run({nodes: [data_block]})
|
||||
}
|
||||
|
||||
charsheet_elements["btn_upgrade_agility"].addEventListener("click", (ev) => {display_tree("agility")});
|
||||
charsheet_elements["btn_upgrade_instinct"].addEventListener("click", (ev) => {display_tree("instinct")});
|
||||
charsheet_elements["btn_upgrade_leadership"].addEventListener("click", (ev) => {display_tree("leadership")});
|
||||
@@ -1,5 +1,11 @@
|
||||
globalThis.desktop_mode = false;
|
||||
|
||||
async function prepare_gamestate() {
|
||||
load_gamestate();
|
||||
tick_meter_running = true;
|
||||
}
|
||||
|
||||
|
||||
function load_gamestate() {
|
||||
var gamestate_loaded = window.localStorage.getItem("gamestate");
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ globalThis.gamestate_default = {
|
||||
"agility": 0,
|
||||
"instinct": 0,
|
||||
"leadership": 0,
|
||||
"unspent-attr": 0,
|
||||
"income": {
|
||||
"last_food": Array(10).fill(0),
|
||||
"last_shinies": Array(10).fill(0),
|
||||
@@ -37,7 +38,8 @@ globalThis.gamestate_default = {
|
||||
},
|
||||
"modifiers": {
|
||||
"speed": [],
|
||||
"chancesteal": []
|
||||
"chancesteal": [],
|
||||
"harvestamount": [],
|
||||
},
|
||||
"upgrades": []
|
||||
};
|
||||
@@ -72,6 +74,16 @@ globalThis.record_log = function (text) {
|
||||
page_elements["div_log"].append(div_logrow);
|
||||
}
|
||||
|
||||
var choice_row = null;
|
||||
|
||||
globalThis.choice_made = function () {
|
||||
if (choice_row == null) { return; }
|
||||
|
||||
tick_meter_running = true;
|
||||
choice_row.remove();
|
||||
choice_row = null;
|
||||
}
|
||||
|
||||
function record_log_with_choices() {
|
||||
const div_logrow = document.createElement("div");
|
||||
if (bool_log_alt) { div_logrow.className = "log-line"; }
|
||||
@@ -92,6 +104,7 @@ function record_log_with_choices() {
|
||||
|
||||
const div_logactions = document.createElement("div");
|
||||
div_logactions.className = "log-button-row";
|
||||
choice_row = div_logactions;
|
||||
|
||||
for (var i = 1; i < arguments.length; i += 2) {
|
||||
console.log(i)
|
||||
@@ -101,7 +114,7 @@ function record_log_with_choices() {
|
||||
var btn_action = document.createElement("button");
|
||||
btn_action.innerHTML = label;
|
||||
btn_action.className = "log-action-button";
|
||||
btn_action.setAttribute("onclick", callback + "; tick_meter_running = true;");
|
||||
btn_action.setAttribute("onclick", callback + "; choice_made();");
|
||||
div_logactions.append(btn_action);
|
||||
}
|
||||
div_logdata.append(div_logactions);
|
||||
@@ -113,6 +126,7 @@ function record_log_with_choices() {
|
||||
|
||||
globalThis.modal_dialog_open = false;
|
||||
globalThis.modal_dialog_scripted = false;
|
||||
globalThis.modal_was_ticking = false;
|
||||
globalThis.modal_dialog_name = "";
|
||||
var dialog_queue = [];
|
||||
|
||||
@@ -120,6 +134,7 @@ function modal_no_prop(event) { event.stopPropagation(); }
|
||||
|
||||
async function open_modal_dialog(dialog) {
|
||||
if (!modal_dialog_open) {
|
||||
modal_was_ticking = tick_meter_running;
|
||||
tick_meter_running = false;
|
||||
modal_dialog_open = true;
|
||||
modal_dialog_name = dialog;
|
||||
@@ -153,12 +168,22 @@ async function open_modal_dialog(dialog) {
|
||||
document.head.appendChild(script);
|
||||
modal_dialog_scripted = true;
|
||||
}
|
||||
if (urlExists(`/static/js/dlg-${dialog}.mjs`)) {
|
||||
var script = document.createElement("script");
|
||||
script.setAttribute("id", "dialog-script");
|
||||
script.setAttribute("type", "module");
|
||||
script.src = `/static/js/dlg-${dialog}.mjs`;
|
||||
document.head.appendChild(script);
|
||||
modal_dialog_scripted = true;
|
||||
}
|
||||
} else {
|
||||
var dialog_data = await fetch(`/dialog/${dialog}`)
|
||||
.then(res => { return res.text(); });
|
||||
var dialog_script = null;
|
||||
if (urlExists(`/static/js/dlg-${dialog}.js`)) {
|
||||
dialog_script = `/static/js/dlg-${dialog}.js`;
|
||||
} else if (urlExists(`/static/js/dlg-${dialog}.mjs`)) {
|
||||
dialog_script = `/static/js/dlg-${dialog}.mjs`
|
||||
}
|
||||
|
||||
dialog_queue.push([dialog_data, dialog_script, dialog]);
|
||||
@@ -180,7 +205,7 @@ async function close_modal_dialog() {
|
||||
modal_background.style.visibility = "hidden";
|
||||
document.body.removeChild(modal_background);
|
||||
|
||||
tick_meter_running = true;
|
||||
tick_meter_running = modal_was_ticking;
|
||||
modal_dialog_open = false;
|
||||
modal_dialog_name = "";
|
||||
modal_dialog_scripted = false;
|
||||
@@ -299,6 +324,18 @@ const hnd_devtoolkit = new Konami(() => {
|
||||
}
|
||||
})
|
||||
|
||||
globalThis.harvest_fish = function () {
|
||||
gamestate["food"] += 1;
|
||||
tickdiffs["food"] += 1;
|
||||
|
||||
gamestate["modifiers"]["harvestamount"].forEach((mod) => {
|
||||
gamestate["food"] += mod[1];
|
||||
tickdiffs["food"] += mod[1];
|
||||
});
|
||||
|
||||
update_ui();
|
||||
}
|
||||
|
||||
async function game_tick() {
|
||||
gamestate["tick"] += 1;
|
||||
ticks_since_last_save += 1;
|
||||
@@ -387,6 +424,15 @@ async function game_tick() {
|
||||
|
||||
break;
|
||||
case "steal-food":
|
||||
if (tickdata.items.food.length == 0) {
|
||||
record_log("You have encountered a human. Attempting to steal shinies.");
|
||||
tickdata.items.shinies.forEach((item) => {
|
||||
total_shinies += item["amount"];
|
||||
shinies_descs.push(item["desc"]);
|
||||
})
|
||||
steal_resource("shinies", "humans", total_shinies, shinies_descs.toString());
|
||||
break;
|
||||
}
|
||||
record_log("You have encountered a human. Attempting to steal food.");
|
||||
tickdata.items.food.forEach((item) => {
|
||||
total_food += item["amount"];
|
||||
@@ -395,6 +441,15 @@ async function game_tick() {
|
||||
steal_resource("food", "humans", total_food, food_descs.toString());
|
||||
break;
|
||||
case "steal-shinies":
|
||||
if (tickdata.items.shinies.length == 0) {
|
||||
record_log("You have encountered a human. Attempting to steal food.");
|
||||
tickdata.items.food.forEach((item) => {
|
||||
total_food += item["amount"];
|
||||
food_descs.push(item["desc"]);
|
||||
})
|
||||
steal_resource("food", "humans", total_food, food_descs.toString());
|
||||
break;
|
||||
}
|
||||
record_log("You have encountered a human. Attempting to steal shinies.");
|
||||
tickdata.items.shinies.forEach((item) => {
|
||||
total_shinies += item["amount"];
|
||||
@@ -528,11 +583,13 @@ target.addEventListener(start_event, function (ev) {
|
||||
page_elements["btn_charsheet"] = document.querySelector("#button-charsheet");
|
||||
page_elements["btn_settings"] = document.querySelector("#button-settings");
|
||||
page_elements["btn_about"] = document.querySelector("#button-about");
|
||||
page_elements["btn_harvest"] = document.querySelector("#button-harvest-fish");
|
||||
|
||||
page_elements["menu_enc_human"].addEventListener("change", (ev) => {update_action("human", ev.target.value)});
|
||||
page_elements["menu_enc_seagull"].addEventListener("change", (ev) => {update_action("seagull", ev.target.value)});
|
||||
page_elements["btn_charsheet"].addEventListener("click", (ev) => {open_modal_dialog("charsheet")});
|
||||
page_elements["btn_about"].addEventListener("click", (ev) => {open_modal_dialog("about")});
|
||||
page_elements["btn_harvest"].addEventListener("click", (ev) => {harvest_fish()});
|
||||
|
||||
prepare_gamestate();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user