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( const pointerBinding = getPlayerStartMouseBindingCodeForButton(
event.button event.button
); );
const playerInputBindings = this.resolveRuntimePlayerInputBindings();
if ( if (
pointerBinding !== null && pointerBinding !== null &&
this.runtimeScene.playerInputBindings.keyboard.interact === this.activeRuntimeTargetReference !== null &&
pointerBinding playerInputBindings.keyboard.clearTarget === pointerBinding
) {
event.preventDefault();
event.stopImmediatePropagation();
this.clearActiveRuntimeTarget();
return;
}
if (
pointerBinding !== null &&
playerInputBindings.keyboard.interact === pointerBinding
) { ) {
this.dispatchRuntimeInteract(); this.dispatchRuntimeInteract();
} }

View File

@@ -166,16 +166,32 @@ export function ViewportCanvas({
const initialFrame = editorSimulationController.getFrameSnapshot(); const initialFrame = editorSimulationController.getFrameSnapshot();
let currentSceneVersion = initialFrame.sceneVersion; 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) => { return editorSimulationController.subscribeFrame((frame) => {
if (frame.sceneVersion !== currentSceneVersion) { if (frame.sceneVersion !== currentSceneVersion) {
currentSceneVersion = frame.sceneVersion; 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; 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]); }, [editorSimulationController]);