MHRescueMissionSystem.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using KYFramework;
  2. using KYFramework.Network;
  3. using Model;
  4. using MongoDB.Bson;
  5. namespace SimulationServer;
  6. public static class MHRescueMissionSystem
  7. {
  8. /// <summary>
  9. /// 开始同步信息到客户端
  10. /// </summary>
  11. /// <param name="self"></param>
  12. public static void StartAsyncMH(this MHRescueMission self)
  13. {
  14. for (int i = 0; i < self.aircrafts.Count; i++)
  15. {
  16. if(self.aircrafts[i].SyncOver) continue;
  17. var location = FXJHGenerate.GetAllCurrentLocation(self.aircrafts[i].TurningPoints, self.SimulationTime);
  18. if (self.aircrafts[i] is AircraftMH aircraftMh && aircraftMh.FireGrids.Count > 0 )
  19. {
  20. Fire.FireGrid fireGrid = aircraftMh.FireGrids.First();
  21. // 发送火焰数据
  22. if (self.SimulationTime > fireGrid.Time)
  23. {
  24. //洒水了
  25. S2C_FireSpread fireSpread = new S2C_FireSpread();
  26. fireSpread.AircraftId = aircraftMh.AircraftId;
  27. fireSpread.FirePointId = self.FireGround.FirePointName;
  28. fireSpread.FireGrids = fireGrid.FireGrids;
  29. fireSpread.FiredGrids = fireGrid.FiredGrids;
  30. SessionComponent.Instance.Session.Send(fireSpread);
  31. aircraftMh.FireGrids.RemoveAt(0);
  32. }
  33. }
  34. // 同步信息到客户端
  35. self.SyncLocation(location.Item1, self.aircrafts[i]);
  36. if (location.Item2) // 判断飞机飞到终点
  37. {
  38. self.aircrafts[i].SyncOver = true;
  39. Log.Info(self.aircrafts[i].AircraftId + "飞机到终点");
  40. }
  41. }
  42. // 如果 aircraft.SyncOver 为 true ,从列表一处当前aircraft
  43. //self.aircrafts.RemoveAll(a => a.SyncOver);
  44. bool over = true;
  45. foreach (var aircraft in self.aircrafts)
  46. {
  47. if (aircraft.SyncOver == false)
  48. over = false;
  49. }
  50. if (over)
  51. {
  52. // 任务结束
  53. Game.EventSystem.Publish(new MHSimulationOver {Mission = self});
  54. return;
  55. }
  56. self.SimulationTime += Init.SimulationSpeed;
  57. Task.Delay(TimeSpan.FromSeconds(1f)).ContinueWith(t => self.StartAsyncMH());
  58. }
  59. public static void SyncLocation(this MHRescueMission self,CurrentLocation location,AircraftEntity aircraft)
  60. {
  61. // 同步信息到客户端
  62. if (location != null && aircraft != null)
  63. {
  64. // 同步信息到客户端
  65. S2C_TurningPointOutput s2CTurningPointOutput = new S2C_TurningPointOutput();
  66. s2CTurningPointOutput.AircraftID = aircraft.AircraftId;
  67. //s2CTurningPointOutput.TurningPointName = fly.TurningPointName;
  68. s2CTurningPointOutput.PresentMission = location.PresentMission;
  69. s2CTurningPointOutput.PresentLocation = new Point
  70. {
  71. Altitude = location.CurrentHei,
  72. Latitude = location.CurrentLat,
  73. Longitude = location.CurrentLon
  74. };
  75. s2CTurningPointOutput.PresentVelocity = location.Currentvelo;
  76. SessionComponent.Instance.Session.Send(s2CTurningPointOutput);
  77. //Log.Info($"飞机{aircraft.Name} 当前位置: {location.ToJson()}");
  78. }
  79. }
  80. }