//开始 void StartTurn(bool isForce = false) { if (IsPause && !isForce) { return; } _isInEndTurnFlag = false; BattleCoroutine.Kill(OnInEndTurnCoroutine); BattleCoroutine.Kill(OnInPostEndTurnCoroutine); //新的一回合开始 if (CurTurnIndex == 0) { AllUnits = CalcAllUnits().OrderByDescending(x => x.IsPlayerCtrl()).ToList(); OnTurnAllStart(); } if (AllUnits.Count <= 0) { CLog.Error("AllUnits人数太少"); return; } var unit = AllUnits[CurTurnIndex]; CurOperatingUnit = unit; OnSetMustProcess(unit); Callback_OnStartTurn?.Invoke(unit, isForce); OnTurnStart(unit, isForce); if (unit.IsPlayer()) { OnTurnPlayerStart(); Callback_OnStartPlayerTurn?.Invoke(); } }
void ReCreateAlerts() { foreach (var alert in ActiveItems) { GOPool.Despawn(alert.gameObject); } ActiveItems.Clear(); if (delayCallTask != null) { BattleCoroutine.Kill(delayCallTask); } delayCallTask = BattleCoroutine.Run(AddInitAlerts()); IEnumerator <float> AddInitAlerts() { if (AlertMgr != null) { for (int i = 0; i < AlertMgr.Data.Count; ++i) { if (i >= AlertMgr.Data.Count) { yield break; } yield return(Timing.WaitForSeconds(0.1f)); AddAlert(AlertMgr.Data[i]); } } yield break; } }
public virtual void Load(string battleID = "") { if (IsInBattle) { CLog.Error("正处于SubBattle中"); return; } TDBaseBattleData tempData = TDLuaMgr.Get <TData>(battleID); if (tempData == null) { CLog.Error("没有这个战场:{0}", battleID); return; } SubBattleCoroutine.Kill(); CurData = tempData.Copy <TData>(); if (CurData != null) { BattleID = tempData.TDID; CurData.OnBeAdded(SelfBaseGlobal); BattleCoroutine.Run(_LoadBattle()); } else { CLog.Error("Battle not found !error id=" + battleID); } }
//结束当前回合 public bool EndTurn(T endUnit = null) { if (IsPause || IsInEndTurn) { return(false); } if (SubBattleMgr.IsInBattle) { CLog.Error("错误!试图在SubBattle阶段结束回合"); return(false); } if (endUnit == null) { endUnit = Player as T; } OnPreEndTurn(endUnit); if (!IsCanEndTurn(endUnit)) { OnCantEndTurn(endUnit); return(false); } _isInEndTurnFlag = true; BattleCoroutine.Kill(OnInEndTurnCoroutine); OnInEndTurnCoroutine = BattleCoroutine.Run(OnInEndTurn(endUnit)); return(true); }
protected override void OnBattleUnLoad() { base.OnBattleUnLoad(); _flagPause.Reset(); CurOperatingUnit = null; BattleCoroutine.Kill(OnInEndTurnCoroutine); BattleCoroutine.Kill(OnInPostEndTurnCoroutine); }
public CoroutineHandle CustomStartBattleCoroutine() { if (CurData == null) { return(BattleCoroutine.Run(CustomStartBattleFlow())); } return(BattleCoroutine.Run(CurData.CustomStartBattleFlow())); }
//停止所有的临时剧情 void StopAllTempPlot() { TempPlotFlag.Clear(); foreach (var item in TempPlotCoroutines) { BattleCoroutine.Kill(item); } TempPlotCoroutines.Clear(); }
// 停止一段剧情 public virtual void Stop() { StopAllTempPlot(); BattleCoroutine.Kill(StartPlotCoroutine); BattleCoroutine.Kill(MainPlotCoroutine); if (CurData == null) { return; } CurData.OnBeRemoved(); CurData = null; }
void RecreateAlerts() { foreach (var alert in ActiveItems) { GOPool.Despawn(alert.gameObject); } ActiveItems.Clear(); if (delayCallTask != null) { BattleCoroutine.Kill(delayCallTask); } delayCallTask = BattleCoroutine.Run(AddInitAlerts()); }
//开始一段附加剧情 public void RunTemp(IEnumerator <float> enumerator, string flag = null) { if (flag != null) { if (TempPlotFlag.Contains(flag)) { return; } TempPlotFlag.Add(flag); } var temp = BattleCoroutine.Run(enumerator); TempPlotCoroutines.Add(temp); }
public virtual void UnLoad() { if (!IsInBattle) { CLog.Error("没有加载SubBattle"); return; } SubBattleCoroutine.Kill(); BattleCoroutine.Run(_UnLoadBattle(() => { SceneManager.SetActiveScene(BaseGlobal.BattleMgr.SceneSelf); BattleCoroutine.Run(BackToBattle()); })); }
//操作回合:回调函数 #endregion #region IEnumerator IEnumerator <float> OnInEndTurn(T endUnit) { //触发本地玩家事件 if (endUnit.IsPlayer()) { OnTurnPlayerEnd(); Callback_OnEndPlayerTurn?.Invoke(); } //回合后期处理 BattleCoroutine.Kill(OnInPostEndTurnCoroutine); OnInPostEndTurnCoroutine = BattleCoroutine.Run(OnInPostEndTurn(endUnit)); yield return(Timing.WaitUntilDone(OnInPostEndTurnCoroutine)); while (IsPause) { yield return(Timing.WaitForOneFrame); } //触发本地玩家事件 if (endUnit.IsPlayer()) { OnTurnPlayerPostEnd(); Callback_OnEndPlayerPostTurn?.Invoke(); } if (AllUnits.Count <= 0) { CLog.Error("AllUnits人数太少"); } if (CurOperatingUnit != endUnit) { CLog.Error("错误:当前回合单位不一致"); } OperatedUnits.Add(endUnit); Callback_OnEndTurn?.Invoke(endUnit); OnTurnEnd(endUnit); //开启下一个回合 if (CurTurnIndex >= AllUnits.Count - 1) { CurTurnIndex = 0; OnTurnAllEnd(); } //下一个单位 else { CurTurnIndex++; } StartTurn(); }
private void _doPauseGame() { if (BoolPause.IsIn()) { BaseGlobalMonoMgr.SetPauseType(MonoType.Unit); BattleCoroutine.Pause(); KinematicCharacterSystem.AutoSimulation = false; } else { BaseGlobalMonoMgr.SetPauseType(MonoType.None); BattleCoroutine.Resume(); KinematicCharacterSystem.AutoSimulation = true; } }
protected virtual void OnMoveStart() { BaseAStarMgr.GlobalMoveState.Add(); StateMachine.CurStateData?.OnMoveStart(); ClearNode(); ClearBlock(); GrabNewQuateration(); Callback_OnMoveStart?.Invoke(); if (UseFollowCoroutine) { BattleCoroutine.Kill(FollowPathCoroutine); FollowPathCoroutine = BattleCoroutine.Run(OnFollowPathCoroutine()); } }
// 加载场景 protected void LoadScene(TDBaseBattleData data, bool readData = true) { if (data == null) { return; } MainUICoroutine.Kill(); CurData = data.Copy <TData>(); if (CurData != null) { BattleID = data.TDID; CurData.OnBeAdded(SelfBaseGlobal); BattleCoroutine.Run(_loadBattle(readData)); } else { CLog.Error("Battle not found !error id=" + data.TDID); } }
/// <summary> /// 开始一段剧情 /// </summary> public virtual void Start(string id) { if (id.IsInvStr()) { return; } var temp = Table.Find(id); if (temp == null) { CLog.Error("无法找到剧情:{0}", id); return; } else { CurData = temp.Copy() as TData; } CurPlotIndex = 0; CurData.OnBeAdded(SelfBaseGlobal); BattleCoroutine.Run(CurData.OnPlotStart()); }
protected virtual void OnMoveEnd() { BaseAStarMgr.GlobalMoveState.Remove(); BaseAStarMgr.SpeedUp(1.0f); StateMachine.CurStateData?.OnMoveEnd(); CalcCurNode(); CalcCurBlock(); GrabNewQuateration(); ChangeToEndState(); if (MoveTarget_IsInTarget()) { CancleMoveTarget(); } Callback_OnMoveEnd?.Invoke(); if (UseFollowCoroutine) { BattleCoroutine.Kill(FollowPathCoroutine); } }
void RunStart() { BattleCoroutine.Kill(StartPlotCoroutine); StartPlotCoroutine = BattleCoroutine.Run(CurData.OnPlotStart()); }
// 卸载战斗场景 protected void UnLoadBattle(Callback onDone = null) { BattleCoroutine.Kill(); MainUICoroutine.Run(_unLoadBattle(onDone)); }
// 加载战场 // readData:是否读取数据 IEnumerator <float> _loadBattle(bool readData = true) { BaseGlobal.ResumeGame(); BaseInputMgr.ResetFullScreenState(); Callback_OnBattleLoadStart?.Invoke(); yield return(Timing.WaitForOneFrame); float startTime = Time.realtimeSinceStartup; IsLoadedScene = false; IsLoadingBattle = true; IsLoadBattleEnd = false; IsGameStartOver = false; IsGameStart = false; IsInPauseLoadingView = false; //开始Tip BattleCoroutine.Run(_randTip()); //开始加载 Callback_OnBattleLoad?.Invoke(); yield return(Timing.WaitForOneFrame); OnLoadSceneStart(); Callback_OnLoadingProgressChanged?.Invoke(Util.GetStr("StartToLoad"), 0.0f); //演示几秒,给UI渐变的时间 yield return(Timing.WaitForSeconds(DelayLoadSceneTime)); //加载场景 SceneName = CurData.GetSceneName(); SceneAsset = GRMgr.LoadScene(SceneName); while (!SceneAsset.IsDone) { yield return(Timing.WaitForOneFrame); Callback_OnLoadingProgressChanged?.Invoke(Util.GetStr("LoadingScene"), SceneAsset.Progress * 0.8f); } //延时一帧 yield return(Timing.WaitForOneFrame); Scene = SceneManager.GetSceneByName(SceneName); SceneManager.SetActiveScene(Scene); IsLoadedScene = true; Callback_OnBattleLoadedScene?.Invoke(); if (BaseSceneObject == null) { CLog.Error("错误,场景里没有SceneObject"); } //这里必须延迟一帧,等待UI创建,注册事件 yield return(Timing.WaitForOneFrame); //读取数据前,资源加载 yield return(Timing.WaitUntilDone(BattleCoroutine.Run(BeforeReadData()))); Callback_OnLoadingProgressChanged?.Invoke(Util.GetStr("BeforeReadData"), 0.9f); if (readData) { BaseGlobal.IsUnReadData = false; //读取战场数据 BaseGlobal.DBMgr.ReadGameDBData(); BaseGlobal.IsUnReadData = true; } yield return(Timing.WaitForOneFrame); Callback_OnBattleReadDataEnd?.Invoke(); //增加加载战场次数 LoadBattleCount++; //读取数据后资源加载 yield return(Timing.WaitUntilDone(BattleCoroutine.Run(AffterReadData()))); Callback_OnLoadingProgressChanged?.Invoke(Util.GetStr("AffterReadData"), 0.95f); while (IsInCustomLoading) { yield return(Timing.WaitForOneFrame); } GC.Collect(); Callback_OnLoadingProgressChanged?.Invoke(Util.GetStr("GC"), 1.0f); IsLoadingBattle = false; //场景加载结束 Callback_OnBattleLoaded?.Invoke(); IsLoadBattleEnd = true; yield return(Timing.WaitForOneFrame); //游戏开始(预处理最后阶段) SelfBaseGlobal.OnGameStart1(); SelfBaseGlobal.OnGameStart2(); Callback_OnGameStart?.Invoke(); yield return(Timing.WaitForOneFrame); SelfBaseGlobal.OnGameStarted1(); SelfBaseGlobal.OnGameStarted2(); Callback_OnGameStarted?.Invoke(); IsGameStart = true; //暂停在加载界面 Callback_OnInPauseLoadingView?.Invoke(); IsInPauseLoadingView = NeedPauseLoading; while (IsInPauseLoadingView) { yield return(Timing.WaitForOneFrame); } SelfBaseGlobal.OnCloseLoadingView(); Callback_OnCloseLoadingView?.Invoke(); //锁定进入战场流程 while (IsLockBattleStartFlow) { yield return(Timing.WaitForOneFrame); } yield return(Timing.WaitUntilDone(BattleCoroutine.Run(BattleStart()))); //进入自定义流程的时候暂停 Callback_OnStartCustomBattleCoroutine?.Invoke(); if (PlotMgr != null) { PlotMgr?.SetPlotPause(true); yield return(Timing.WaitUntilDone(PlotMgr.CustomStartBattleCoroutine())); PlotMgr?.SetPlotPause(false); } Callback_OnEndCustomBattleCoroutine.Invoke(); //结尾部分 SelfBaseGlobal.OnGameStartOver(); Callback_OnGameStartOver?.Invoke(); IsGameStartOver = true; }
public void RunMain() { BattleCoroutine.Kill(MainPlotCoroutine); MainPlotCoroutine = BattleCoroutine.Run(EnumMain()); }