using Cielonos.Core.Interaction;
using Cielonos.MainGame.Narrative;
using Sirenix.OdinInspector;
using UnityEngine;
namespace Cielonos.MainGame.Interactions
{
///
/// NPC 交互基类。
/// 场景中的 NPC 挂载此脚本,交互时会自动将自身的 storyId 投递给 StoryDirector。
///
public class NpcBase : InteractableObjectBase
{
[TitleGroup("Story Settings", "剧情与对话路由配置", Alignment = TitleAlignments.Centered)]
[SerializeField]
[Tooltip("对应 NarrativeEntry 剧情路由表中的 storyId (如 'OldMan')")]
protected string storyId;
/// NPC 的唯一故事 ID。
public string StoryId => storyId;
protected override void InitializeChoices()
{
choices.Add(new InteractionChoice("Talk", Talk));
}
///
/// 触发对话。NPC 并不感知具体播放哪个 Yarn 节点,完全委托给 StoryDirector 进行状态评估。
///
public virtual void Talk()
{
if (string.IsNullOrEmpty(storyId))
{
Debug.LogWarning($"[NpcBase] {gameObject.name} 未配置 storyId,无法启动对话。");
return;
}
if (StoryDirector.Instance == null)
{
Debug.LogError("[NpcBase] 启动对话失败:场景中未找到 StoryDirector 实例!");
return;
}
StoryDirector.Instance.PlayStory(storyId);
}
}
}