using cfg.DialogueCfg; using Cysharp.Threading.Tasks; using Framework; using Gameplay; using PhxhSDK; using System; using System.Collections.Generic; using System.Linq; using Random = UnityEngine.Random; /// /// 台词管理器 /// public class DialogueManager : Singlenton, IInitable { /// /// 台词播放记录数据 /// private class DialoguePlayData { /// /// 台词对应次数字典 /// public Dictionary DicCount; /// /// 上一次日期 /// public DateTime LastTime; public DialoguePlayData() { DicCount = new(); } public void SetNewTime(DateTime dateTime) { LastTime = dateTime; DicCount.Clear(); } } /// /// 实际语音id = 角色id * RATIO + 台词id /// 实际台词文本key = "Dialogue_{实际语音id}" /// private const int RATIO = 1000; /// /// 台词播放记录数据key /// private const string DIALOGUE_PLAY_DATA = "Dialogue_Play_Data"; /// /// 角色台词对应的权重字典,key:角色id,value: subKey:台词id,subValue:台词权重 /// private Dictionary> dicDialogueWeight; /// /// 台词数据字典字典,key:台词类型,value:台词配置数据列表 /// private Dictionary> dicDialogue; /// /// 台词播放记录数据 /// private DialoguePlayData dialoguePlayData; #region 战斗台词 /// /// 当前播放的战斗台词 /// private Audio curFightAudio; /// /// 当前战斗台词优先级 /// private int curFightDialoguePriority; #endregion /// /// 是否初始化 /// private bool isInit; #region 临时数据 /// /// 符合条件的台词数据 /// private readonly List listDialogueDataTemp = new(); private readonly List listDialogueWeight = new(); #endregion public void Init() { isInit = false; dicDialogueWeight = new(); dialoguePlayData = StorageMgr.Instance.GetStorage(DIALOGUE_PLAY_DATA); EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, OnInit); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, OnInit); listDialogueDataTemp.Clear(); } /// /// 播放台词 /// /// /// /// /// public async UniTask