Add third-person camera collision resolution and update controller handling

This commit is contained in:
2026-04-11 11:16:30 +02:00
parent 96754dfcf6
commit 650d3271c1

View File

@@ -243,6 +243,16 @@ export class RuntimeHost {
) ?? null,
resolvePlayerVolumeState: (feetPosition) =>
this.resolvePlayerVolumeState(feetPosition),
resolveThirdPersonCameraCollision: (
pivot,
desiredCameraPosition,
radius
) =>
this.collisionWorld?.resolveThirdPersonCameraCollision(
pivot,
desiredCameraPosition,
radius
) ?? { ...desiredCameraPosition },
setRuntimeMessage: (message) => {
if (message === this.currentRuntimeMessage) {
return;
@@ -355,7 +365,7 @@ export class RuntimeHost {
});
this.activeController = null;
this.firstPersonController.resetSceneState();
this.orbitVisitorController.resetSceneState();
this.thirdPersonController.resetSceneState();
this.interactionSystem.reset();
this.setInteractionPrompt(null);
this.currentFirstPersonTelemetry = null;
@@ -510,22 +520,12 @@ export class RuntimeHost {
const nextController =
this.desiredNavigationMode === "firstPerson"
? this.firstPersonController
: this.orbitVisitorController;
: this.thirdPersonController;
if (this.activeController?.id === nextController.id) {
return;
}
if (
this.activeController === this.firstPersonController &&
this.currentFirstPersonTelemetry !== null &&
nextController === this.orbitVisitorController
) {
this.orbitVisitorController.setFocusPoint(
this.currentFirstPersonTelemetry.feetPosition
);
}
this.activeController?.deactivate(this.controllerContext);
this.interactionSystem.reset();
this.setInteractionPrompt(null);