コード例 #1
0
ファイル: BasePlayer.cs プロジェクト: vgvgvvv/ResetCore.Unity
 /// <summary>
 /// 开始
 /// </summary>
 public virtual void Start()
 {
     state    = PlayerState.Running;
     pastTime = 0;
     OnStart();
     coroutine = ReCoroutineTaskManager.Instance.AddTask(Update());
 }
コード例 #2
0
ファイル: Listenable.cs プロジェクト: vgvgvvv/ResetCore.Unity
        /// <summary>
        /// 转换为可监听对象
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public static Listenable GetListenable(this ReCoroutineTaskManager.CoroutineTask task)
        {
            UnityEvent finishEvent = new UnityEvent();

            task.callBack += (bo) =>
            {
                finishEvent.Invoke();
            };
            return(Listenable.GetListenable(finishEvent));
        }
コード例 #3
0
        /// <summary>
        /// 设置超时
        /// </summary>
        /// <param name="command"></param>
        /// <param name="time"></param>
        /// <param name="onTimeOut"></param>
        /// <returns></returns>
        public static BaseCommand SetTimeOutOnce(this BaseCommand command, float time, Action onTimeOut)
        {
            command.usePool = true;
            command.isOnce  = true;
            ReCoroutineTaskManager.CoroutineTask task = null;
            task = ReCoroutineTaskManager.Instance.WaitSecondTodo(() =>
            {
                command.StopListen();
                if (onTimeOut != null)
                {
                    onTimeOut();
                }
            }, time);
            Action startCall = () =>
            {
                if (task != null)
                {
                    task.Stop();
                }
            };

            return(command.AddStartCall(startCall));
        }
コード例 #4
0
        /// <summary>
        /// 调用事件处理函数
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public object CallAct(params object[] args)
        {
            try
            {
                if (args == null)
                {
                    args = new object[0];
                }

                if (args.Length != argNumber)
                {
                    throw new Exception("参数数量错误,传入的数量为 " + args.Length + "个 而正确的为 " + argNumber + "个");
                }

                if (!CheckCondition(conditionListWhenEveryArgIn, args))
                {
                    return(null);
                }

                for (int i = 0; i < onEveryArgIn.Count; i++)
                {
                    onEveryArgIn[i]();
                }

                if (callPool.Count == 0 && usePool)
                {
                    if (poolTimerAfterFirstClick != null)
                    {
                        poolTimerAfterFirstClick.Stop();
                    }

                    //重新时间计数
                    poolTimerAfterFirstClick = ReCoroutineTaskManager.Instance.LoopByEveryFrame(() =>
                    {
                        if (!listening)
                        {
                            poolTimerAfterFirstClick.Stop();
                        }
                        poolTime += Time.deltaTime;

                        for (int i = 0; i < poolTimerAfterFirstClickLoopCall.Count; i++)
                        {
                            poolTimerAfterFirstClickLoopCall[i]();
                        }
                    }, -1);
                }

                callPool.Add(args);

                lastCommand = args;

                return(CallActDirectly(args));
            }catch (Exception e)
            {
                Debug.LogException(e);
                if (onError != null)
                {
                    onError(e);
                }
            }
            return(null);
        }