// 战斗核心循环 private void FightServiceRun() { if (TickTimer_.ToNextTick(FightServiceDef.FRAME_INTERVAL_TIME_F - ReimbursedTime_)) { float startTime = Time.realtimeSinceStartup; // 1、清空消息缓存 FightMessageCache.Instance.ClearAll(); // 2、先处理延时的消息 MessageDispatcher.Instance.DispatchDelayedMessages(); // 3、执行单位AI for (int i = 0; i < EntityManager.Instance.AttackUnitList.Count; i++) { Entity entity = EntityManager.Instance.AttackUnitList[i]; entity.Update(); } for (int i = 0; i < EntityManager.Instance.DefenderUnitList.Count; i++) { Entity entity = EntityManager.Instance.DefenderUnitList[i]; entity.Update(); } // 4、更新战场统计 FightTicker.Tick(); proto.S2CFightFrameInfo FraneInfoMsg = FightMessageCache.Instance.GetFrameInfoMsg(); FraneInfoMsg.framecount = FightTicker.FrameCount; FraneInfoMsg.fighttick = FightTicker.Ticker; // 5、把消息传递到表现层 BattleSys.OnFightFrameInfo(FraneInfoMsg); // 6、判断战斗是否结束 if (FightAnalyzer.Instance.FightOver()) { Combating = false; } ReimbursedTime_ = Time.realtimeSinceStartup - startTime; } }