Example #1
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            GUILayout.Label("NodePool State: Active/All", EditorStyles.boldLabel);
            GUILayout.Label($"Action: {ActionSequenceSystem.countActiveAction}/{ActionSequenceSystem.countAllAction}");
            GUILayout.Label($"IAction: {ActionSequenceSystem.countActiveIAction}/{ActionSequenceSystem.countAllIAction}");
            GUILayout.Label($"Interval: {ActionSequenceSystem.countActiveInterval}/{ActionSequenceSystem.countAllInterval}");
            GUILayout.Label($"Condition: {ActionSequenceSystem.countActiveWaitFor}/{ActionSequenceSystem.countAllWaitFor}");
            GUILayout.Label($"Enable: {ActionSequenceSystem.countActiveEnable}/{ActionSequenceSystem.countAllEnable}");
            GUILayout.Label($"SetActive: {ActionSequenceSystem.countActiveSetActive}/{ActionSequenceSystem.countAllSetActive}");
            GUILayout.Label($"Sequence: {ActionSequence.countActive}/{ActionSequence.countAll}");
            EditorGUILayout.Separator();

            //Showing ActionSequences in progress
            GUILayout.Label("ActionSequences in progress", EditorStyles.boldLabel);
            ActionSequenceSystem actionSequenceSystem = target as ActionSequenceSystem;

            isShowSequenceInfo = EditorGUILayout.Foldout(isShowSequenceInfo,
                                                         $"Sequence: {actionSequenceSystem.ListSequenceAlive.Count}");
            if (isShowSequenceInfo)
            {
                UpdateInfo(actionSequenceSystem.ListSequenceAlive);
            }

            Repaint();
        }
Example #2
0
        //直接延迟动作
        public static ActionSequence Delayer(this Component id, float delay, Action action)
        {
            ActionSequence seq = ActionSequenceSystem.GetSequence(id);

            seq.Interval(delay).Action(action);
            return(seq);
        }
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            int countAll, countActive;

            GUILayout.Label("ObjectPool State: Active/All", EditorStyles.boldLabel);
            ActionNodeAction.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("ActionNode: {0}/{1}", countActive, countAll));
            ActionNodeInterval.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("IntervalNode: {0}/{1}", countActive, countAll));
            ActionNodeCondition.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("ConditionNode: {0}/{1}", countActive, countAll));
            ActionSequence.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("Sequence: {0}/{1}", countActive, countAll));

            //Showing ActionSequences in progress
            ActionSequenceSystem actionSequenceSystem = target as ActionSequenceSystem;

            GUILayout.Label(string.Format("Sequence Count: {0}", actionSequenceSystem.ListSequence.Count), EditorStyles.boldLabel);
            for (int i = 0; i < actionSequenceSystem.ListSequence.Count; i++)
            {
                if (!actionSequenceSystem.ListSequence[i].isFinshed)
                {
                    GUILayout.Box(string.Format("{0} id: {1}\n Loop:{2}/{3}", i, actionSequenceSystem.ListSequence[i].id,
                                                actionSequenceSystem.ListSequence[i].cycles, actionSequenceSystem.ListSequence[i].loopTime), "TextArea");
                }
            }

            Repaint();
        }
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            GUILayout.Label("NodePool State: Active/All", EditorStyles.boldLabel);
            GUILayout.Label(string.Format("Action: {0}/{1}", ActionSequenceSystem.countActiveAction, ActionSequenceSystem.countAllAction));
            GUILayout.Label(string.Format("Interval: {0}/{1}", ActionSequenceSystem.countActiveInterval, ActionSequenceSystem.countAllInterval));
            GUILayout.Label(string.Format("Condition: {0}/{1}", ActionSequenceSystem.countActiveWaitFor, ActionSequenceSystem.countAllWaitFor));
            GUILayout.Label(string.Format("SetActive: {0}/{1}", ActionSequenceSystem.countActiveSetActive, ActionSequenceSystem.countAllSetActive));
            GUILayout.Label(string.Format("Sequence: {0}/{1}", ActionSequence.countActive, ActionSequence.countAll));
            EditorGUILayout.Separator();

            //Showing ActionSequences in progress
            GUILayout.Label("ActionSequences in progress", EditorStyles.boldLabel);
            ActionSequenceSystem actionSequenceSystem = target as ActionSequenceSystem;

            isShowSequenceInfo = EditorGUILayout.Foldout(isShowSequenceInfo, string.Format("Sequence: {0}", actionSequenceSystem.ListSequenceAlive.Count));
            if (isShowSequenceInfo)
            {
                UpdateInfo(actionSequenceSystem.ListSequenceAlive);
            }

            isShowSequenceUnscaledInfo = EditorGUILayout.Foldout(isShowSequenceUnscaledInfo, string.Format("SequenceUnscaled: {0}", actionSequenceSystem.ListSequenceUnscaleAlive.Count));
            if (isShowSequenceUnscaledInfo)
            {
                UpdateInfo(actionSequenceSystem.ListSequenceUnscaleAlive);
            }

            Repaint();
        }
