58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2025年07月01日 星期二 11:07:48
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace Logic.Timeline
|
|
{
|
|
public class TimelineManager
|
|
{
|
|
public static TimelineManager Instance = new TimelineManager();
|
|
private TimelineManager() { }
|
|
|
|
private List<FragmentBase> _fragments =new List<FragmentBase>();
|
|
|
|
|
|
public void AddFragment(FragmentBase fragment)
|
|
{
|
|
_fragments.Add(fragment);
|
|
Update();
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
foreach (var fragment in _fragments)
|
|
{
|
|
if (fragment.State == FragmentState.Prepare)
|
|
{
|
|
fragment.OnStart();
|
|
fragment.StartTime = Time.time;
|
|
fragment.State = FragmentState.Playing;
|
|
}
|
|
|
|
if (fragment.State == FragmentState.Playing)
|
|
{
|
|
fragment.OnUpdate(Time.time - fragment.StartTime);
|
|
if (Time.time >= fragment.StartTime + fragment.Duration)
|
|
{
|
|
fragment.OnFinished();
|
|
fragment.State = FragmentState.Finished;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int i = _fragments.Count - 1; i >= 0; i--)
|
|
{
|
|
if (_fragments[i].State != FragmentState.Finished) continue;
|
|
_fragments.RemoveAt(i);
|
|
}
|
|
}
|
|
}
|
|
} |