Пример #1
0
        //开始
        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();
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
 //结束当前回合
 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);
 }
Пример #5
0
 protected override void OnBattleUnLoad()
 {
     base.OnBattleUnLoad();
     _flagPause.Reset();
     CurOperatingUnit = null;
     BattleCoroutine.Kill(OnInEndTurnCoroutine);
     BattleCoroutine.Kill(OnInPostEndTurnCoroutine);
 }
Пример #6
0
 public CoroutineHandle CustomStartBattleCoroutine()
 {
     if (CurData == null)
     {
         return(BattleCoroutine.Run(CustomStartBattleFlow()));
     }
     return(BattleCoroutine.Run(CurData.CustomStartBattleFlow()));
 }
Пример #7
0
 //停止所有的临时剧情
 void StopAllTempPlot()
 {
     TempPlotFlag.Clear();
     foreach (var item in TempPlotCoroutines)
     {
         BattleCoroutine.Kill(item);
     }
     TempPlotCoroutines.Clear();
 }
Пример #8
0
 // 停止一段剧情
 public virtual void Stop()
 {
     StopAllTempPlot();
     BattleCoroutine.Kill(StartPlotCoroutine);
     BattleCoroutine.Kill(MainPlotCoroutine);
     if (CurData == null)
     {
         return;
     }
     CurData.OnBeRemoved();
     CurData = null;
 }
Пример #9
0
 void RecreateAlerts()
 {
     foreach (var alert in ActiveItems)
     {
         GOPool.Despawn(alert.gameObject);
     }
     ActiveItems.Clear();
     if (delayCallTask != null)
     {
         BattleCoroutine.Kill(delayCallTask);
     }
     delayCallTask = BattleCoroutine.Run(AddInitAlerts());
 }
Пример #10
0
        //开始一段附加剧情
        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);
        }
Пример #11
0
 public virtual void UnLoad()
 {
     if (!IsInBattle)
     {
         CLog.Error("没有加载SubBattle");
         return;
     }
     SubBattleCoroutine.Kill();
     BattleCoroutine.Run(_UnLoadBattle(() =>
     {
         SceneManager.SetActiveScene(BaseGlobal.BattleMgr.SceneSelf);
         BattleCoroutine.Run(BackToBattle());
     }));
 }
Пример #12
0
        //操作回合:回调函数
        #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();
        }
Пример #13
0
 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;
     }
 }
Пример #14
0
        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());
            }
        }
Пример #15
0
 // 加载场景
 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);
     }
 }
Пример #16
0
        /// <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());
        }
Пример #17
0
        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);
            }
        }
Пример #18
0
 void RunStart()
 {
     BattleCoroutine.Kill(StartPlotCoroutine);
     StartPlotCoroutine = BattleCoroutine.Run(CurData.OnPlotStart());
 }
Пример #19
0
 // 卸载战斗场景
 protected void UnLoadBattle(Callback onDone = null)
 {
     BattleCoroutine.Kill();
     MainUICoroutine.Run(_unLoadBattle(onDone));
 }
Пример #20
0
        // 加载战场
        // 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;
        }
Пример #21
0
 public void RunMain()
 {
     BattleCoroutine.Kill(MainPlotCoroutine);
     MainPlotCoroutine = BattleCoroutine.Run(EnumMain());
 }