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.
86 lines
2.3 KiB
C#
86 lines
2.3 KiB
C#
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;
|
|
UpdateCheckEnd(entity);
|
|
if (!timeline.IsRunning)
|
|
continue;
|
|
UpdateTimeline(timeline);
|
|
}
|
|
}
|
|
|
|
private static void UpdateCheckEnd(GameEntity entity)
|
|
{
|
|
var timeline = entity.timeline;
|
|
timeline.TimePast += Time.deltaTime;
|
|
if (timeline.TimePast >= timeline.TimeMax)
|
|
{
|
|
Util.EndSkillTimeline(entity);
|
|
}
|
|
}
|
|
|
|
private static 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)
|
|
{
|
|
//超过结束时间的
|
|
if (clipReal.IsAlive)
|
|
{
|
|
//从激活状态退出的
|
|
clipReal.OnLeave();
|
|
clipReal.IsAlive = false;
|
|
}
|
|
else
|
|
{
|
|
//没有激活过 直接退出的
|
|
clipReal.OnEnter();
|
|
clipReal.OnStay();
|
|
clipReal.OnLeave();
|
|
}
|
|
|
|
clipReal.HasRun = true;
|
|
}
|
|
else
|
|
{
|
|
//case2 到激活时间、未到结束时间的
|
|
if (!clipReal.IsAlive)
|
|
{
|
|
clipReal.OnEnter();
|
|
clipReal.IsAlive = true;
|
|
}
|
|
|
|
clipReal.OnStay();
|
|
}
|
|
}
|
|
}
|
|
} |