about summary refs log tree commit diff stats
path: root/html/space/input.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/space/input.js')
-rw-r--r--html/space/input.js110
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