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.

87 lines
2.4 KiB
C#

2 years ago
using Entitas;
using UnityEngine;
using Game;
2 years ago
public class TimelineSystem : IExecuteSystem, IInitializeSystem
{
private IGroup<GameEntity> _entities;
2 years ago
public void Initialize()
{
_entities = Util.GetGroup(GameMatcher.Timeline);
}
2 years ago
public void Execute()
{
foreach (var entity in _entities)
{
var timeline = entity.timeline;
if (timeline.IsPause)
continue;
if (!timeline.IsRunning)
continue;
if (timeline.IsBeThrow)
continue;
2 years ago
UpdateCheckEnd(entity);
if (!timeline.IsRunning)
continue;
2 years ago
UpdateTimeline(timeline);
}
}
private static void UpdateCheckEnd(GameEntity entity)
2 years ago
{
var timeline = entity.timeline;
timeline.TimePast += Time.deltaTime;
if (timeline.TimePast >= timeline.TimeMax)
{
Util.EndSkillTimeline(entity);
}
}
private static void UpdateTimeline(TimelineComponent timeline)
2 years ago
{
foreach (var clip in timeline.Timeline.Clips)
2 years ago
{
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)
2 years ago
{
clipReal.HasRun = true;
//超过结束时间的
if (clipReal.IsAlive)
{
//从激活状态退出的
clipReal.OnLeave();
clipReal.IsAlive = false;
}
else
{
//没有激活过 直接退出的
clipReal.OnEnter();
clipReal.OnStay();
clipReal.OnLeave();
}
2 years ago
}
else
2 years ago
{
//case2 到激活时间、未到结束时间的
if (!clipReal.IsAlive)
{
clipReal.OnEnter();
clipReal.IsAlive = true;
}
2 years ago
clipReal.OnStay();
}
}
}
}