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