示例#1
0
 /// <summary>
 /// 初始化战斗Service
 /// </summary>
 /// <param name="AttackerTeam"></param>
 /// <param name="DefenderTeam"></param>
 public void InitService(List <ClientShip> AttackerTeam, List <ClientShip> DefenderTeam)
 {
     FightTicker.InitTick();
     BattlefieldEnvironment.Instance.Init();
     FightAnalyzer.Instance.Init(AttackerTeam.Count, DefenderTeam.Count);
     this.SetupFightTeam(AttackerTeam, DefenderTeam);
 }
示例#2
0
    // 战斗核心循环
    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;
        }
    }