let params = new URLSearchParams(window.location.search);
if (params.get("delete")) {
if (confirm("Are you sure you want to clear all game data?")) {
localStorage.clear();
window.location = "./";
}
}
var timeoutId;
var previousState;
var errorMessage;
var states = [];
var rooms = [];
var selectedItems = [];
var userData = {
version: 1,
position: "begin-pickup",
fuel: 40,
energy: 50,
money: 0,
debrisInSpace: [],
inCargoHold: [],
maxCargoCapacity: 20,
energyRegenRate: 10,
maxBattery: 100,
energyRegenAmount: 1,
ramscoop: 25,
energyRegen: 10,
enabled: [],
id: 1,
name: "FR-LNC-3R",
sprite: "playerShip1_red.png",
};
var templateLoader;
var messageQueue = [];
document.addEventListener("DOMContentLoaded", event => {
errorMessage = "";
document.getElementById("delete-game").addEventListener("click", () => {
if (confirm("Are you sure you want to delete your game? This cannot be undone.")) {
localStorage.clear();
window.location = "./";
}
});
templateLoader = new TemplateLoader();
load();
setInterval(gameTick, 1000);
var settingsButton = document.getElementsByClassName('dropdown-toggle')[0];
settingsButton.addEventListener('click', event => {
event.stopPropagation();
let dropdownTarget = settingsButton.getAttribute("data-target");
let dropdownContainer = document.getElementById(dropdownTarget);
if(dropdownContainer.style.display == "block") {
dropdownContainer.style.display = "none";
} else {
dropdownContainer.style.display = "block";
dropdownContainer.style.top = settingsButton.offsetTop + settingsButton.clientHeight + 4 + "px";
dropdownContainer.style.left = settingsButton.offsetRight + dropdownContainer.clientWidth + "px";
}
});
window.addEventListener("click", event => {
var settingsButton = document.getElementsByClassName('dropdown-toggle')[0];
let dropdownTarget = settingsButton.getAttribute("data-target");
let dropdownContainer = document.getElementById(dropdownTarget);
dropdownContainer.style.display = "none";
});
});
function updateError() {
let errorElement = document.getElementById("error");
if (errorMessage != "") {
toastMessage(`${errorMessage}`);
}
errorElement.innerHTML = errorMessage;
}
function toastMessage(message, style) {
messageQueue.push({message: message, style: style});
processToasts();
}
function processToasts() {
let message = messageQueue.pop();
if(!message) {
return;
}
let messageElement = document.createElement('div');
messageElement.innerHTML = message.message;
messageElement.className = "toast";
if(message.style) {
messageElement.className += " " + message.style;
}
let messageLength = message.message.split(" ").length;
let timeoutId = setTimeout(() => hideToast(messageElement), Math.max(5000, messageLength * 500));
let closeButton = document.createElement('i');
closeButton.className = "toast-close fas fa-times";
closeButton.addEventListener("click", event => {
hideToast(messageElement);
clearTimeout(timeoutId);
});
messageElement.appendChild(closeButton);
document.body.appendChild(messageElement);
updateToastPosition();
}
function updateToastPosition() {
let activeToasts = document.body.getElementsByClassName("toast");
let lastTop = 30;
for(let i = activeToasts.length - 1; i >= 0; i--) {
let toastElement = activeToasts[i];
toastElement.style.right = "5%";
toastElement.style.bottom = lastTop + "px";
let bounds = toastElement.getBoundingClientRect();
lastTop += bounds.height + 16;
}
}
function hideToast(messageElement) {
document.body.removeChild(messageElement);
updateToastPosition();
}
function updateEnergy() {
let batteryClass = "fa-battery-full";
if(userData.energy/ userData.maxBattery < 0.75) {
batteryClass = "fa-battery-three-quarters";
}
if(userData.energy/ userData.maxBattery < 0.5) {
batteryClass = "fa-battery-half";
}
if(userData.energy/ userData.maxBattery < 0.25) {
batteryClass = "fa-battery-quarter";
}
if(userData.energy/ userData.maxBattery < 0.05) {
batteryClass = "fa-battery-empty";
}
document.getElementById("energy").innerHTML = ` ${userData.energy} / ${userData.maxBattery}`;
}
function updateMoney() {
document.getElementById("money").innerHTML = ` ${userData.money}`;
}
function updateFuel() {
document.getElementById("fuel").innerHTML = ` ${userData.fuel}`;
}
function groupByType(dataset) {
let reducedDataset = dataset.reduce((accumulator, value) => {
accumulator[value.type] = accumulator[value.type] || [];
accumulator[value.type].push(value);
return accumulator;
}, {});
return Object.values(reducedDataset);
}
function updateActivity(newActivityText) {
document.getElementById("activity").innerHTML = newActivityText;
}
function delayLoop(callback = () => { }, duration = 3000, step = 10) {
var delay = duration / step;
timeoutId = setTimeout(() => {
let progress = document.getElementById("progress");
progress.value += (delay / duration) * 100;
if (progress.value >= 100) {
progress.value = 100;
callback();
} else {
delayLoop(callback, duration, step);
}
}, delay);
}
function gameTick() {
processToasts();
userData.energyRegen--;
if (userData.energyRegen < 0) {
userData.energy = Math.min(userData.maxBattery, userData.energy + userData.energyRegenAmount);
updateEnergy();
userData.energyRegen = userData.energyRegenRate;
save();
}
if (userData.energy > 0 && isFlagEnabled('ion-engine-enabled')) {
userData.energy--;
if (isFlagEnabled('ramjet-enabled')) {
userData.ramscoop--;
if (userData.ramscoop < 0) {
userData.ramscoop = 25;
userData.fuel++;
updateFuel();
save();
}
}
updateEnergy();
save();
}
}
function pickRandomItem(probabilityTable) {
let roll = Math.floor(100 * Math.random()) + 1;
let totalProbability = 0;
let selectedItem = probabilityTable[0];
for (let i = 0; i < probabilityTable.length; i++) {
let item = probabilityTable[i];
totalProbability += item.probability;
if (roll < totalProbability) {
selectedItem = item;
break;
}
};
return selectedItem;
}