update ui and fix tasks in quickplay

This commit is contained in:
dilgenfritz 2025-11-06 13:03:03 -06:00
parent c361c308c1
commit 5983d4a3bb
2 changed files with 169 additions and 73 deletions

View File

@ -706,7 +706,16 @@
videoMode: 'background',
enableVideoSound: true,
enableVideoControls: false,
videoOpacity: 0.7
videoOpacity: 0.7,
// Task management
disabledTasks: {
main: [],
consequence: []
},
customTasks: {
main: [],
consequence: []
}
};
let gameInstance = null;
@ -804,8 +813,14 @@
try {
const saved = localStorage.getItem('quickPlaySettings');
if (saved) {
quickPlaySettings = { ...quickPlaySettings, ...JSON.parse(saved) };
console.log('📂 Loading saved settings from localStorage');
const savedSettings = JSON.parse(saved);
console.log('📂 Raw saved settings:', JSON.stringify(savedSettings));
quickPlaySettings = { ...quickPlaySettings, ...savedSettings };
console.log('📂 Merged settings:', JSON.stringify(quickPlaySettings));
applySettingsToUI();
} else {
console.log('📂 No saved settings found, using defaults');
}
} catch (error) {
console.warn('Failed to load saved settings:', error);
@ -2232,30 +2247,18 @@
try {
let tasks = null;
// Try to get tasks from multiple sources
if (gameInstance && gameInstance.gameData && gameInstance.gameData.mainTasks) {
tasks = gameInstance.gameData.mainTasks;
} else if (window.gameDataManager) {
const gameData = window.gameDataManager.getDataForMode('standard');
if (gameData && gameData.mainTasks) {
tasks = gameData.mainTasks;
// Store it for future use
if (gameInstance) {
gameInstance.gameData = gameData;
}
}
}
// Get tasks using consistent source
tasks = getTasksFromSource('main');
if (tasks && tasks.length > 0) {
// Apply tag filtering
let filteredTasks = [...tasks];
// Step 0: Remove disabled tasks
filteredTasks = filteredTasks.filter((task, index) => {
const taskId = task.id || 'preset-' + index + '-' + (task.text || '').substring(0, 10);
filteredTasks = filteredTasks.filter((task) => {
const isDisabled = quickPlaySettings.disabledTasks &&
quickPlaySettings.disabledTasks.main &&
quickPlaySettings.disabledTasks.main.includes(taskId);
quickPlaySettings.disabledTasks.main.includes(task.id);
return !isDisabled;
});
@ -2468,23 +2471,17 @@
function loadConsequenceTask() {
console.log('🚨 Loading consequence task for skipping');
// Get consequence tasks from game data
let consequenceTasks = [];
// Get consequence tasks using consistent source
let consequenceTasks = getTasksFromSource('consequence');
// First try from the gameInstance where we loaded the data
if (gameInstance && gameInstance.gameData && gameInstance.gameData.consequenceTasks) {
consequenceTasks = gameInstance.gameData.consequenceTasks;
console.log('📋 Got consequence tasks from gameInstance:', consequenceTasks.length);
}
// Try from global mainGameData
else if (window.mainGameData && window.mainGameData.consequenceTasks) {
consequenceTasks = window.mainGameData.consequenceTasks;
console.log('📋 Got consequence tasks from mainGameData:', consequenceTasks.length);
}
// Legacy fallback
else if (window.gameData && window.gameData.consequenceTasks) {
consequenceTasks = window.gameData.consequenceTasks;
console.log('📋 Got consequence tasks from global gameData:', consequenceTasks.length);
// Filter out disabled consequence tasks
if (quickPlaySettings.disabledTasks && quickPlaySettings.disabledTasks.consequence) {
consequenceTasks = consequenceTasks.filter(task =>
!quickPlaySettings.disabledTasks.consequence.includes(task.id)
);
console.log('📋 Filtered consequence tasks - enabled count:', consequenceTasks.length);
} else {
console.log('📋 Got consequence tasks from source:', consequenceTasks.length);
}
if (consequenceTasks.length === 0) {
@ -2911,8 +2908,8 @@
}
}
// Clean up background video
if (backgroundVideoPlayer) {
// Clean up background video (check if it exists first)
if (typeof backgroundVideoPlayer !== 'undefined' && backgroundVideoPlayer) {
console.log('Stopping background video');
try {
backgroundVideoPlayer.pause();
@ -2923,6 +2920,46 @@
} catch (videoError) {
console.warn('Error stopping background video:', videoError);
}
} else {
console.log('No backgroundVideoPlayer found - skipping background video cleanup');
}
// Clean up video player manager - THIS IS THE IMPORTANT ONE
if (window.videoPlayerManager) {
console.log('Stopping all videos via VideoPlayerManager');
try {
window.videoPlayerManager.stopAllVideos();
console.log('All videos stopped via VideoPlayerManager');
} catch (videoManagerError) {
console.warn('Error stopping videos via VideoPlayerManager:', videoManagerError);
}
} else {
console.log('VideoPlayerManager not found - trying manual video cleanup');
// Manual fallback - find and stop all video elements
try {
const allVideos = document.querySelectorAll('video');
allVideos.forEach((video, index) => {
console.log(`Stopping video element ${index}:`, video.id || video.src);
video.pause();
video.currentTime = 0;
video.src = '';
});
console.log(`Stopped ${allVideos.length} video elements manually`);
} catch (manualError) {
console.warn('Error in manual video cleanup:', manualError);
}
}
// Clean up periodic popups and any active popups
if (gameInstance && gameInstance.popupImageManager) {
console.log('Stopping periodic popups and clearing active popups');
try {
gameInstance.popupImageManager.stopPeriodicPopups();
gameInstance.popupImageManager.clearAllPopups();
console.log('Popup systems cleaned up');
} catch (popupError) {
console.warn('Error cleaning up popup systems:', popupError);
}
}
// Award XP for session time (users still accrue XP for incomplete games)
@ -3754,6 +3791,44 @@
});
// Task Management Functions
// Helper function to generate consistent task IDs
function generateTaskId(task, index, type = 'main') {
// If task already has an ID, convert it to string and use it
if (task.id !== undefined && task.id !== null) {
return String(task.id);
}
// Otherwise generate ID based on index and text
return `${type}-preset-${index}-${(task.text || '').substring(0, 10).replace(/\s+/g, '')}`;
}
// Helper function to get tasks from consistent source
function getTasksFromSource(type = 'main') {
let tasks = [];
// Try multiple sources in priority order
if (window.mainGameData) {
const sourceTasks = type === 'main' ?
window.mainGameData.mainTasks || [] :
window.mainGameData.consequenceTasks || [];
tasks = sourceTasks.map((task, index) => ({
...task,
id: generateTaskId(task, index, type)
}));
} else if (gameInstance && gameInstance.gameData) {
const sourceTasks = type === 'main' ?
gameInstance.gameData.mainTasks || [] :
gameInstance.gameData.consequenceTasks || [];
tasks = sourceTasks.map((task, index) => ({
...task,
id: generateTaskId(task, index, type)
}));
}
return tasks;
}
function showTaskManagement() {
console.log('📝 Opening task management');
document.getElementById('quick-play-setup').style.display = 'none';
@ -3871,33 +3946,29 @@
}
function loadTaskList(type) {
console.log(`📋 Loading ${type} task list`);
console.log('📋 Current disabledTasks state:', JSON.stringify(quickPlaySettings.disabledTasks));
const listElement = document.getElementById(`${type}-tasks-list`);
if (!listElement) return;
let tasks = [];
// Get preset tasks from game data
// Get preset tasks from consistent source
try {
if (window.mainGameData) {
const presetTasks = type === 'main' ?
window.mainGameData.mainTasks || [] :
window.mainGameData.consequenceTasks || [];
const presetTasks = getTasksFromSource(type);
tasks = presetTasks.map(task => {
const isDisabled = quickPlaySettings.disabledTasks &&
quickPlaySettings.disabledTasks[type] &&
quickPlaySettings.disabledTasks[type].includes(task.id);
tasks = presetTasks.map((task, index) => {
const taskId = 'preset-' + index + '-' + (task.text || '').substring(0, 10);
const isDisabled = quickPlaySettings.disabledTasks &&
quickPlaySettings.disabledTasks[type] &&
quickPlaySettings.disabledTasks[type].includes(taskId);
return {
...task,
id: taskId,
isCustom: false,
type: type,
enabled: !isDisabled
};
});
}
return {
...task,
isCustom: false,
type: type,
enabled: !isDisabled
};
});
} catch (e) {
console.log('Could not load preset tasks:', e);
}
@ -3952,26 +4023,33 @@
function toggleTaskEnabled(type, taskId, enabled) {
console.log(`🔄 ${enabled ? 'Enabling' : 'Disabling'} ${type} task ${taskId}`);
console.log('🔍 Current disabledTasks before change:', JSON.stringify(quickPlaySettings.disabledTasks));
// Initialize disabled tasks tracking
if (!quickPlaySettings.disabledTasks) {
quickPlaySettings.disabledTasks = { main: [], consequence: [] };
console.log('🔧 Initialized disabledTasks structure');
}
if (!quickPlaySettings.disabledTasks[type]) {
quickPlaySettings.disabledTasks[type] = [];
console.log(`🔧 Initialized disabledTasks.${type} array`);
}
if (enabled) {
// Remove from disabled list
quickPlaySettings.disabledTasks[type] = quickPlaySettings.disabledTasks[type].filter(id => id !== taskId);
console.log(`✅ Removed ${taskId} from disabled list`);
} else {
// Add to disabled list
if (!quickPlaySettings.disabledTasks[type].includes(taskId)) {
quickPlaySettings.disabledTasks[type].push(taskId);
console.log(`❌ Added ${taskId} to disabled list`);
}
}
console.log('🔍 Current disabledTasks after change:', JSON.stringify(quickPlaySettings.disabledTasks));
saveQuickPlaySettings();
console.log('💾 Settings saved');
// Update visual state
const taskElement = document.querySelector(`[data-task-id="${taskId}"]`);

View File

@ -393,7 +393,7 @@ body {
background: rgba(255, 255, 255, 0.08);
border: 1px solid var(--border-color);
border-radius: var(--border-radius-lg);
padding: var(--space-lg);
padding: var(--space-base);
text-align: center;
backdrop-filter: blur(15px);
transition: all 0.3s ease;
@ -466,52 +466,70 @@ body {
/* Level Display Styles */
.level-display {
min-width: 280px;
min-width: 140px;
max-width: 180px;
padding: 8px 12px !important;
}
.level-display .status-label {
font-size: var(--font-xs);
margin-bottom: 2px;
letter-spacing: 0.5px;
}
.level-display .status-value {
margin-bottom: 2px;
}
.level-info {
flex-direction: column;
gap: var(--space-xs);
flex-direction: row;
gap: var(--space-sm);
align-items: center;
margin-bottom: var(--space-base);
justify-content: space-between;
margin-bottom: 4px;
}
.level-title {
font-size: var(--font-xxl);
font-size: var(--font-base);
color: var(--color-primary);
font-weight: 700;
text-shadow: 0 0 15px rgba(138, 43, 226, 0.6);
text-shadow: 0 0 10px rgba(138, 43, 226, 0.6);
text-transform: uppercase;
letter-spacing: 1px;
letter-spacing: 0.5px;
}
.level-number {
font-size: var(--font-lg);
font-size: var(--font-sm);
color: var(--text-secondary);
font-weight: 500;
white-space: nowrap;
}
.level-xp-info {
display: flex;
flex-direction: column;
gap: var(--space-sm);
flex-direction: row;
align-items: center;
justify-content: space-between;
gap: 4px;
}
.xp-display {
display: flex;
align-items: baseline;
justify-content: center;
gap: var(--space-xs);
gap: 2px;
font-size: var(--font-xs);
}
.level-progress-container {
display: flex;
flex-direction: column;
gap: var(--space-xs);
gap: 1px;
flex: 1;
max-width: 60px;
}
.level-progress-text {
font-size: var(--font-sm);
font-size: var(--font-xs);
color: var(--text-tertiary);
text-align: center;
}
@ -574,8 +592,8 @@ body {
.status-card {
flex: 1;
min-width: 200px;
max-width: 300px;
min-width: 120px;
max-width: 160px;
}
}