diff options
Diffstat (limited to 'html/space/input.js')
-rw-r--r-- | html/space/input.js | 110 |
1 files changed, 61 insertions, 49 deletions
diff --git a/html/space/input.js b/html/space/input.js index dadecb9..19ea56c 100644 --- a/html/space/input.js +++ b/html/space/input.js @@ -1,16 +1,9 @@ -// Input module using keyboard controls -const keys = { - w: false, - a: false, - s: false, - d: false, - ArrowUp: false, - ArrowDown: false, - ArrowLeft: false, - ArrowRight: false, - ' ': false, // space - e: false -}; +// Input handling module +import { updatePlayerControls } from './physics.js'; + +let keys = {}; +let mouseX = 0; +let mouseY = 0; // Input state that other modules can read export const inputState = { @@ -24,48 +17,67 @@ export const inputState = { // Initialize input handlers export function initInput() { - window.addEventListener('keydown', handleKeyDown); - window.addEventListener('keyup', handleKeyUp); -} + // Keyboard event listeners + document.addEventListener('keydown', (e) => { + keys[e.key.toLowerCase()] = true; + }); -// Update input state based on current key presses -export function updateInput() { - // Reset input state - inputState.thrust = 0; - inputState.strafe = 0; - inputState.yaw = 0; - inputState.pitch = 0; - inputState.firePrimary = false; - inputState.fireSecondary = false; + document.addEventListener('keyup', (e) => { + keys[e.key.toLowerCase()] = false; + }); - // Thrust controls (W/S) - if (keys.w) inputState.thrust = 1; // Forward thrust - if (keys.s) inputState.thrust = -1; // Backward thrust + // Mouse movement for heading + document.addEventListener('mousemove', (e) => { + // Calculate mouse position relative to center of canvas + const canvas = document.querySelector('canvas'); + const rect = canvas.getBoundingClientRect(); + const centerX = rect.left + rect.width / 2; + const centerY = rect.top + rect.height / 2; + + mouseX = (e.clientX - centerX) / (rect.width / 2); + mouseY = (e.clientY - centerY) / (rect.height / 2); + }); - // Strafe controls (A/D) - if (keys.a) inputState.strafe = -1; // Left strafe - if (keys.d) inputState.strafe = 1; // Right strafe + // Mouse click for primary weapon + document.addEventListener('mousedown', (e) => { + if (e.button === 0) { // Left click + keys['fire'] = true; + } + }); - // Rotation controls (Arrow keys) - if (keys.ArrowLeft) inputState.yaw = -1; - if (keys.ArrowRight) inputState.yaw = 1; - if (keys.ArrowUp) inputState.pitch = -1; - if (keys.ArrowDown) inputState.pitch = 1; + document.addEventListener('mouseup', (e) => { + if (e.button === 0) { // Left click + keys['fire'] = false; + } + }); - // Weapons - if (keys[' ']) inputState.firePrimary = true; - if (keys.e) inputState.fireSecondary = true; -} + // E key for secondary weapon + document.addEventListener('keydown', (e) => { + if (e.key.toLowerCase() === 'e') { + keys['secondary'] = true; + } + }); -// Event handlers -function handleKeyDown(e) { - if (keys.hasOwnProperty(e.key)) { - keys[e.key] = true; - } + document.addEventListener('keyup', (e) => { + if (e.key.toLowerCase() === 'e') { + keys['secondary'] = false; + } + }); } -function handleKeyUp(e) { - if (keys.hasOwnProperty(e.key)) { - keys[e.key] = false; - } +// Update controls based on current input state +export function updateInput() { + const controls = { + thrust: keys[' '] || false, // Space bar for thrust + up: keys['w'] || false, // W for upward strafe + down: keys['s'] || false, // S for downward strafe + left: keys['a'] || false, // A for left strafe + right: keys['d'] || false, // D for right strafe + fire: keys['fire'] || false, + secondary: keys['secondary'] || false, + mouseX, + mouseY + }; + + updatePlayerControls(controls); } \ No newline at end of file |