diff --git a/src/scenes/StoryScene.js b/src/scenes/StoryScene.js index ba7cefc72..d57fcfff1 100644 --- a/src/scenes/StoryScene.js +++ b/src/scenes/StoryScene.js @@ -1,3 +1,5 @@ +import AccessibilityManager from '../systems/AccessibilityManager.js'; + class StoryScene extends Phaser.Scene { constructor() { super({ key: 'StoryScene' }); @@ -494,27 +496,111 @@ class StoryScene extends Phaser.Scene { showAccessibility() { console.log('♿ Opening Accessibility Menu...'); - // Create accessibility quick menu - const options = [ - '♿ ACCESSIBILITY OPTIONS', + // Initialize AccessibilityManager if not exists + if (!this.accessibility) { + this.accessibility = new AccessibilityManager(this); + } + + // Create live accessibility menu + const width = this.cameras.main.width; + const height = this.cameras.main.height; + + const menuBg = this.add.rectangle(width / 2, height / 2, 500, 400, 0x000000, 0.9); + menuBg.setDepth(1000); + + const title = this.add.text(width / 2, height / 2 - 170, '♿ ACCESSIBILITY OPTIONS', { + fontSize: '24px', + fontFamily: '"Noto Sans", Georgia, serif', + color: '#f4e4c1', + fontStyle: 'bold' + }); + title.setOrigin(0.5); + title.setDepth(1001); + + const instructions = [ + 'Press number keys to toggle:', '', '1. High Contrast Mode', - '2. Large Text Mode', + '2. Large Text (2x)', '3. Color Blind Mode', - '4. Screen Reader Support', - '5. Reduce Flashing (Epilepsy)', - '6. One-Handed Controls', - '7. Audio Cues', + '4. Screen Reader', + '5. Reduce Motion', + '6. One-Handed (Left)', + '7. Font Scale Reset', '', - 'Full accessibility settings available in-game (ESC → Settings)', - '', - 'Tip: Press 1-7 to toggle these features' + 'Press ESC to close' ]; - alert(options.join('\n')); + const instructionsText = this.add.text(width / 2, height / 2 - 50, instructions.join('\n'), { + fontSize: '16px', + fontFamily: '"Noto Sans", Georgia, serif', + color: '#d4a574', + align: 'center', + lineSpacing: 8 + }); + instructionsText.setOrigin(0.5); + instructionsText.setDepth(1001); - // TODO: Implement full accessibility menu - // For now, just show information + // Keyboard listener for options + const keyHandler = (event) => { + switch (event.key) { + case '1': + if (this.accessibility.settings.highContrast) { + this.accessibility.disableHighContrast(); + alert('✅ High Contrast: OFF'); + } else { + this.accessibility.enableHighContrast(); + alert('✅ High Contrast: ON'); + } + break; + case '2': + this.accessibility.setSubtitleSize('xlarge'); + alert('✅ Large Text: ON (2.0x scale)'); + break; + case '3': + if (this.accessibility.settings.colorBlindMode === 'none') { + this.accessibility.setColorBlindMode('protanopia'); + alert('✅ Color Blind Mode: Protanopia'); + } else { + this.accessibility.setColorBlindMode('none'); + alert('✅ Color Blind Mode: OFF'); + } + break; + case '4': + alert('ℹ️ Screen Reader: Coming soon!'); + break; + case '5': + if (this.accessibility.settings.reduceMotion) { + this.accessibility.disableReduceMotion(); + alert('✅ Reduce Motion: OFF'); + } else { + this.accessibility.enableReduceMotion(); + alert('✅ Reduce Motion: ON'); + } + break; + case '6': + if (this.accessibility.settings.oneHandedMode) { + this.accessibility.disableOneHandedMode(); + alert('✅ One-Handed Mode: OFF'); + } else { + this.accessibility.enableOneHandedMode('left'); + alert('✅ One-Handed Mode: LEFT HAND'); + } + break; + case '7': + this.accessibility.setFontScale(1.0); + alert('✅ Font Scale: Reset to 1.0x'); + break; + case 'Escape': + menuBg.destroy(); + title.destroy(); + instructionsText.destroy(); + document.removeEventListener('keydown', keyHandler); + break; + } + }; + + document.addEventListener('keydown', keyHandler); } exitGame() {