Add function to resolve effective interaction trigger in runtime-interaction-system.ts

This commit is contained in:
2026-04-14 21:27:09 +02:00
parent ac29a21915
commit f4cef8b0f0

View File

@@ -272,10 +272,39 @@ function hasTriggerLinks(
trigger: InteractionLink["trigger"]
): boolean {
return runtimeScene.interactionLinks.some(
(link) => link.sourceEntityId === sourceEntityId && link.trigger === trigger
(link) =>
link.sourceEntityId === sourceEntityId &&
resolveEffectiveInteractionTrigger(runtimeScene, link) === trigger
);
}
function resolveEffectiveInteractionTrigger(
runtimeScene: RuntimeSceneDefinition,
link: InteractionLink
): InteractionLink["trigger"] {
if (
runtimeScene.entities.interactables.some(
(entity) => entity.entityId === link.sourceEntityId
) ||
runtimeScene.entities.sceneExits.some(
(entity) => entity.entityId === link.sourceEntityId
) ||
runtimeScene.entities.npcs.some((entity) => entity.entityId === link.sourceEntityId)
) {
return "click";
}
if (
runtimeScene.entities.triggerVolumes.some(
(entity) => entity.entityId === link.sourceEntityId
)
) {
return link.trigger === "click" ? "enter" : link.trigger;
}
return link.trigger;
}
function getInteractableTargetRadius(
interactable: RuntimeInteractable
): number {
@@ -660,7 +689,10 @@ export class RuntimeInteractionSystem {
dispatcher: RuntimeInteractionDispatcher
) {
for (const link of runtimeScene.interactionLinks) {
if (link.sourceEntityId !== sourceEntityId || link.trigger !== trigger) {
if (
link.sourceEntityId !== sourceEntityId ||
resolveEffectiveInteractionTrigger(runtimeScene, link) !== trigger
) {
continue;
}