Example #5
0
        private static void Create()
        {
            GameObject go = new GameObject("[ActionSequenceSystem]");

            DontDestroyOnLoad(go);
            instance = go.AddComponent <ActionSequenceSystem>();
        }
Example #6
0
 private void OnDestroy()
 {
     if (instance == this)
     {
         instance   = null;
         isQuitting = false;
     }
 }
 private void OnDestroy()
 {
     if (isDuplicate)
     {
         return;
     }
     if (instance == this)
     {
         instance = null;
     }
 }
        public void Play()
        {
            //停止当前的动画
            Stop();
            if (nLength <= 0)
            {
                return;
            }

            //处理播放顺序
            if (playOrder == PlayOrder.Forward)
            {
                nStartFrame = 0;
                nSign       = 1;
            }
            else
            {
                nStartFrame = nLength - 1;
                nSign       = -1;
            }

            //处理循环模式
            switch (loopType)
            {
            case LoopType.Once:
                loopTypeFun = UpdateFrameFuncOnce;
                break;

            case LoopType.Loop:
                loopTypeFun = UpdateFrameFuncLoop;
                break;

            case LoopType.PingPong:
                loopTypeFun = UpdateFrameFuncPingPong;
                break;

            default:
                break;
            }

            float interval = 1 / FPS;

            nCurFrame = nStartFrame;
            isPlaying = true;

            //开启定时器
            //这里使用了ActionSequenceSystem作为Timer,也可以使用DOTween的Sequence,当然您也可以使用您的Timer
#if DOTween
            DOTween.Sequence().SetId(this).SetRecyclable().AppendInterval(interval).AppendCallback(UpdateFrame).SetLoops(-1);
#else
            timer = ActionSequenceSystem.Looper(interval, -1, false, UpdateFrame);
#endif
        }
