IEnumerator DelayStart(float scale, float duration, GameTimeScaleContext context, float delayed) { if (delayed > 0) { yield return(new WaitForSeconds(delayed)); } ReqTimeScale(scale, duration, context); }
/// <summary> /// 延迟启动系统减速. /// </summary> /// <returns><c>true</c>, if time scale delayed was reqed, <c>false</c> otherwise.</returns> /// <param name="scale">Scale.</param> /// <param name="duration">Duration.</param> /// <param name="context">Context.</param> /// <param name="delayTime">Delay time.</param> public bool ReqTimeScaleDelayed(float scale, float duration, GameTimeScaleContext context, float delayTime) { if (duration <= 0) { CancelTimeScale(context); return(false); } AppMain.Instance().StartCoroutine(DelayStart(scale, duration, context, delayTime)); return(true); }
/// <summary> /// 覆盖当前Scale. /// </summary> /// <param name="scale">Scale.</param> /// <param name="duration">Duration.</param> /// <param name="context">Context.</param> void OverrideCurScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { if (_currentScaleData == null) { _currentScaleData = new TimeScaleContextData(); } _currentScaleData.scale = scale; _currentScaleData.duration = duration; _currentScaleData.context = context; _currentScaleData.beginRealTime = Time.realtimeSinceStartup; _currentScaleData.OnUpdate = OnUpdate; Time.timeScale = scale; }
void BreakCurScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { if (_currentScaleData != null) { _stack.Push(_currentScaleData); } _currentScaleData = new TimeScaleContextData() { scale = scale, duration = duration, context = context, OnUpdate = OnUpdate, }; }
/// <summary> /// 取消当前的TimeScale. /// </summary> /// <returns><c>true</c>是否取消成功 <c>false</c>.</returns> /// <param name="contex">Contex.</param> public bool CancelTimeScale(GameTimeScaleContext contex) { if (_currentScaleData == null) { return(true); } if (_currentScaleData.context == contex) { Time.timeScale = 1; if (OnTimeScaleChange != null) { OnTimeScaleChange(1); } _currentScaleData = null; return(true); } return(false); }
/* * public void Awake() * { * if(s_instance == null) * s_instance = this; * }*/ /// <summary> /// 请求系统减速. /// </summary> /// <returns><c>true</c>, if time scale was reqed, <c>false</c> otherwise.</returns> /// <param name="scale">Scale.</param> /// <param name="duration">Duration.</param> /// <param name="context">Context.</param> public bool ReqTimeScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { if (duration <= 0) { CancelTimeScale(context); return(false); } ReqTimeScaleResult policy = CheckTimeScalePolicy(context); // if(_currentScaleData != null) // Log.info(this, "[Check Time scale] currentContexgt " + _currentScaleData.context +" context " + context + " result " + policy); // else // Log.info(this, "[Check Time scale] currentContexgt null context " + context + " result " + policy); switch (policy) { case ReqTimeScaleResult.Override: OverrideCurScale(scale, duration, context, OnUpdate); break; case ReqTimeScaleResult.Refused: RefuseScale(scale, duration, context, OnUpdate); return(false); case ReqTimeScaleResult.Break: BreakCurScale(scale, duration, context, OnUpdate); break; case ReqTimeScaleResult.Queued: break; default: break; } return(true); }
/// <summary> /// Checks the time scale policy. /// </summary> /// <returns>The time scale policy.</returns> /// <param name="context">Context.</param> public ReqTimeScaleResult CheckTimeScalePolicy(GameTimeScaleContext context) { if (_currentScaleData == null) { return(ReqTimeScaleResult.Override); } ReqTimeScaleResult ret = ReqTimeScaleResult.None; switch (_currentScaleData.context) { case GameTimeScaleContext.BossKilled: switch (context) { case GameTimeScaleContext.BossKilled: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.GamePause: ret = ReqTimeScaleResult.Break; break; case GameTimeScaleContext.PlayerSkill: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.BreakArmor: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.PlayerVisible: ret = ReqTimeScaleResult.Refused; break; default: ret = ReqTimeScaleResult.Override; break; } break; case GameTimeScaleContext.GamePause: switch (context) { case GameTimeScaleContext.BossKilled: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.GamePause: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.PlayerSkill: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.BreakArmor: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.PlayerVisible: ret = ReqTimeScaleResult.Refused; break; default: ret = ReqTimeScaleResult.Override; break; } break; case GameTimeScaleContext.PlayerSkill: switch (context) { case GameTimeScaleContext.BossKilled: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.GamePause: ret = ReqTimeScaleResult.Break; break; case GameTimeScaleContext.PlayerSkill: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.BreakArmor: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.PlayerVisible: ret = ReqTimeScaleResult.Override; break; default: ret = ReqTimeScaleResult.Override; break; } break; case GameTimeScaleContext.BreakArmor: switch (context) { case GameTimeScaleContext.BossKilled: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.GamePause: ret = ReqTimeScaleResult.Break; break; case GameTimeScaleContext.PlayerSkill: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.BreakArmor: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.PlayerVisible: ret = ReqTimeScaleResult.Refused; break; default: ret = ReqTimeScaleResult.Override; break; } break; case GameTimeScaleContext.PlayerVisible: switch (context) { case GameTimeScaleContext.BossKilled: ret = ReqTimeScaleResult.Override; break; case GameTimeScaleContext.GamePause: ret = ReqTimeScaleResult.Break; break; case GameTimeScaleContext.PlayerSkill: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.BreakArmor: ret = ReqTimeScaleResult.Refused; break; case GameTimeScaleContext.PlayerVisible: ret = ReqTimeScaleResult.Override; break; default: ret = ReqTimeScaleResult.Override; break; } break; default: ret = ReqTimeScaleResult.Override; break; } return(ret); }
void RefuseScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { return; }