Просмотр исходного кода

Add a system for named saves

master
Fen Dweller 5 лет назад
Родитель
Сommit
d399f6e23c
2 измененных файлов: 104 добавлений и 11 удалений
  1. +1
    -1
      macrovision.css
  2. +103
    -10
      macrovision.js

+ 1
- 1
macrovision.css Просмотреть файл

@@ -810,7 +810,7 @@ button:enabled:active {
animation-name: toast-animation; animation-name: toast-animation;
animation-duration: 5s; animation-duration: 5s;
animation-timing-function: linear; animation-timing-function: linear;
z-index: 1001;
z-index: 99999;
} }


@keyframes toast-animation { @keyframes toast-animation {


+ 103
- 10
macrovision.js Просмотреть файл

@@ -1646,14 +1646,22 @@ function prepareSidebar() {
classes: ["flipped"] classes: ["flipped"]
}, },
{ {
name: "Save",
name: "Save Scene",
id: "menu-save", id: "menu-save",
icon: "fas fa-download"
icon: "fas fa-download",
input: true
}, },
{ {
name: "Load",
name: "Load Scene",
id: "menu-load", id: "menu-load",
icon: "fas fa-upload"
icon: "fas fa-upload",
select: true
},
{
name: "Delete Scene",
id: "menu-delete",
icon: "fas fa-trash",
select: true
}, },
{ {
name: "Load Autosave", name: "Load Autosave",
@@ -1695,6 +1703,28 @@ function prepareSidebar() {


buttonHolder.appendChild(button); buttonHolder.appendChild(button);
buttonHolder.appendChild(actionText); buttonHolder.appendChild(actionText);

if (entry.input) {
const input = document.createElement("input");
buttonHolder.appendChild(input);
input.placeholder = "default";
input.addEventListener("keyup", e => {
if (e.key === "Enter") {
const name = document.querySelector("#menu-save ~ input").value;
if (/\S/.test(name)) {
saveScene(name);
}
updateSaveInfo();
e.preventDefault();
}
})
}

if (entry.select) {
const select = document.createElement("select");
buttonHolder.appendChild(select);
}

menubar.appendChild(buttonHolder); menubar.appendChild(buttonHolder);
}); });
} }
@@ -1702,6 +1732,7 @@ function prepareSidebar() {
function checkBodyClass(cls) { function checkBodyClass(cls) {
return document.body.classList.contains(cls); return document.body.classList.contains(cls);
} }

function toggleBodyClass(cls, setting) { function toggleBodyClass(cls, setting) {
if (setting) { if (setting) {
document.body.classList.add(cls); document.body.classList.add(cls);
@@ -1972,12 +2003,49 @@ function prepareSettings(userSettings) {


function prepareMenu() { function prepareMenu() {
prepareSidebar(); prepareSidebar();
updateSaveInfo();


if (checkHelpDate()) { if (checkHelpDate()) {
document.querySelector("#open-help").classList.add("highlighted"); document.querySelector("#open-help").classList.add("highlighted");
} }
} }


function updateSaveInfo() {
const saves = getSaves();
const load = document.querySelector("#menu-load ~ select");
load.innerHTML = "";
saves.forEach(save => {
const option = document.createElement("option");
option.innerText = save;
option.value = save;
load.appendChild(option);
});
const del = document.querySelector("#menu-delete ~ select");
del.innerHTML = "";
saves.forEach(save => {
const option = document.createElement("option");
option.innerText = save;
option.value = save;
del.appendChild(option);
});
}

function getSaves() {
try {
const results = [];
Object.keys(localStorage).forEach(key => {
if (key.startsWith("macrovision-save-")) {
results.push(key.replace("macrovision-save-", ""));
}
})
return results;
} catch (err) {
alert("Something went wrong while loading (maybe you didn't have anything saved. Check the F12 console for the error.")
console.error(err);
return false;
}
}
function getUserSettings() { function getUserSettings() {
try { try {
const settings = JSON.parse(localStorage.getItem("settings")); const settings = JSON.parse(localStorage.getItem("settings"));
@@ -2628,11 +2696,26 @@ document.addEventListener("DOMContentLoaded", () => {
}); });


document.querySelector("#menu-save").addEventListener("click", e => { document.querySelector("#menu-save").addEventListener("click", e => {
saveScene();
const name = document.querySelector("#menu-save ~ input").value;
if (/\S/.test(name)) {
saveScene(name);
}
updateSaveInfo();
}); });


document.querySelector("#menu-load").addEventListener("click", e => { document.querySelector("#menu-load").addEventListener("click", e => {
loadScene();
const name = document.querySelector("#menu-load ~ select").value;
if (/\S/.test(name)) {
loadScene(name);
}
});

document.querySelector("#menu-delete").addEventListener("click", e => {
const name = document.querySelector("#menu-delete ~ select").value;
if (/\S/.test(name)) {
deleteScene(name);
}
}); });


document.querySelector("#menu-load-autosave").addEventListener("click", e => { document.querySelector("#menu-load-autosave").addEventListener("click", e => {
@@ -3424,12 +3507,17 @@ function setWorldHeight(oldHeight, newHeight) {
} }


function loadScene(name = "default") { function loadScene(name = "default") {
if (name === "") {
name = "default"
}
try { try {
const data = JSON.parse(localStorage.getItem("macrovision-save-" + name)); const data = JSON.parse(localStorage.getItem("macrovision-save-" + name));
if (data === null) { if (data === null) {
console.error("Couldn't load " + name)
return false; return false;
} }
importScene(data); importScene(data);
toast("Loaded " + name);
return true; return true;
} catch (err) { } catch (err) {
alert("Something went wrong while loading (maybe you didn't have anything saved. Check the F12 console for the error.") alert("Something went wrong while loading (maybe you didn't have anything saved. Check the F12 console for the error.")
@@ -3442,6 +3530,7 @@ function saveScene(name = "default") {
try { try {
const string = JSON.stringify(exportScene()); const string = JSON.stringify(exportScene());
localStorage.setItem("macrovision-save-" + name, string); localStorage.setItem("macrovision-save-" + name, string);
toast("Saved as " + name);
} catch (err) { } catch (err) {
alert("Something went wrong while saving (maybe I don't have localStorage permissions, or exporting failed). Check the F12 console for the error.") alert("Something went wrong while saving (maybe I don't have localStorage permissions, or exporting failed). Check the F12 console for the error.")
console.error(err); console.error(err);
@@ -3449,11 +3538,15 @@ function saveScene(name = "default") {
} }


function deleteScene(name = "default") { function deleteScene(name = "default") {
try {
localStorage.removeItem("macrovision-save-" + name)
} catch (err) {
console.error(err);
if (confirm("Really delete the " + name + " scene?")) {
try {
localStorage.removeItem("macrovision-save-" + name)
toast("Deleted " + name);
} catch (err) {
console.error(err);
}
} }
updateSaveInfo();
} }


function exportScene() { function exportScene() {


Загрузка…
Отмена
Сохранить