Esempio n. 1
0
 public static void OnFightFrameInfo(proto.S2CFightFrameInfo msg)
 {
     if (EventOnFightFrameInfo != null)
     {
         EventOnFightFrameInfo(msg);
     }
 }
Esempio n. 2
0
    /// <summary>
    /// 战斗回调
    /// </summary>
    /// <param name="obj"></param>
    private void BattleSys_EventOnFightFrameInfo(proto.S2CFightFrameInfo obj)
    {
        if (UserStatusPanel.Instance != null)
        {
            UserStatusPanel.Instance.ShowTime(obj.fighttick / 1000);
        }

        for (int i = 0; i < obj.underattacklist_size(); i++)
        {
            proto.UnderAttackInfo underAttackInfo = obj.underattacklist(i);
            TeamDisplay           display         = GetTeamDisplay(underAttackInfo.unitid);
            display.ModifyHp(underAttackInfo);
        }

        for (int i = 0; i < obj.behaviorsequences_size(); i++)
        {
            proto.UnitBehavior unit    = obj.behaviorsequences(i);
            TeamDisplay        display = GetTeamDisplay(unit.unitid);
            if (unit.breakaway)
            {
                display.BreakAway();
                continue;
            }

            if (unit.has_position())
            {
                display.Move(((float)unit.position.posx) / 10000f, ((float)unit.position.posz) / 10000f, unit.position.movetype);
            }
            // 部件开火信息表
            for (int eventIndex = 0; eventIndex < unit.partfireevent_size(); eventIndex++)
            {
                proto.PartFireEvent fireEvent = unit.partfireevent(eventIndex);
                if (fireEvent == null)
                {
                    Debug.LogError("PartFireEvent is null");
                    continue;
                }
                display.ShipFire(fireEvent);
            }
        }

        for (int i = 0; i < obj.useskill_size(); i++)
        {
            proto.UseSkill skill = obj.useskill(i);
            if (skill.skillstage == Def.SkillStage.Sing && EventOnSkillSing != null)
            {
                EventOnSkillSing(skill.skillid);
            }
            else if (skill.skillstage == Def.SkillStage.Casting && EventOnSkillTrigger != null)
            {
                EventOnSkillTrigger(skill.skillid);
            }
            TeamDisplay display = GetTeamDisplay(skill.unitid);
            display.UseSkill(skill);
        }
    }
Esempio n. 3
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;
        }
    }