125 lines
3.5 KiB
C#
125 lines
3.5 KiB
C#
|
|
using GameCore;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace UnrealM
|
|||
|
|
{
|
|||
|
|
//开动作序列扩展
|
|||
|
|
|
|||
|
|
public class ActionSequenceSystem : UnitySingleton<ActionSequenceSystem>
|
|||
|
|
{
|
|||
|
|
private readonly List<ActionSequence> listSequence = new List<ActionSequence>(64);
|
|||
|
|
|
|||
|
|
#if UNITY_EDITOR
|
|||
|
|
public List<ActionSequence> ListSequence { get { return listSequence; } }
|
|||
|
|
private void Reset()
|
|||
|
|
{
|
|||
|
|
name = "ActionSequenceSystem";
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//Start a sequence
|
|||
|
|
public static ActionSequence GetSequence(Component component)
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = ActionSequence.GetInstance(component);
|
|||
|
|
Instance.listSequence.Add(seq);
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Update is called once per frame
|
|||
|
|
private void Update()
|
|||
|
|
{
|
|||
|
|
//UpdateSequence
|
|||
|
|
bool isNeedRemoveSequence = false;
|
|||
|
|
for (int i = 0; i < listSequence.Count; i++)
|
|||
|
|
{
|
|||
|
|
listSequence[i].Update(Time.deltaTime);
|
|||
|
|
if (listSequence[i].isFinshed)
|
|||
|
|
{
|
|||
|
|
listSequence[i].Release();
|
|||
|
|
isNeedRemoveSequence = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//RemoveFinshedSequence
|
|||
|
|
if (isNeedRemoveSequence)
|
|||
|
|
{
|
|||
|
|
listSequence.RemoveAll(seq => seq.isFinshed);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void StopSequenceByID(Component id)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < listSequence.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (id == listSequence[i].id)
|
|||
|
|
{
|
|||
|
|
listSequence[i].Stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void SetStopSequenceID(Component id)
|
|||
|
|
{
|
|||
|
|
Instance.StopSequenceByID(id);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static ActionSequence GetSequence()
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = ActionSequence.GetInstance();
|
|||
|
|
Instance.listSequence.Add(seq);
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region 无ID启动(注意要手动关闭循环的,不然机器就会爆炸……)
|
|||
|
|
public static ActionSequence Sequence()
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = GetSequence();
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static ActionSequence Delayer(float delay, Action action)
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = GetSequence();
|
|||
|
|
seq.Interval(delay).Action(action);
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static ActionSequence Looper(float interval, int loopTime, bool isActionAtStart, Action action)
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = GetSequence();
|
|||
|
|
if (isActionAtStart)
|
|||
|
|
{
|
|||
|
|
Debug.Log("WWWWWWWWWWWWWWWWWWWWWWWWWWW isActionAtStart");
|
|||
|
|
seq.Action(action).Interval(interval);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.Log("WWWWWWWWWWWWWWWWWWWWWWWWWWW isActionAtStart not");
|
|||
|
|
|
|||
|
|
seq.Interval(interval).Action(action);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
seq.Loop(loopTime);
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static ActionSequence Looper(float interval, int loopTime, bool isActionAtStart, Action<int> action)
|
|||
|
|
{
|
|||
|
|
ActionSequence seq = GetSequence();
|
|||
|
|
if (isActionAtStart)
|
|||
|
|
{
|
|||
|
|
seq.Action(action).Interval(interval);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
seq.Interval(interval).Action(action);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
seq.Loop(loopTime);
|
|||
|
|
return seq;
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
}
|
|||
|
|
}
|