Add user settings

This commit is contained in:
Idrees Hassan
2025-08-15 13:24:20 -04:00
parent 86c67c54fd
commit 7ca159bab4
3 changed files with 123 additions and 12 deletions

45
dist/birb.js vendored
View File

@@ -35,6 +35,17 @@ const MENU_EXIT_ID = "birb-menu-exit";
const FIELD_GUIDE_ID = "birb-field-guide";
const FEATHER_ID = "birb-feather";
const DEFAULT_SETTINGS = {
birbMode: false
};
/**
* @typedef {typeof DEFAULT_SETTINGS} Settings
*/
let userSettings = {};
const styles = `
@font-face {
font-family: Monocraft;
@@ -845,11 +856,11 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI
}
const menuItems = [
new MenuItem("Pet Birb", pet),
new MenuItem(`Pet ${birdBirb()}`, pet),
new MenuItem("Field Guide", insertFieldGuide),
// new MenuItem("Decorations", insertDecoration),
new DebugMenuItem("Applications", () => switchMenuItems(otherItems), false),
new MenuItem("Hide Birb", hideBirb),
new MenuItem(`Hide ${birdBirb()}`, hideBirb),
new DebugMenuItem("Reset Data", resetSaveData),
new DebugMenuItem("Unlock All", () => {
for (let type in species) {
@@ -952,7 +963,11 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI
} else {
log("Not a UserScript");
}
log("Loaded data: " + JSON.stringify(saveData));
debug("Loaded data: " + JSON.stringify(saveData));
if (!saveData.settings) {
log("No user settings found in save data, starting fresh");
}
userSettings = saveData.settings ?? {};
unlockedSpecies = saveData.unlockedSpecies ?? [DEFAULT_BIRD];
currentSpecies = saveData.currentSpecies ?? DEFAULT_BIRD;
switchSpecies(currentSpecies);
@@ -962,6 +977,7 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI
let saveData = {
unlockedSpecies: unlockedSpecies,
currentSpecies: currentSpecies,
settings: userSettings
};
if (isUserScript()) {
log("Saving data to UserScript storage");
@@ -989,6 +1005,21 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI
load();
}
/**
* Get the user settings merged with default settings
* @returns {Settings} The merged settings
*/
function settings() {
return { ...DEFAULT_SETTINGS, ...userSettings };
}
/**
* Bird or birb, you decide
*/
function birdBirb() {
return settings().birbMode ? "Birb" : "Bird";
}
function init() {
if (window !== window.top) {
// Skip installation if within an iframe
@@ -1446,7 +1477,7 @@ Promise.all([loadSpriteSheetPixels(SPRITE_SHEET), loadSpriteSheetPixels(DECORATI
}
let menu = makeElement("birb-window", undefined, MENU_ID);
let header = makeElement("birb-window-header");
header.innerHTML = '<div class="birb-window-title">birbOS</div>';
header.innerHTML = `<div class="birb-window-title">${birdBirb().toLowerCase()}OS</div>`;
let content = makeElement("birb-window-content");
for (const item of menuItems) {
if (!item.isDebug || debugMode) {
@@ -1856,6 +1887,12 @@ function log() {
console.log("Birb: ", ...arguments);
}
function debug() {
if (debugMode) {
console.debug("Birb: ", ...arguments);
}
}
function error() {
console.error("Birb: ", ...arguments);
}