2023-02-01 14:52:56 -08:00
|
|
|
const sleep = ms => new Promise(r => setTimeout(r, ms)); // sleep(int ms)
|
|
|
|
|
2023-01-28 21:08:47 -08:00
|
|
|
var page_elements = {};
|
|
|
|
|
2023-02-01 14:52:56 -08:00
|
|
|
var gamestate = {};
|
2023-02-24 12:39:18 -08:00
|
|
|
var ticks_since_last_save = 0;
|
2023-02-01 14:52:56 -08:00
|
|
|
|
|
|
|
const gamestate_default = {
|
2023-02-24 12:39:18 -08:00
|
|
|
"statever": "1",
|
2023-02-01 14:52:56 -08:00
|
|
|
"tick": 1,
|
2023-02-24 12:39:18 -08:00
|
|
|
"name": "Nameless",
|
|
|
|
"level": 1,
|
|
|
|
"autosave": 35
|
2023-02-01 14:52:56 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
function prepare_gamestate() {
|
|
|
|
var gamestate_loaded = window.localStorage.getItem("gamestate");
|
|
|
|
|
|
|
|
if (gamestate_loaded == null) { gamestate = structuredClone(gamestate_default); }
|
|
|
|
else { gamestate = JSON.parse(gamestate_loaded); }
|
|
|
|
}
|
|
|
|
|
2023-01-28 21:08:47 -08:00
|
|
|
function record_log(text) {
|
|
|
|
const div_logrow = document.createElement("div");
|
|
|
|
div_logrow.className = "log-line";
|
|
|
|
|
|
|
|
const div_logtick = document.createElement("div");
|
|
|
|
div_logtick.className = "log-tick"
|
2023-02-01 14:52:56 -08:00
|
|
|
div_logtick.innerHTML = "Day " + gamestate["tick"];
|
2023-01-28 21:08:47 -08:00
|
|
|
div_logrow.append(div_logtick);
|
|
|
|
|
|
|
|
const div_logmsg = document.createElement("div");
|
|
|
|
div_logmsg.innerHTML = text;
|
|
|
|
div_logmsg.className = "log-msg";
|
|
|
|
div_logrow.append(div_logmsg);
|
|
|
|
|
|
|
|
page_elements["div_log"].append(div_logrow);
|
|
|
|
}
|
|
|
|
|
2023-02-01 14:52:56 -08:00
|
|
|
function save_game() {
|
|
|
|
window.localStorage.setItem("gamestate", JSON.stringify(gamestate));
|
|
|
|
record_log("Game saved.");
|
|
|
|
}
|
|
|
|
|
|
|
|
var tick_meter_running = true;
|
|
|
|
|
|
|
|
async function game_tick() {
|
|
|
|
gamestate["tick"] += 1;
|
2023-02-24 12:39:18 -08:00
|
|
|
ticks_since_last_save += 1;
|
|
|
|
// temp
|
|
|
|
page_elements["lbl_colony"].innerHTML = ticks_since_last_save;
|
2023-02-01 14:52:56 -08:00
|
|
|
page_elements["lbl_tick"].innerHTML = gamestate["tick"];
|
|
|
|
var tickdata = await fetch("/tick")
|
|
|
|
.then(res => {
|
|
|
|
json = res.json()
|
|
|
|
console.log(json)
|
|
|
|
return json
|
|
|
|
})
|
|
|
|
.catch(e => { throw e; });
|
|
|
|
console.log(JSON.stringify(tickdata));
|
|
|
|
|
|
|
|
if (tickdata["code"] != 200) {
|
|
|
|
console.error("Non-200 tick code: " + tickdata["code"]);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tickdata["event_type"] == 0) {
|
|
|
|
//sleep(12000);
|
|
|
|
//game_tick();
|
|
|
|
} else if (tickdata["event_type"] == 1) {
|
|
|
|
// Flavor event - no gameplay effect, but occasionally says something fun.
|
|
|
|
record_log(tickdata["log"]);
|
|
|
|
//await sleep(12000);
|
|
|
|
//game_tick();
|
|
|
|
}
|
2023-02-24 12:39:18 -08:00
|
|
|
|
|
|
|
// sanity check
|
|
|
|
if (!("autosave" in gamestate)) {
|
|
|
|
gamestate["autosave"] = 35;
|
|
|
|
}
|
|
|
|
if (ticks_since_last_save % gamestate["autosave"] == 0 && ticks_since_last_save != 0) {
|
|
|
|
save_game();
|
|
|
|
ticks_since_last_save = 0;
|
|
|
|
}
|
2023-02-01 14:52:56 -08:00
|
|
|
}
|
|
|
|
|
2023-01-28 21:08:47 -08:00
|
|
|
document.addEventListener("DOMContentLoaded", function (ev) {
|
|
|
|
page_elements["div_log"] = document.querySelector("#main-log");
|
|
|
|
page_elements["div_name"] = document.querySelector("#side-seagull-name");
|
|
|
|
page_elements["div_name_editor"] = document.querySelector("#side-seagull-name-editor");
|
|
|
|
page_elements["lbl_name"] = document.querySelector("#lbl-seagull-name");
|
2023-02-24 12:39:18 -08:00
|
|
|
page_elements["lbl_colony"] = document.querySelector("#lbl-seagull-colony");
|
2023-01-28 21:08:47 -08:00
|
|
|
page_elements["edt_name"] = document.querySelector("#edt-seagull-name");
|
2023-02-01 14:52:56 -08:00
|
|
|
page_elements["lbl_tick"] = document.querySelector("#main-day-counter");
|
|
|
|
|
|
|
|
prepare_gamestate();
|
2023-01-28 21:08:47 -08:00
|
|
|
|
|
|
|
record_log("It works!");
|
2023-02-01 14:52:56 -08:00
|
|
|
page_elements["lbl_name"].innerHTML = gamestate["name"];
|
|
|
|
page_elements["lbl_tick"].innerHTML = gamestate["tick"];
|
|
|
|
|
|
|
|
const interval = setInterval(() => {
|
|
|
|
if (tick_meter_running) { game_tick(); }
|
|
|
|
}, 1200);
|
2023-01-28 21:08:47 -08:00
|
|
|
});
|
|
|
|
|
|
|
|
function change_seagull_name() {
|
|
|
|
page_elements["div_name"].style.display = "none";
|
|
|
|
page_elements["div_name_editor"].style.display = "block";
|
|
|
|
}
|
|
|
|
|
|
|
|
function confirm_seagull_name() {
|
|
|
|
const new_name = page_elements["edt_name"].value;
|
|
|
|
page_elements["lbl_name"].innerHTML = new_name;
|
2023-02-01 14:52:56 -08:00
|
|
|
gamestate["name"] = new_name;
|
|
|
|
save_game();
|
2023-01-28 21:08:47 -08:00
|
|
|
|
|
|
|
page_elements["div_name"].style.display = "block";
|
|
|
|
page_elements["div_name_editor"].style.display = "none";
|
|
|
|
}
|
|
|
|
|
|
|
|
function cancel_seagull_name() {
|
|
|
|
page_elements["edt_name"].value = "";
|
|
|
|
|
|
|
|
page_elements["div_name"].style.display = "block";
|
|
|
|
page_elements["div_name_editor"].style.display = "none";
|
|
|
|
}
|