From 925c5f73a1e65ff8d8f91c08556e7a1e04bab286 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Mon, 11 May 2026 21:23:29 +0200 Subject: [PATCH] Enhance runtime interaction system to require NPC targetability --- src/runtime-three/runtime-interaction-system.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/runtime-three/runtime-interaction-system.ts b/src/runtime-three/runtime-interaction-system.ts index 60402d40..4ef993c5 100644 --- a/src/runtime-three/runtime-interaction-system.ts +++ b/src/runtime-three/runtime-interaction-system.ts @@ -564,6 +564,7 @@ function collectRuntimeInteractionTargetSources( options: { useTargetingReach?: boolean; interactionReachMeters?: number; + requireNpcTargetable?: boolean; } = {} ): RuntimeInteractionTargetSource[] { const candidates: RuntimeInteractionTargetSource[] = []; @@ -623,8 +624,13 @@ function collectRuntimeInteractionTargetSources( } const hasClickLinks = hasTriggerLinks(runtimeScene, npc.entityId, "click"); + const requiresTargetable = options.requireNpcTargetable ?? false; - if (!hasClickLinks) { + if (requiresTargetable) { + if (!npc.targetable) { + continue; + } + } else if (!hasClickLinks) { continue; } @@ -684,7 +690,7 @@ export function resolveRuntimeTargetCandidates(options: { for (const source of collectRuntimeInteractionTargetSources( options.interactionOrigin, options.runtimeScene, - { useTargetingReach: true } + { useTargetingReach: true, requireNpcTargetable: true } )) { const toTarget = subtractVec3(source.center, options.cameraPosition); const cameraDistanceSquared = lengthSquaredVec3(toTarget); @@ -776,7 +782,7 @@ export function resolveRuntimeTargetReference( if ( npc === null || !npc.visible || - !hasTriggerLinks(runtimeScene, npc.entityId, "click") + !npc.targetable ) { return null; }