acesesibiliti
This commit is contained in:
410
docs/guides/INPUT_REMAPPING_TESTING.md
Normal file
410
docs/guides/INPUT_REMAPPING_TESTING.md
Normal file
@@ -0,0 +1,410 @@
|
||||
# 🎮 Input Remapping System Testing Guide
|
||||
|
||||
## 📋 Overview
|
||||
Complete input customization system with:
|
||||
- ✅ Full keyboard remapping
|
||||
- ✅ Controller button remapping
|
||||
- ✅ Multiple control profiles
|
||||
- ✅ One-handed layouts (left/right)
|
||||
- ✅ Custom profile saving
|
||||
- ✅ Import/Export bindings
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Features to Test
|
||||
|
||||
### 1. **Basic Input Detection**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Keyboard keys are detected correctly
|
||||
- [ ] Mouse buttons are detected (left, right, middle)
|
||||
- [ ] Mouse wheel is detected (up/down)
|
||||
- [ ] Controller buttons are detected (if connected)
|
||||
- [ ] All input types can be bound to actions
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
// In browser console (F12):
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Check if action is pressed
|
||||
console.log('Move Up pressed:', inputSystem.isActionPressed('move_up'));
|
||||
console.log('Attack pressed:', inputSystem.isActionPressed('attack'));
|
||||
console.log('Interact pressed:', inputSystem.isActionPressed('interact'));
|
||||
|
||||
// Check if action was just pressed (single frame)
|
||||
console.log('Inventory just pressed:', inputSystem.isActionJustPressed('inventory'));
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. **Action Rebinding**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Can rebind any action to a new key
|
||||
- [ ] Rebinding shows "Press any key..." prompt
|
||||
- [ ] ESC cancels rebinding
|
||||
- [ ] New binding is saved to localStorage
|
||||
- [ ] Binding persists after page reload
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Rebind "interact" action
|
||||
inputSystem.startRebinding('interact', (action, newKey) => {
|
||||
console.log(`Action "${action}" rebound to: ${newKey}`);
|
||||
});
|
||||
|
||||
// Now press any key to rebind
|
||||
// Press ESC to cancel
|
||||
|
||||
// Check new binding
|
||||
console.log('Interact binding:', inputSystem.getBindingDisplay('interact'));
|
||||
|
||||
// Reset to default
|
||||
inputSystem.resetAction('interact');
|
||||
console.log('Interact reset:', inputSystem.getBindingDisplay('interact'));
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. **Control Profiles**
|
||||
|
||||
#### Available Profiles:
|
||||
- **default**: Standard WASD + mouse
|
||||
- **wasd**: WASD movement (same as default)
|
||||
- **arrows**: Arrow keys for movement
|
||||
- **left-handed**: Numpad movement, left-side actions
|
||||
- **right-handed**: Standard WASD (same as default)
|
||||
- **custom-1**: User-defined profile 1
|
||||
- **custom-2**: User-defined profile 2
|
||||
- **custom-3**: User-defined profile 3
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Can switch between profiles
|
||||
- [ ] Profile changes are applied immediately
|
||||
- [ ] Profile selection is saved
|
||||
- [ ] Custom profiles can be created
|
||||
- [ ] Custom profiles persist after reload
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// List all profiles
|
||||
console.log('Available profiles:', inputSystem.getProfiles());
|
||||
|
||||
// Switch to left-handed profile
|
||||
inputSystem.switchProfile('left-handed');
|
||||
console.log('Move Up binding:', inputSystem.getBindingDisplay('move_up'));
|
||||
|
||||
// Switch to arrows profile
|
||||
inputSystem.switchProfile('arrows');
|
||||
console.log('Move Up binding:', inputSystem.getBindingDisplay('move_up'));
|
||||
|
||||
// Switch back to default
|
||||
inputSystem.switchProfile('default');
|
||||
|
||||
// Get current profile
|
||||
console.log('Current profile:', inputSystem.getCurrentProfile());
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. **One-Handed Layouts**
|
||||
|
||||
#### Left-Handed Layout:
|
||||
- **Movement**: Numpad (8/5/4/6) or IJKL
|
||||
- **Actions**: Q, W, E, R, T, Y (left side of keyboard)
|
||||
- **Tools**: 7, 8, 9, 0, - (top row)
|
||||
- **Quick actions**: A, S (easy reach)
|
||||
|
||||
#### Right-Handed Layout:
|
||||
- **Movement**: WASD (standard)
|
||||
- **Actions**: E, Space, J (right side)
|
||||
- **Tools**: 1-5 (number row)
|
||||
- **Quick actions**: H, F (right hand)
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Left-handed layout uses numpad for movement
|
||||
- [ ] Right-handed layout uses WASD
|
||||
- [ ] All actions are reachable with one hand
|
||||
- [ ] Layouts are comfortable for extended play
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Test left-handed layout
|
||||
inputSystem.switchProfile('left-handed');
|
||||
console.log('=== LEFT-HANDED LAYOUT ===');
|
||||
console.log('Move Up:', inputSystem.getBindingDisplay('move_up'));
|
||||
console.log('Move Down:', inputSystem.getBindingDisplay('move_down'));
|
||||
console.log('Move Left:', inputSystem.getBindingDisplay('move_left'));
|
||||
console.log('Move Right:', inputSystem.getBindingDisplay('move_right'));
|
||||
console.log('Interact:', inputSystem.getBindingDisplay('interact'));
|
||||
console.log('Attack:', inputSystem.getBindingDisplay('attack'));
|
||||
|
||||
// Test right-handed layout
|
||||
inputSystem.switchProfile('right-handed');
|
||||
console.log('=== RIGHT-HANDED LAYOUT ===');
|
||||
console.log('Move Up:', inputSystem.getBindingDisplay('move_up'));
|
||||
console.log('Interact:', inputSystem.getBindingDisplay('interact'));
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. **Custom Profiles**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Can save current bindings to custom profile
|
||||
- [ ] Can load custom profile
|
||||
- [ ] Custom profiles persist after reload
|
||||
- [ ] Can have up to 3 custom profiles
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Customize some bindings
|
||||
inputSystem.startRebinding('move_up', () => {});
|
||||
// Press 'I' key
|
||||
|
||||
inputSystem.startRebinding('move_down', () => {});
|
||||
// Press 'K' key
|
||||
|
||||
// Save to custom profile
|
||||
inputSystem.saveToProfile('custom-1');
|
||||
console.log('✅ Saved to custom-1');
|
||||
|
||||
// Switch to another profile
|
||||
inputSystem.switchProfile('default');
|
||||
|
||||
// Load custom profile
|
||||
inputSystem.switchProfile('custom-1');
|
||||
console.log('Move Up:', inputSystem.getBindingDisplay('move_up'));
|
||||
console.log('Move Down:', inputSystem.getBindingDisplay('move_down'));
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. **Import/Export Bindings**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Can export bindings as JSON
|
||||
- [ ] Can import bindings from JSON
|
||||
- [ ] Import/export preserves all profiles
|
||||
- [ ] Import/export preserves active profile
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Export bindings
|
||||
const exported = inputSystem.exportBindings();
|
||||
console.log('Exported bindings:', exported);
|
||||
|
||||
// Copy to clipboard (manual step)
|
||||
// Modify some bindings...
|
||||
|
||||
// Import bindings
|
||||
const success = inputSystem.importBindings(exported);
|
||||
console.log('Import success:', success);
|
||||
|
||||
// Verify bindings are restored
|
||||
console.log('Current profile:', inputSystem.getCurrentProfile());
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. **Controller Support**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Controller is detected when connected
|
||||
- [ ] Controller buttons are mapped correctly
|
||||
- [ ] Xbox and PlayStation layouts are supported
|
||||
- [ ] Controller info is displayed
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Check if controller is connected
|
||||
console.log('Controller connected:', inputSystem.isControllerConnected());
|
||||
|
||||
// Get controller info
|
||||
const info = inputSystem.getControllerInfo();
|
||||
console.log('Controller info:', info);
|
||||
|
||||
// Get button names
|
||||
console.log('A button:', inputSystem.getControllerButtonName('A'));
|
||||
console.log('Start button:', inputSystem.getControllerButtonName('START'));
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. **Binding Display**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Key names are formatted correctly
|
||||
- [ ] Mouse buttons show as "Left Click", etc.
|
||||
- [ ] Arrow keys show as ↑↓←→
|
||||
- [ ] Multiple bindings show as "W / ↑"
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Get all action bindings
|
||||
const actions = [
|
||||
'move_up', 'move_down', 'move_left', 'move_right',
|
||||
'interact', 'attack', 'inventory', 'sprint',
|
||||
'zoom_in', 'zoom_out'
|
||||
];
|
||||
|
||||
console.log('=== ALL BINDINGS ===');
|
||||
actions.forEach(action => {
|
||||
console.log(`${action}: ${inputSystem.getBindingDisplay(action)}`);
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 9. **Reset Functions**
|
||||
|
||||
#### Test Cases:
|
||||
- [ ] Can reset single action to default
|
||||
- [ ] Can reset all bindings to default
|
||||
- [ ] Reset is saved to localStorage
|
||||
|
||||
#### How to Test:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Rebind something
|
||||
inputSystem.startRebinding('interact', () => {});
|
||||
// Press 'G' key
|
||||
|
||||
console.log('Modified:', inputSystem.getBindingDisplay('interact'));
|
||||
|
||||
// Reset single action
|
||||
inputSystem.resetAction('interact');
|
||||
console.log('Reset:', inputSystem.getBindingDisplay('interact'));
|
||||
|
||||
// Rebind multiple actions...
|
||||
// Then reset all
|
||||
inputSystem.resetAllBindings();
|
||||
console.log('All bindings reset to default');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎮 Integration Testing
|
||||
|
||||
### Test All Features Together:
|
||||
```javascript
|
||||
const inputSystem = game.scene.scenes[1].inputRemapping;
|
||||
|
||||
// Scenario 1: Left-handed player setup
|
||||
console.log('=== LEFT-HANDED PLAYER SETUP ===');
|
||||
inputSystem.switchProfile('left-handed');
|
||||
console.log('Movement:', inputSystem.getBindingDisplay('move_up'));
|
||||
inputSystem.saveToProfile('custom-1');
|
||||
|
||||
// Scenario 2: Custom bindings
|
||||
console.log('=== CUSTOM BINDINGS ===');
|
||||
inputSystem.switchProfile('default');
|
||||
inputSystem.startRebinding('sprint', (action, key) => {
|
||||
console.log(`Sprint rebound to: ${key}`);
|
||||
});
|
||||
// Press 'SPACE'
|
||||
|
||||
// Scenario 3: Export/Import
|
||||
console.log('=== EXPORT/IMPORT ===');
|
||||
const backup = inputSystem.exportBindings();
|
||||
// Modify bindings...
|
||||
inputSystem.importBindings(backup);
|
||||
console.log('Bindings restored from backup');
|
||||
|
||||
// Scenario 4: Controller support
|
||||
console.log('=== CONTROLLER ===');
|
||||
if (inputSystem.isControllerConnected()) {
|
||||
console.log('Controller detected:', inputSystem.getControllerInfo());
|
||||
} else {
|
||||
console.log('No controller connected');
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Expected Results
|
||||
|
||||
### ✅ Success Criteria:
|
||||
1. All keyboard keys can be detected and bound
|
||||
2. Mouse buttons and wheel work correctly
|
||||
3. Profile switching works instantly
|
||||
4. One-handed layouts are comfortable
|
||||
5. Custom profiles save and load correctly
|
||||
6. Import/export preserves all data
|
||||
7. Controller detection works (if connected)
|
||||
8. Bindings persist after page reload
|
||||
9. Reset functions work correctly
|
||||
10. No console errors
|
||||
|
||||
### ❌ Known Issues:
|
||||
- None currently
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Bug Reporting
|
||||
|
||||
If you find any issues, please report:
|
||||
1. **What you were testing**
|
||||
2. **What you expected to happen**
|
||||
3. **What actually happened**
|
||||
4. **Console errors** (if any)
|
||||
5. **Steps to reproduce**
|
||||
|
||||
---
|
||||
|
||||
## 📝 Default Bindings Reference
|
||||
|
||||
### Movement:
|
||||
- **Move Up**: W / ↑
|
||||
- **Move Down**: S / ↓
|
||||
- **Move Left**: A / ←
|
||||
- **Move Right**: D / →
|
||||
|
||||
### Actions:
|
||||
- **Interact**: E / Space
|
||||
- **Attack**: Left Click / J
|
||||
- **Cancel**: Escape / X
|
||||
- **Confirm**: Enter / E
|
||||
|
||||
### Inventory & UI:
|
||||
- **Inventory**: I / Tab
|
||||
- **Crafting**: C
|
||||
- **Map**: M
|
||||
- **Quest Log**: Q
|
||||
- **Pause**: Escape / P
|
||||
|
||||
### Tools:
|
||||
- **Tool 1-5**: 1-5 (number keys)
|
||||
|
||||
### Quick Actions:
|
||||
- **Quick Heal**: H
|
||||
- **Quick Eat**: F
|
||||
- **Sprint**: Shift
|
||||
- **Crouch**: Ctrl
|
||||
|
||||
### Camera:
|
||||
- **Zoom In**: + / Scroll Up
|
||||
- **Zoom Out**: - / Scroll Down
|
||||
- **Camera Reset**: R
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2025-12-12
|
||||
**Version**: 2.5.0
|
||||
**Status**: ✅ Ready for Testing
|
||||
Reference in New Issue
Block a user