public static void OnFightFrameInfo(proto.S2CFightFrameInfo msg) { if (EventOnFightFrameInfo != null) { EventOnFightFrameInfo(msg); } }
/// <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); } }
// 战斗核心循环 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; } }