/// <summary> /// 开始 /// </summary> public virtual void Start() { state = PlayerState.Running; pastTime = 0; OnStart(); coroutine = ReCoroutineTaskManager.Instance.AddTask(Update()); }
/// <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)); }
/// <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)); }
/// <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); }