Loading...
+
@@ -43,7 +43,8 @@
diff --git a/src/keyboardInput.ts b/src/keyboardInput.ts
index 8b40b50..db90d55 100644
--- a/src/keyboardInput.ts
+++ b/src/keyboardInput.ts
@@ -78,7 +78,7 @@ export class KeyboardInput {
document.onkeydown = (ev) => {
// Recording controls (with modifiers)
- if (ev.key === 'r' || ev.key === 'R') {
+ /*if (ev.key === 'r' || ev.key === 'R') {
if (ev.ctrlKey || ev.metaKey) {
// Ctrl+R or Cmd+R: Toggle long recording
ev.preventDefault(); // Prevent browser reload
@@ -93,7 +93,7 @@ export class KeyboardInput {
this._onRecordingActionObservable.notifyObservers("exportRingBuffer");
return;
}
- }
+ }*/
switch (ev.key) {
case 'i':
@@ -131,6 +131,12 @@ export class KeyboardInput {
case 'ArrowDown':
this._rightStick.y = 1;
break;
+ case 'ArrowLeft':
+ this._rightStick.x = -1;
+ break;
+ case 'ArrowRight':
+ this._rightStick.x = 1;
+ break;
}
};
}
diff --git a/src/level1.ts b/src/level1.ts
index b285f02..4065820 100644
--- a/src/level1.ts
+++ b/src/level1.ts
@@ -4,7 +4,8 @@ import {
AbstractMesh,
Observable,
PhysicsAggregate,
- Vector3
+ Vector3,
+ WebXRState
} from "@babylonjs/core";
import {Ship} from "./ship";
import Level from "./level";
@@ -47,7 +48,7 @@ export class Level1 implements Level {
xr.baseExperience.onInitialXRPoseSetObservable.add(() => {
xr.baseExperience.camera.parent = this._ship.transformNode;
const currPose = xr.baseExperience.camera.globalPosition.y;
- xr.baseExperience.camera.position = new Vector3(0, 0, 0);
+ xr.baseExperience.camera.position = new Vector3(0, 1.5, 0);
// Start game timer when XR pose is set
this._ship.gameStats.startTimer();
@@ -87,7 +88,7 @@ export class Level1 implements Level {
}
// If XR is available and session is active, check for controllers
- if (DefaultScene.XR && DefaultScene.XR.baseExperience.state === 4) { // State 4 = IN_XR
+ if (DefaultScene.XR && DefaultScene.XR.baseExperience.state === WebXRState.IN_XR) {
// XR session already active, just check for controllers
debugLog('XR session already active, checking for controllers. Count:', DefaultScene.XR.input.controllers.length);
DefaultScene.XR.input.controllers.forEach((controller, index) => {
diff --git a/src/levelConfig.ts b/src/levelConfig.ts
index 59b6b06..222563e 100644
--- a/src/levelConfig.ts
+++ b/src/levelConfig.ts
@@ -24,7 +24,7 @@ export interface MaterialConfig {
id: string;
name: string;
type: "PBR" | "Standard" | "Basic";
- albedoColor?: Color4Array;
+ albedoColor?: Vector3Array; // RGB color (Color3)
metallic?: number;
roughness?: number;
emissiveColor?: Vector3Array;
diff --git a/src/levelSerializer.ts b/src/levelSerializer.ts
index 2bb7466..0a3c28b 100644
--- a/src/levelSerializer.ts
+++ b/src/levelSerializer.ts
@@ -313,8 +313,7 @@ export class LevelSerializer {
materialConfig.albedoColor = [
material.diffuseColor.r,
material.diffuseColor.g,
- material.diffuseColor.b,
- 1.0
+ material.diffuseColor.b
];
}
if (material.emissiveColor) {
diff --git a/src/main.ts b/src/main.ts
index d8fcaf8..b099c9b 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -99,6 +99,30 @@ export class Main {
this._currentLevel.getReadyObservable().add(async () => {
setLoadingMessage("Starting game...");
+ // If we entered XR before level creation, manually setup camera parenting
+ // (This is needed because onInitialXRPoseSetObservable won't fire if we're already in XR)
+ if (DefaultScene.XR && xrSession && DefaultScene.XR.baseExperience.state === 2) { // WebXRState.IN_XR = 2
+ const level1 = this._currentLevel as Level1;
+ const ship = (level1 as any)._ship;
+
+ if (ship && ship.transformNode) {
+ debugLog('Manually parenting XR camera to ship transformNode');
+ DefaultScene.XR.baseExperience.camera.parent = ship.transformNode;
+ DefaultScene.XR.baseExperience.camera.position = new Vector3(0, 1.5, 0);
+
+ // Also start timer and recording here (since onInitialXRPoseSetObservable won't fire)
+ ship.gameStats.startTimer();
+ debugLog('Game timer started (manual)');
+
+ if ((level1 as any)._physicsRecorder) {
+ (level1 as any)._physicsRecorder.startRingBuffer();
+ debugLog('Physics recorder started (manual)');
+ }
+ } else {
+ debugLog('WARNING: Could not parent XR camera - ship or transformNode not found');
+ }
+ }
+
// Remove UI
mainDiv.remove();
- W/S: Move forward/backward
- A/D: Yaw left/right -
- Arrow Keys: Pitch up, down +
- Arrow Up/Down: Pitch up/down +
- Arrow Left/Right: Roll left/right
- Space: Fire weapon