update ui and fix tasks in quickplay
This commit is contained in:
parent
c361c308c1
commit
5983d4a3bb
190
quick-play.html
190
quick-play.html
|
|
@ -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}"]`);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue