2
0
Fork 0
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.

65 lines
1.9 KiB
C#

2 years ago
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.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();
}
}
}
}