From 10c94fc5ec1ba1d9dd9ed40b55b7e78e64175581 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 25 Apr 2026 04:15:26 +0200 Subject: [PATCH] auto-git: [change] src/runtime-three/runtime-interaction-system.ts --- .../runtime-interaction-system.ts | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/runtime-three/runtime-interaction-system.ts b/src/runtime-three/runtime-interaction-system.ts index bdfb2cf4..7dd056b0 100644 --- a/src/runtime-three/runtime-interaction-system.ts +++ b/src/runtime-three/runtime-interaction-system.ts @@ -598,6 +598,61 @@ export function resolveRuntimeTargetCandidates(options: { return candidates; } +export function resolveRuntimeTargetReference( + runtimeScene: RuntimeSceneDefinition, + reference: RuntimeTargetReference +): RuntimeResolvedTarget | null { + switch (reference.kind) { + case "interactable": { + const interactable = + runtimeScene.entities.interactables.find( + (candidate) => candidate.entityId === reference.entityId + ) ?? null; + + if ( + interactable === null || + !interactable.interactionEnabled || + !hasTriggerLinks(runtimeScene, interactable.entityId, "click") + ) { + return null; + } + + return { + kind: "interactable", + entityId: interactable.entityId, + prompt: interactable.prompt, + position: interactable.position, + center: interactable.position, + range: interactable.radius + }; + } + case "npc": { + const npc = + runtimeScene.entities.npcs.find( + (candidate) => candidate.entityId === reference.entityId + ) ?? null; + + if ( + npc === null || + !npc.visible || + !hasTriggerLinks(runtimeScene, npc.entityId, "click") + ) { + return null; + } + + const bounds = getNpcDialogueTargetBounds(npc); + return { + kind: "npc", + entityId: npc.entityId, + prompt: getNpcDialoguePrompt(npc, true), + position: npc.position, + center: bounds.center, + range: bounds.range + }; + } + } +} + export function resolveStableRuntimeTargetProposal( candidates: RuntimeTargetCandidate[], previousProposedTargetEntityId: string | null,