Improve simulation updates using frame versions and enhance player input binding logic

This commit is contained in:
2026-04-27 16:06:05 +02:00
parent d62bc911a3
commit 3074d523d7
2 changed files with 32 additions and 5 deletions

View File

@@ -6731,11 +6731,22 @@ export class RuntimeHost {
const pointerBinding = getPlayerStartMouseBindingCodeForButton(
event.button
);
const playerInputBindings = this.resolveRuntimePlayerInputBindings();
if (
pointerBinding !== null &&
this.runtimeScene.playerInputBindings.keyboard.interact ===
pointerBinding
this.activeRuntimeTargetReference !== null &&
playerInputBindings.keyboard.clearTarget === pointerBinding
) {
event.preventDefault();
event.stopImmediatePropagation();
this.clearActiveRuntimeTarget();
return;
}
if (
pointerBinding !== null &&
playerInputBindings.keyboard.interact === pointerBinding
) {
this.dispatchRuntimeInteract();
}

View File

@@ -166,16 +166,32 @@ export function ViewportCanvas({
const initialFrame = editorSimulationController.getFrameSnapshot();
let currentSceneVersion = initialFrame.sceneVersion;
host.updateSimulation(initialFrame.runtimeScene, initialFrame.clock);
let currentFrameVersion = initialFrame.frameVersion;
host.updateSimulation(initialFrame.runtimeScene, initialFrame.clock, {
sceneVersion: initialFrame.sceneVersion,
frameVersion: initialFrame.frameVersion
});
return editorSimulationController.subscribeFrame((frame) => {
if (frame.sceneVersion !== currentSceneVersion) {
currentSceneVersion = frame.sceneVersion;
host.updateSimulation(frame.runtimeScene, frame.clock);
currentFrameVersion = frame.frameVersion;
host.updateSimulation(frame.runtimeScene, frame.clock, {
sceneVersion: frame.sceneVersion,
frameVersion: frame.frameVersion
});
return;
}
host.updateSimulationFrame(frame.runtimeScene, frame.clock);
if (frame.frameVersion === currentFrameVersion) {
return;
}
currentFrameVersion = frame.frameVersion;
host.updateSimulationFrame(frame.runtimeScene, frame.clock, {
sceneVersion: frame.sceneVersion,
frameVersion: frame.frameVersion
});
});
}, [editorSimulationController]);