You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
| using System.Collections.Generic;
 | |
| using Entitas;
 | |
| using UnityEngine;
 | |
| using Game;
 | |
| 
 | |
| public class TimelineSystem : IExecuteSystem, IInitializeSystem
 | |
| {
 | |
|     private IGroup<GameEntity> _entities;
 | |
| 
 | |
|     public void Initialize()
 | |
|     {
 | |
|         _entities = Util.GetGroup(GameMatcher.Timeline);
 | |
|     }
 | |
| 
 | |
|     public void Execute()
 | |
|     {
 | |
|         foreach (var entity in _entities)
 | |
|         {
 | |
|             var timeline = entity.timeline;
 | |
|             if (timeline.IsPause)
 | |
|                 continue;
 | |
|             if (!timeline.IsRunning)
 | |
|                 continue;
 | |
|             if (timeline.IsBeThrow)
 | |
|                 continue;
 | |
|             UpdateCheckEnd(entity);
 | |
|             if (!timeline.IsRunning)
 | |
|                 continue;
 | |
|             UpdateTimeline(timeline);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private static void UpdateCheckEnd(GameEntity entity)
 | |
|     {
 | |
|         var timeline = entity.timeline;
 | |
|         if (timeline.IsEnd)
 | |
|         {
 | |
|             timeline.IsEnd = false;
 | |
|             Util.EndSkillTimeline(entity);
 | |
|             return;
 | |
|         }
 | |
|         timeline.TimePast += Time.deltaTime;
 | |
|         if (timeline.TimePast >= timeline.TimeMax)
 | |
|         {
 | |
|             Util.EndSkillTimeline(entity);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void UpdateTimeline(TimelineComponent timeline)
 | |
|     {
 | |
|         foreach (var clip in timeline.Timeline.Clips)
 | |
|         {
 | |
|             var clipReal = clip.Clip;
 | |
|             var t = timeline.TimePast;
 | |
|             var t1 = clipReal.StartTime;
 | |
|             var t2 = clipReal.EndTime;
 | |
| 
 | |
|             //没有到激活时间的
 | |
|             if (t < t1) continue;
 | |
|             //已经执行完毕的
 | |
|             if (clipReal.HasRun) continue;
 | |
| 
 | |
|             if (t >= t2)
 | |
|             {
 | |
|                 clipReal.HasRun = true;
 | |
|                 //超过结束时间的
 | |
|                 if (clipReal.IsAlive)
 | |
|                 {
 | |
|                     //从激活状态退出的
 | |
|                     clipReal.OnLeave();
 | |
|                     clipReal.IsAlive = false;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     //没有激活过 直接退出的
 | |
|                     clipReal.OnEnter();
 | |
|                     clipReal.OnStay();
 | |
|                     clipReal.OnLeave();
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 //case2 到激活时间、未到结束时间的
 | |
|                 if (!clipReal.IsAlive)
 | |
|                 {
 | |
|                     clipReal.OnEnter();
 | |
|                     clipReal.IsAlive = true;
 | |
|                 }
 | |
| 
 | |
|                 clipReal.OnStay();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |