using GameCore; using System; using System.Collections.Generic; using UnityEngine; namespace UnrealM { //开动作序列扩展 public class ActionSequenceSystem : UnitySingleton { private readonly List listSequence = new List(64); #if UNITY_EDITOR public List 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 action) { ActionSequence seq = GetSequence(); if (isActionAtStart) { seq.Action(action).Interval(interval); } else { seq.Interval(interval).Action(action); } seq.Loop(loopTime); return seq; } #endregion } }