using Entitas; using UnityEngine; using Game; public class TimelineSystem : IExecuteSystem, IInitializeSystem { private IGroup _entities; public void Initialize() { _entities = Util.GetGroup(GameMatcher.Timeline); } public void Execute() { foreach (var entity in _entities) { var timeline = entity.timeline; if (!timeline.IsRunning) continue; if (timeline.IsPause) continue; UpdateCheckEnd(entity); UpdateTimeline(timeline); } } public void UpdateCheckEnd(GameEntity entity) { var timeline = entity.timeline; timeline.TimePast += Time.deltaTime; if (timeline.TimePast >= timeline.TimeMax) { Util.EndSkillTimeline(entity); return; } } public void UpdateTimeline(TimelineComponent timeline) { // if (timeline.timePast == 0) // { // return; // } foreach (var clip in timeline.Timeline.MClips) { var clipReal = clip.Clip; var isOpenTime = timeline.TimePast >= clipReal.StartTime && timeline.TimePast < clipReal.EndTime; if (clipReal.IsAlive && !isOpenTime) { clipReal.OnLeave(); clipReal.IsAlive = false; } } foreach (var clip in timeline.Timeline.MClips) { var clipReal = clip.Clip; var isOpenTime = timeline.TimePast >= clipReal.StartTime && timeline.TimePast < clipReal.EndTime; if (!clipReal.IsAlive && isOpenTime) { clipReal.OnEnter(); clipReal.IsAlive = true; } if (clipReal.IsAlive && isOpenTime) { clipReal.OnStay(); } } } }