|  |  |  | using System; | 
					
						
							|  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  | using UnityEngine; | 
					
						
							|  |  |  | using UnityEngine.Timeline; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Game | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public class TimelineClipPoolManager : ObjectPoolBase<TimelineClipPoolManager> | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         private delegate TimelineClipPoolItem EventCallbackCreate(); | 
					
						
							|  |  |  |         private readonly Dictionary<Type, EventCallbackCreate> _dict = new Dictionary<Type, EventCallbackCreate>(); | 
					
						
							|  |  |  |         public override void OnCreate() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Register<AnimationPlayableAsset, ClipAnimation>(); | 
					
						
							|  |  |  |             Register<SlideClip, ClipSlide>(); | 
					
						
							|  |  |  |             Register<BreakClip, ClipBreak>(); | 
					
						
							|  |  |  |             Register<MovestepClip, ClipMovestep>(); | 
					
						
							|  |  |  |             Register<AttackClip, ClipAttack>(); | 
					
						
							|  |  |  |             Register<AttackTriggerClip, ClipAttackTrigger>(); | 
					
						
							|  |  |  |             Register<CancelClip, ClipCancel>(); | 
					
						
							|  |  |  |             Register<CastShadowClip, ClipCastShadow>(); | 
					
						
							|  |  |  |             Register<EffectClip, ClipEffect>(); | 
					
						
							|  |  |  |             Register<SubEntityClip, ClipSubEntity>(); | 
					
						
							|  |  |  |             Register<SoundClip, ClipSound>(); | 
					
						
							|  |  |  |             Register<FollowTargetClip, ClipFollowTarget>(); | 
					
						
							|  |  |  |             Register<GlobalEffectClip, ClipGlobalEffect>(); | 
					
						
							|  |  |  |             Register<DodgeClip, ClipDodge>(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         private void Register<T1, T2>() where T2 : TimelineClipBase, new() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             _dict[typeof(T1)] = Create<T2>; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         public TimelineClipPoolItem CreateByClipType(Type type, TimelineClip clip, GameEntity owner) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if (!_dict.ContainsKey(type)) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 Debug.Log("Unknown Clip Type:" + type); | 
					
						
							|  |  |  |                 return null; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             var ret = _dict[type](); | 
					
						
							|  |  |  |             ret.Clip.Create(clip, owner); | 
					
						
							|  |  |  |             return ret; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private TimelineClipPoolItem Create<T>() where T : TimelineClipBase, new() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             var ret = Create<TimelineClipPoolItem>(typeof(T).ToString(), (item) => | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 item.Clip = new T(); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |             ret.Clip.Reset(); | 
					
						
							|  |  |  |             return ret; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     public class TimelineClipPoolItem : ObjectPoolItemBase | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         public TimelineClipBase Clip; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |