using System; using System.Collections.Generic; using CombatCore.SerializationTimeLine; using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using CombatLibrary.CombatLibrary.CombatCore.Utility; using Fort23.Core; using Fort23.UTool; using Utility; #if !COMBAT_SERVER using UnityEngine; #endif [System.Serializable] public class TimeLienData { public string timeLineName; public List key = new List(); public List value = new List(); public string heroName; public Map> allAssetSerializations = new Map>(); public BetterList allAssetSerializationsKeys = new BetterList(); // public TimeLineAssetSerialization[] GetAllTimeLineAssetSerialization // { // get { return allAssetSerializations.ToArray(); } // } public TimeLienData Clone() { TimeLienData timeLienData = (TimeLienData)this.MemberwiseClone(); timeLienData.DeserializeData(); return timeLienData; } /// /// 反序列化 /// public void DeserializeData() { allAssetSerializations.Clear(); allAssetSerializationsKeys.Clear(); for (int i = 0; i < key.Count; i++) { Type type = System.Type.GetType(key[i]); if (type != null) { TimeLineAssetSerialization timeLineAssetSerialization = (TimeLineAssetSerialization)JsonManager.FromJson(value[i], type); if (allAssetSerializations.TryGetValue(timeLineAssetSerialization.groupName, out List info)) { info.Add(timeLineAssetSerialization); } else { info = new List(); info.Add(timeLineAssetSerialization); string keys = timeLineAssetSerialization.groupName; allAssetSerializations.Add(keys, info); allAssetSerializationsKeys.Add(keys); } } else { LogTool.Error(key[i] + "失败"); } } } public T GetTimeLineEventLogicGroup(string groupName, IFilterTimeLine filterTimeLine) where T : TimeLineEventLogicGroupBasic, new() { if (string.IsNullOrEmpty(groupName)) { return null; } List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); if (timeLineAssetSerializations==null||timeLineAssetSerializations.Count <= 0) { // LogTool.Log("没有时间线" + groupName); return null; } T timeLineEventLogicGroup = CObjectPool.Instance.Fetch(); timeLineEventLogicGroup.groupName = groupName; timeLineEventLogicGroup.Init(timeLineAssetSerializations); return timeLineEventLogicGroup; } public float GetTimeLineEventLogicGroupForTime(string groupName, IFilterTimeLine filterTimeLine) { float maxTime = 1; List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { TimeLineAssetSerialization timeLineAssetSerialization = timeLineAssetSerializations[i]; if (timeLineAssetSerialization is TineLineAnimationPlayableSerialization) { if (maxTime < timeLineAssetSerialization.endTime) { maxTime = timeLineAssetSerialization.endTime; } } } return maxTime; } public T GetTimeLineEventInfo(string groupName,IFilterTimeLine filterTimeLine) where T : class { List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { if (timeLineAssetSerializations[i] is T ) { return timeLineAssetSerializations[i] as T; } } return null; } public List GetTimeLineEventCurveInfos(string groupName, string guid, IFilterTimeLine filterTimeLine) { List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { TimeLineCurveSerializtion timeLineAssetSerialization = timeLineAssetSerializations[i] as TimeLineCurveSerializtion; if (timeLineAssetSerialization != null && timeLineAssetSerialization.guid.Equals(guid)) { return timeLineAssetSerialization.CurveInfos; } } return null; } public ACurve GetTimeLineEventACurve(string groupName, string guid, IFilterTimeLine filterTimeLine) { List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { TimeLineCurveSerializtion timeLineAssetSerialization = timeLineAssetSerializations[i] as TimeLineCurveSerializtion; if (timeLineAssetSerialization != null && timeLineAssetSerialization.guid.Equals(guid)) { ACurve aCurve = new ACurve(); aCurve.CurveInfos = timeLineAssetSerialization.CurveInfos; return aCurve; } } return default; } public float GetTimeLineEventSkillForTime(string groupName, IFilterTimeLine filterTimeLine) { float maxTime = 0; List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { TimeLineAssetSerialization timeLineAssetSerialization = timeLineAssetSerializations[i]; // if (timeLineAssetSerialization is TimeLineSpineSeralization) // { // return timeLineAssetSerialization.continuedTime; // } } return 0; } public float GetTimeLineEventSkillForPuaseTime(string groupName, IFilterTimeLine filterTimeLine) { float maxTime = 0; List timeLineAssetSerializations = GetTimeLineAssetSerialization(groupName, filterTimeLine); for (int i = 0; i < timeLineAssetSerializations.Count; i++) { TimeLineAssetSerialization timeLineAssetSerialization = timeLineAssetSerializations[i]; if (timeLineAssetSerialization is TimeLineSkillStartSerializtion) { return timeLineAssetSerialization.continuedTime; } } return 0; } public List GetTimeLineAssetSerialization(string groupName, IFilterTimeLine filterTimeLine) { // List currTimeLineAssetSerializations = new List(); if (allAssetSerializations.TryGetValue(groupName, out List allInfo)) { // for (int i = 0; i < allInfo.Count; i++) // { // TimeLineAssetSerialization fxSerializtion = allInfo[i]; // if (fxSerializtion.groupName.Equals(groupName) && // (filterTimeLine == null || filterTimeLine.Filter(fxSerializtion))) // { // currTimeLineAssetSerializations.Add(fxSerializtion); // } // } return allInfo; } return null; } }