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();
}
}
///
/// 台词播放记录数据key
///
private const string DIALOGUE_PLAY_DATA = "Dialogue_play_data";
///
/// 台词配置数据,key:角色id, value:台词配置数据
///
private Dictionary> dicDialogueData;
///
/// 角色台词对应的权重字典,key:角色id,value: subKey:台词id,subValue:台词权重
///
private Dictionary> dicDialogueWeight;
///
/// 台词播放记录数据
///
private DialoguePlayData dialoguePlayData;
///
/// 是否初始化
///
private bool isInit;
#region 临时数据
///
/// 符合条件的台词数据
///
private readonly List listDialogueData = new();
private readonly List listDialogueWeight = new();
#endregion
public void Init()
{
isInit = false;
dicDialogueData = new();
dicDialogueWeight = new();
dialoguePlayData = StorageMgr.Instance.GetStorage(DIALOGUE_PLAY_DATA);
EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, InitData);
}
public void Release()
{
EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, InitData);
isInit = false;
dicDialogueData.Clear();
dicDialogueData = null;
}
///
/// 播放台词
///
///
///
///
///
public async UniTask