using UnityEngine;
namespace BaseGames.Dialogue
{
///
/// 对话行结构(架构 14_NarrativeModule §3)。
/// 每行包含说话人、文本(本地化 Key)和可选的语音片段。
///
[System.Serializable]
public struct DialogueLine
{
public string speakerNameKey; // 本地化 key(如 "NPC_Elder_Name")
[TextArea(2, 5)]
public string textKey; // 本地化文本 key(如 "DLG_Elder_001")
public Sprite portraitSprite; // 可选说话人头像
public AudioClip voiceClip; // 可选语音
[Min(0.01f)]
public float typewriterDelay; // 每字符延迟(秒,0 = 使用默认 0.03f)
}
///
/// 对话序列 SO(架构 14_NarrativeModule §3)。
/// 一个 NPC 对话场合对应一个序列,由若干 DialogueLine 组成。
/// 资产路径: Assets/ScriptableObjects/Dialogue/DLG_{NpcId}_{Context}.asset
///
[CreateAssetMenu(menuName = "BaseGames/Dialogue/DialogueSequence")]
public class DialogueSequenceSO : ScriptableObject
{
public string sequenceId; // 全局唯一,如 "DLG_Elder_Quest_Available"
public DialogueLine[] lines;
/// 条件变体:满足特定世界标志时替换整个序列。
[System.Serializable]
public struct ConditionalVariant
{
public string conditionFlag; // WorldState flag key
public DialogueSequenceSO sequence;
}
public ConditionalVariant[] variants;
}
}