Example #9
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            int countAll, countActive;

            GUILayout.Label("ObjectPool State: Active/All", EditorStyles.boldLabel);
            ActionNodeAction.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("ActionNode: {0}/{1}", countActive, countAll));
            ActionNodeInterval.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("IntervalNode: {0}/{1}", countActive, countAll));
            ActionNodeWaitFor.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("ConditionNode: {0}/{1}", countActive, countAll));
            ActionNodeSetActive.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("HideNode: {0}/{1}", countActive, countAll));
            ActionSequence.GetObjectPoolInfo(out countActive, out countAll);
            GUILayout.Label(string.Format("Sequence: {0}/{1}", countActive, countAll));

            //Showing ActionSequences in progress
            ActionSequenceSystem actionSequenceSystem = target as ActionSequenceSystem;

            GUILayout.Label(string.Format("Sequence Count: {0}", actionSequenceSystem.ListSequenceAlive.Count), EditorStyles.boldLabel);
            for (int i = 0; i < actionSequenceSystem.ListSequenceAlive.Count; i++)
            {
                ActionSequence sequence = actionSequenceSystem.ListSequenceAlive[i];

                //if (!sequence.isFinshed)
                //{
                if (sequence.loopTime == 0) //It's a delayer
                {
                    GUILayout.Box(string.Format("  ID: {0}\n  Time({1:F2})", sequence.id, sequence.timeAxis), "TextArea");
                }
                else if (sequence.loopTime < 0) //It's a infinite looper
                {
                    GUILayout.Box(string.Format("  ID: {0}\n  Time({1:F2})   Loop({2}/{3})   Node[{4}]", sequence.id, sequence.timeAxis,
                                                sequence.cycles, sequence.loopTime, sequence.nodes.Count), "TextArea");
                }
                else //It's a count looper
                {
                    GUILayout.Box(string.Format("  ID: {0}\n  Time({1:F2})   Loop({2}/{3})   Node[{4}]", sequence.id, sequence.timeAxis,
                                                sequence.cycles, sequence.loopTime + 1, sequence.nodes.Count), "TextArea");
                }

                //}
            }

            Repaint();
        }
Example #10
0
        //直接循环动作
        public static ActionSequence Looper(this Component id, float interval, int loopTime, bool isActionAtStart, Action <int> action)
        {
            ActionSequence seq = ActionSequenceSystem.GetSequence(id);

            if (isActionAtStart)
            {
                seq.Action(action).Interval(interval);
            }
            else
            {
                seq.Interval(interval).Action(action);
            }

            seq.Loop(loopTime);
            return(seq);
        }
 //用Handle开序列
 public ActionSequence Sequence(Component id = null)
 {
     return(ActionSequenceSystem.GetSequence(id).SetHandle(this));
 }
 /// <summary>
 /// 用Component作为ID开序列
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public static ActionSequence SequenceUnscaled(this Component id)
 {
     return(ActionSequenceSystem.SequenceUnscaled(id));
 }
 /// <summary>
 /// 用Component作为ID开序列,并使用“控制句柄”
 /// </summary>
 /// <param name="id"></param>
 /// <param name="handle">控制句柄</param>
 /// <returns></returns>
 public static ActionSequence SequenceUnscaled(this Component id, ActionSequenceHandle handle)
 {
     return(ActionSequenceSystem.SequenceUnscaled(id).SetHandle(handle));
 }
Example #14
0
 /// <summary>
 /// 用Component作为ID停止序列
 /// </summary>
 /// <param name="id"></param>
 public static void StopSequence(this Component id)
 {
     ActionSequenceSystem.StopSequence(id);
 }
Example #15
0
        //用Component作为ID开序列
        public static ActionSequence Sequence(this Component id)
        {
            ActionSequence seq = ActionSequenceSystem.GetSequence(id);

            return(seq);
        }
 /// <summary>
 /// 用Component作为ID开序列
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public static ActionSequence Sequence(this Component id) => ActionSequenceSystem.Sequence(id);
 //用Component作为ID开序列
 public static ActionSequence Sequence(this Component id)
 {
     return(ActionSequenceSystem.GetSequence(id));
 }
Example #18
0
 //用Component作为ID停止序列
 public static void StopSequence(this object id)
 {
     ActionSequenceSystem.SetStopSequenceID(id);
 }
Example #19
0
 /// <summary>
 /// 用Handle开序列
 /// </summary>
 /// <returns></returns>
 public ActionSequence Sequence()
 {
     return(ActionSequenceSystem.Sequence().SetHandle(this));
 }
 /// <summary>
 /// 用Component作为ID开序列,并使用“控制句柄”
 /// </summary>
 /// <param name="id"></param>
 /// <param name="handle">控制句柄</param>
 /// <returns></returns>
 public static ActionSequence Sequence(this Component id, ActionSequenceHandle handle) =>
 ActionSequenceSystem.Sequence(id).SetHandle(handle);