0% found this document useful (0 votes)
13 views4 pages

Settings

The document is a JavaScript module that manages game settings related to player speed, fly mode, and player scale. It includes functions to load and save settings from local storage, apply these settings to the user interface, and handle user input through event listeners. The module exports an initialization function to set up the settings when the game starts.

Uploaded by

davidsiserman035
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views4 pages

Settings

The document is a JavaScript module that manages game settings related to player speed, fly mode, and player scale. It includes functions to load and save settings from local storage, apply these settings to the user interface, and handle user input through event listeners. The module exports an initialization function to set up the settings when the game starts.

Uploaded by

davidsiserman035
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

import { room } from './websim.

js';

// Element references - these are now the *only* elements this script needs to
reference
// as the face setting has moved to avatarManager.js
const settingsContainer = document.getElementById('settings-container');
const settingsBackButton = settingsContainer ?
settingsContainer.querySelector('.back-button') : null;

// Admin Panel Elements (for settings managed here)


const adminPanelContainer = document.getElementById('admin-panel-container');
const speedSlider = adminPanelContainer ?
adminPanelContainer.querySelector('#speed-slider') : null;
const currentSpeedValueSpan = adminPanelContainer ?
adminPanelContainer.querySelector('#current-speed-value') : null;
const flyModeCheckbox = adminPanelContainer ?
adminPanelContainer.querySelector('#fly-mode-checkbox') : null;
// NEW: References for Size Slider
const sizeSlider = adminPanelContainer ? adminPanelContainer.querySelector('#size-
slider') : null;
const currentSizeValueSpan = adminPanelContainer ?
adminPanelContainer.querySelector('#current-size-value') : null;

// --- Settings Logic ---

const SETTINGS_STORAGE_KEY = 'gameNonAvatarSettings';

// Default settings (only non-avatar related here)


const defaultSettings = {
playerSpeed: 0.1, // Match default slider value
flyMode: false, // New default setting for fly mode
playerScale: 1.0, // NEW: Default player scale
};

let currentSettings = { ...defaultSettings };

// Load settings from local storage


function loadSettings() {
const savedSettings = localStorage.getItem(SETTINGS_STORAGE_KEY);
if (savedSettings) {
try {
// Merge saved settings over defaults, ensuring defaults are present
const parsedSettings = JSON.parse(savedSettings);
currentSettings = { ...defaultSettings, ...parsedSettings };
console.log("Non-avatar settings loaded:", currentSettings);
} catch (error) {
console.error("Error loading non-avatar settings from local storage:",
error);
currentSettings = { ...defaultSettings };
}
} else {
console.log("No non-avatar settings found in local storage, using
defaults.");
currentSettings = { ...defaultSettings };
}
// Apply loaded settings to UI immediately after loading
applySettingsToUI();
}
// Save settings to local storage
function saveSettings() {
try {
localStorage.setItem(SETTINGS_STORAGE_KEY,
JSON.stringify(currentSettings));
console.log("Non-avatar settings saved:", currentSettings);
} catch (error) {
console.error("Error saving non-avatar settings to local storage:", error);
}
}

// Apply loaded/current settings to the UI elements


function applySettingsToUI() {
// Apply Speed Slider setting
if (speedSlider && currentSpeedValueSpan) {
// Ensure the loaded value is within the slider's min/max range
const clampedSpeed = Math.max(parseFloat(speedSlider.min),
Math.min(parseFloat(speedSlider.max), currentSettings.playerSpeed));
speedSlider.value = clampedSpeed.toString();
currentSpeedValueSpan.textContent = clampedSpeed.toFixed(2);
console.log("Applied playerSpeed setting to UI:", clampedSpeed);
} else {
console.warn("Speed slider or value span not found, cannot apply
playerSpeed setting to UI.");
}

// Apply Fly Mode setting


if (flyModeCheckbox) {
flyModeCheckbox.checked = currentSettings.flyMode;
console.log("Applied flyMode setting to UI:", currentSettings.flyMode);
} else {
console.warn("Fly mode checkbox not found, cannot apply flyMode setting to
UI.");
}

// NEW: Apply Size Slider setting


if (sizeSlider && currentSizeValueSpan) {
// Ensure the loaded value is within the slider's min/max range
const clampedSize = Math.max(parseFloat(sizeSlider.min),
Math.min(parseFloat(sizeSlider.max), currentSettings.playerScale));
sizeSlider.value = clampedSize.toString();
currentSizeValueSpan.textContent = clampedSize.toFixed(2);
console.log("Applied playerScale setting to UI:", clampedSize);
} else {
console.warn("Size slider or value span not found, cannot apply
playerScale setting to UI.");
}
}

// --- UI Event Listeners for Settings ---

// Speed Slider Listener (moved from gameLogic.js)


if (speedSlider && currentSpeedValueSpan) {
speedSlider.addEventListener('input', () => {
const newSpeed = parseFloat(speedSlider.value);
currentSpeedValueSpan.textContent = newSpeed.toFixed(2);
currentSettings.playerSpeed = newSpeed; // Update the setting value
saveSettings(); // Save settings
// No need to update presence here, gameLogic reads from settings object
console.log("Settings: Player speed changed via UI to:",
currentSettings.playerSpeed);
});
}

// Fly Mode Checkbox Listener (New)


if (flyModeCheckbox) {
flyModeCheckbox.addEventListener('change', () => {
const newFlyModeState = flyModeCheckbox.checked;
currentSettings.flyMode = newFlyModeState; // Update the setting value
saveSettings(); // Save settings

// Update local player presence when fly mode changes


const localClientId = room.clientId;
if (localClientId && room.presence[localClientId]) {
console.log("Settings: Updating local presence with flyMode:",
newFlyModeState);
room.updatePresence({ flyMode: newFlyModeState });
} else {
console.warn("Settings: Websim room or local presence not available,
cannot update presence for flyMode change.");
}

console.log("Settings: Fly mode changed via UI to:",


currentSettings.flyMode);
});
}

// NEW: Size Slider Listener


if (sizeSlider && currentSizeValueSpan) {
sizeSlider.addEventListener('input', () => {
const newSize = parseFloat(sizeSlider.value);
currentSizeValueSpan.textContent = newSize.toFixed(2);
currentSettings.playerScale = newSize; // Update the setting value
saveSettings(); // Save settings

// Update local player presence with the new scale


const localClientId = room.clientId;
if (localClientId && room.presence[localClientId]) {
console.log("Settings: Updating local presence with playerScale:",
newSize);
room.updatePresence({ playerScale: newSize });
} else {
console.warn("Settings: Websim room or local presence not available,
cannot update presence for playerScale change.");
}

console.log("Settings: Player scale changed via UI to:",


currentSettings.playerScale);
});
}

// --- Initialization ---

// Initialize settings: load from storage and apply to UI


function initializeSettings() {
loadSettings();
}
// Export functions needed by other modules
export { initializeSettings, currentSettings as settings };

console.log("Settings handler initialized.");

You might also like