sk-client/Assets/Scripts/Extension/ActionSequenceSystem/ActionSequenceSystem.cs

125 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}