using System; using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using Fort23.Core; using Utility; namespace GameLogic.Combat.Hero { public class CombatHeroTimeLineControl : IDisposable { private BetterList _currRunEventLogicGroupList = new BetterList(); private ShowBaiscEntity combatHeroEntity; private Map _addTimeLienDatas = new Map(); public void Init(ShowBaiscEntity combatHeroEntity) { this.combatHeroEntity = combatHeroEntity; } public void AddTimeLienData(string key, TimeLienData timeLienData) { _addTimeLienDatas.Add(key, timeLienData); } public void AddTimeLienData(TimeLienData timeLienData) { if (_addTimeLienDatas.ContainsKey(timeLienData.timeLineName)) { return; } _addTimeLienDatas.Add(timeLienData.timeLineName, timeLienData); } public void RemoveTimeLineData(string key) { _addTimeLienDatas.Remove(key); } public void RemoveTimeLineData(TimeLienData timeLienData) { _addTimeLienDatas.Remove(timeLienData.timeLineName); } public TimeLineEventLogicGroupBasic AddEventLogicGroup(string groupName) { for (_addTimeLienDatas.Begin(); _addTimeLienDatas.Next();) { TimeLineEventLogicGroupBasic timeLineEventLogicGroup = _addTimeLienDatas.Value .GetTimeLineEventLogicGroup(groupName, null); if (timeLineEventLogicGroup != null) { timeLineEventLogicGroup.SetCombatInfo(combatHeroEntity, null, null, new TriggerData(), null, 0); AddEventLogicGroup(timeLineEventLogicGroup); } return timeLineEventLogicGroup; } return null; } public T GetTimeLineEventInfo(string groupName) where T : class { for (_addTimeLienDatas.Begin(); _addTimeLienDatas.Next();) { T timeLineEventLogicGroup = _addTimeLienDatas.Value .GetTimeLineEventInfo(groupName, null); if (timeLineEventLogicGroup != null) { return timeLineEventLogicGroup; } } return null; } public T GetTimeLineEventLogicGroup(string groupName) where T : TimeLineEventLogicGroupBasic, new() { for (_addTimeLienDatas.Begin(); _addTimeLienDatas.Next();) { T timeLineEventLogicGroup = _addTimeLienDatas.Value .GetTimeLineEventLogicGroup(groupName, null); if (timeLineEventLogicGroup != null) { return timeLineEventLogicGroup; } } return null; } public T GetTimeLineEventLogicGroup(string timeLineName, string groupName) where T : TimeLineEventLogicGroupBasic, new() { if (string.IsNullOrEmpty(timeLineName)) { return GetTimeLineEventLogicGroup(groupName); } else { if (_addTimeLienDatas.TryGetValue(timeLineName, out TimeLienData timeLienData)) { T timeLineEventLogicGroup = _addTimeLienDatas.Value .GetTimeLineEventLogicGroup(groupName, null); return timeLineEventLogicGroup; } } return null; } public void AddEventLogicGroup(TimeLineEventLogicGroupBasic eventLogicGroup) { _currRunEventLogicGroupList.Add(eventLogicGroup); eventLogicGroup.Update(0); } public void RemoveEventLogicGroup(TimeLineEventLogicGroupBasic eventLogicGroup) { _currRunEventLogicGroupList.Remove(eventLogicGroup); } public void Update(float deltaTime) { for (int i = 0; i < _currRunEventLogicGroupList.size; i++) { TimeLineEventLogicGroupBasic timeLineEventLogicGroupBasic = _currRunEventLogicGroupList[i]; bool isEnd = timeLineEventLogicGroupBasic.Update(deltaTime); if (isEnd) { _currRunEventLogicGroupList.Remove(timeLineEventLogicGroupBasic); CObjectPool.Instance.Recycle(timeLineEventLogicGroupBasic); } } } public void Dispose() { _currRunEventLogicGroupList.Clear(); _addTimeLienDatas.Clear(); } } }