123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using KYFramework;
- using KYFramework.Network;
- using Model;
- using SimulationServer.Utils;
- using Define = SimulationServer.Utils.Define;
- namespace SimulationServer;
- public class AircraftZS : AircraftEntity
- {
- public string NextMissionId;
- public MissionEndPoint missionEndPoint = new MissionEndPoint();
- public int LandingPersonnel;
- public MHRescueMission mhRescueMission;
- public int 单次救援人数 = 80;
- public int 观察盘旋圈数 = 3;
- public int landingPoint = 0;
- public List<Model.AirRoute> airRoutes = new List<Model.AirRoute>();
- public ZSJYTask taskContent;
- public TaskParameter taskParameter;
- public bool IsOver;
- public bool Success;
- public override void End()
- {
- TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
- }
- public override void Reset()
- {
- base.Reset();
- IsOver = false;
- Success = false;
- TotalTime = 0;
- }
- public override void Start()
- {
- FlightPlanEditor.missionpoint.MissionPointLatitude = FlightPlanEditor.targetpoint[0].TargetPointLatitude;
- FlightPlanEditor.missionpoint.MissionPointLongitude = FlightPlanEditor.targetpoint[0].TargetPointLongitude;
- FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.targetpoint[0].TargetPointHeight;
-
- int count = 0;
- foreach (var item in taskContent.ZSJYParameters)
- {
-
-
- if (item.AircraftId == FlightPlanEditor.aircraftparameter.Id)
- {
- double a = (double)taskContent.missionInformation.TaskEndConditions.person_number_Rescue;
- double b = (double)item.RescuePersonnel;
- count = (int)Math.Ceiling(a / b);
-
- }
- }
- for (int j = 0; j < count; j++)
- {
- FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);
- missionEndPoint.MissionEndPointLatitude = FlightPlanEditor.targetpoint[0].TargetPointLatitude;
- missionEndPoint.MissionEndPointLongitude = FlightPlanEditor.targetpoint[0].TargetPointLongitude;
- missionEndPoint.MissionEndPointHeight = FlightPlanEditor.targetpoint[0].TargetPointHeight;
- airRoutes.Clear();
- List<double> list = GenerateCircleTrajectory(FlightPlanEditor.targetpoint[0].TargetPointLatitude, FlightPlanEditor.targetpoint[0].TargetPointLongitude, 1, 360);
-
- Model.AirRoute airRoute = new Model.AirRoute();
- for (int i = 0; i < list.Count; i++)
- {
- if (i % 2 == 0)
- {
-
- airRoute = new Model.AirRoute();
- airRoute.AirRouteLongitude = list[i];
- }
- else
- {
-
- airRoute.AirRouteLatitude = list[i];
- airRoutes.Add(airRoute);
- }
- }
- for (int i = 0; i < taskParameter.TurnsNumber; i++)
- {
- FXJHGenerate.ZhaoShuiJiuYuan(airRoutes, ref TurningPoints);
- }
- FXJHGenerate.ZhaoShuiJiuYuan1(airRoutes, ref TurningPoints);
- FXJHGenerate.FromMissionToEnd(FlightPlanEditor, missionEndPoint, ref TurningPoints);
- }
-
-
- FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
- for (int i = 0; i < TurningPoints.Count; i++)
- {
- TotalTime += TurningPoints[i].SegmentFlightTime;
-
- }
- Console.WriteLine("TotalTime:" + TotalTime);
- IsOver = true;
-
- End();
- }
-
-
- public static List<double> GenerateCircleTrajectory(double centerLat, double centerLon, double radiusKm, int numPoints)
- {
- var points = new List<double>();
- double earthRadius = 6371.0;
- for (int i = 0; i < numPoints; i++)
- {
- double angle = 2 * Math.PI * i / numPoints;
-
- double offsetLat = radiusKm / earthRadius;
- double offsetLon = offsetLat / Math.Cos(ToRadians(centerLat));
-
- double newLat = centerLat + ToDegrees(offsetLat * Math.Cos(angle));
- double newLon = centerLon + ToDegrees(offsetLon * Math.Sin(angle));
-
- points.Add(newLon);
- points.Add(newLat);
- }
- return points;
- }
-
- static double ToDegrees(double radians)
- {
- return radians * 180.0 / Math.PI;
- }
-
- static double ToRadians(double degrees)
- {
- return degrees * Math.PI / 180.0;
- }
-
-
-
-
-
-
-
-
-
-
-
-
- public override void Update(double time)
- {
- }
- }
- [ObjectSystem]
- public class AircraftZSAwakeSystem : AwakeSystem<AircraftZS, FlightPlanEditor>
- {
- public override void Awake(AircraftZS self, FlightPlanEditor flightPlanEditor)
- {
- self.FlightPlanEditor = flightPlanEditor;
- self.Awake();
-
- }
- }
|