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