public bool Update(Packets.Packet_64_11_FormationData FormationData) { if (TimeStamp < FormationData.TimeStamp && ID == FormationData.SenderID) { if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0) { return(false); } Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0]; Prev_TimeStamp = TimeStamp; TimeStamp = FormationData.TimeStamp; Prev_PosX = PosX; Prev_PosY = PosY; Prev_PosZ = PosZ; PosX = TargetVehicle.PosX + FormationData.PosX; PosY = TargetVehicle.PosY + FormationData.PosY; PosZ = TargetVehicle.PosZ + FormationData.PosZ; HdgX = FormationData.HdgX; HdgY = FormationData.HdgY; HdgZ = FormationData.HdgZ; V_HdgX = FormationData.V_HdgX; V_HdgY = FormationData.V_HdgY; V_HdgZ = FormationData.V_HdgZ; LastUpdated = DateTime.Now; return(true); } return(false); }
private static bool YSFHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket) { #region Prepare Flight Data //Prepare FlightData Packet //Check if the server has the vehicle specified. //Deny old flightdatapackets. Packets.Packet_11_FlightData FlightData = new Packets.Packet_11_FlightData(InPacket); Vehicle SenderVehicle; lock (Vehicles.List) { if (Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).Count() <= 0) { Debug.WriteLine("Missing Aircraft ID: " + FlightData.ID + " for client " + ThisClient.Username); return(false); } SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FlightData.ID).ToArray()[0]; } #endregion #region Update... #region ValidateFlightData if (SenderVehicle.TimeStamp > FlightData.TimeStamp) { Debug.WriteLine("OLD DATA:" + SenderVehicle.TimeStamp + " > " + FlightData.TimeStamp); return(false); } Debug.WriteLine("NEW DATA:" + SenderVehicle.TimeStamp + " <= " + FlightData.TimeStamp); float Difference = FlightData.TimeStamp - SenderVehicle.TimeStamp; OpenYS_Link.Stats.total_flight_seconds += Difference; SenderVehicle.Update(FlightData); #endregion #endregion #region FormationData #region Validate Vehicle TargetVehicle; lock (Vehicles.List) { FlightData = new Packets.Packet_11_FlightData(InPacket); if (!ThisClient.YSFServer.OpenYSSupport) { goto HandleFlightData; } if (ThisClient.FormationTarget == 0) { goto HandleFlightData; } if (Vehicles.List.ToArray().Where(x => x.ID == ThisClient.FormationTarget).Count() <= 0) { goto HandleFlightData; } if (!FlightData.Anim_Light_Land) { goto HandleFlightData; } TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == ThisClient.FormationTarget).ToArray()[0]; double Distance = Math.Sqrt(Math.Pow(FlightData.PosX - TargetVehicle.PosX, 2) + Math.Pow(FlightData.PosY - TargetVehicle.PosY, 2) + Math.Pow(FlightData.PosZ - TargetVehicle.PosZ, 2)); double Velocity = Math.Sqrt(Math.Pow(FlightData.V_PosX, 2) + Math.Pow(FlightData.V_PosY, 2) + Math.Pow(FlightData.V_PosZ, 2)); //if (Distance > Velocity / 25) goto HandleFlightData; //V / 10 / 2.5 eg: 1000cm/s -> 100m/s -> 40m. (at roughly 200 knots) or 80m at 400knots, 160m at 800 knots... } #endregion #region BuildFormationData Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(5); FormationData.TimeStamp = FlightData.TimeStamp; FormationData.SenderID = FlightData.ID; FormationData.TargetID = TargetVehicle.ID; FormationData.Version = 5; FormationData._Anim_Flags = FlightData._Anim_Flags; FormationData.PosX = FlightData.PosX - TargetVehicle.PosX; FormationData.PosY = FlightData.PosY - TargetVehicle.PosY; FormationData.PosZ = FlightData.PosZ - TargetVehicle.PosZ; FormationData.HdgX = FlightData.HdgX; FormationData.HdgY = FlightData.HdgY; FormationData.HdgZ = FlightData.HdgZ; FormationData.V_HdgX = (short)FlightData.V_HdgX; FormationData.V_HdgY = (short)FlightData.V_HdgY; FormationData.V_HdgZ = (short)FlightData.V_HdgZ; //Need to add the below to the formation data packet... FormationData.Anim_Aileron = FlightData.Anim_Aileron; FormationData.Anim_Boards = FlightData.Anim_Boards; FormationData.Anim_BombBay = FlightData.Anim_BombBay; FormationData.Anim_Brake = FlightData.Anim_Brake; FormationData.Anim_Elevator = FlightData.Anim_Elevator; FormationData.Anim_Flaps = FlightData.Anim_Flaps; FormationData.Anim_Gear = FlightData.Anim_Gear; FormationData.Anim_Nozzle = FlightData.Anim_Nozzle; FormationData.Anim_Reverse = FlightData.Anim_Reverse; FormationData.Anim_Rudder = FlightData.Anim_Rudder; FormationData.Anim_Throttle = FlightData.Anim_Throttle; FormationData.Anim_Trim = FlightData.Anim_Trim; FormationData.Anim_VGW = FlightData.Anim_VGW; #endregion FormationData.PosX = 0; FormationData.PosY = 0; FormationData.PosZ = 0; //ThisClient.YSFServer.SendPacket(FormationData.ToCustomPacket()); //ThisClient.LastFlightDataPacket = FlightData; //Send FormationData to the server. return(true); #endregion #region NormalFlightData HandleFlightData: //ThisClient.YSFServer.SendPacket(FlightData); return(true); #endregion }
public static bool OYSHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket) { #region PrepareFormationData Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(InPacket); if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0) { return(false); } if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).Count() <= 0) { return(false); } Vehicle SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).ToArray()[0]; Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0]; #endregion #region ValidateFlightData if (SenderVehicle.TimeStamp > FormationData.TimeStamp) { return(false); } SenderVehicle.Update(FormationData); #endregion #region UpdateSendersVehicle SenderVehicle.V_PosX = TargetVehicle.V_PosX; SenderVehicle.V_PosY = TargetVehicle.V_PosY; SenderVehicle.V_PosZ = TargetVehicle.V_PosZ; #endregion #region BasicFlightData Packets.Packet_11_FlightData FlightDataOut = new Packets.Packet_11_FlightData(5); float TDelta = (float)(DateTime.Now - TargetVehicle.LastUpdated).TotalSeconds; FlightDataOut.ID = FormationData.SenderID; FlightDataOut.TimeStamp = FormationData.TimeStamp; FlightDataOut.PosX = TargetVehicle.PosX + FormationData.PosX + (TDelta * (TargetVehicle.V_PosX / 10)); FlightDataOut.PosY = TargetVehicle.PosY + FormationData.PosY + (TDelta * (TargetVehicle.V_PosY / 10)); FlightDataOut.PosZ = TargetVehicle.PosZ + FormationData.PosZ + (TDelta * (TargetVehicle.V_PosZ / 10)); FlightDataOut.V_PosX = TargetVehicle.V_PosX; FlightDataOut.V_PosY = TargetVehicle.V_PosY; FlightDataOut.V_PosZ = TargetVehicle.V_PosZ; FlightDataOut.HdgX = FormationData.HdgX; FlightDataOut.HdgY = FormationData.HdgY; FlightDataOut.HdgZ = FormationData.HdgZ; FlightDataOut.V_HdgX = (short)FormationData.V_HdgX; FlightDataOut.V_HdgY = (short)FormationData.V_HdgY; FlightDataOut.V_HdgZ = (short)FormationData.V_HdgZ; FlightDataOut.Weight_Fuel = 100; FlightDataOut.Weight_Payload = 100; FlightDataOut.Weight_SmokeOil = 100; #endregion #region Animation FlightDataOut.Anim_Aileron = FormationData.Anim_Aileron; FlightDataOut.Anim_Boards = FormationData.Anim_Boards; FlightDataOut.Anim_BombBay = FormationData.Anim_BombBay; FlightDataOut.Anim_Brake = FormationData.Anim_Brake; FlightDataOut.Anim_Elevator = FormationData.Anim_Elevator; FlightDataOut.Anim_Flaps = FormationData.Anim_Flaps; FlightDataOut.Anim_Gear = FormationData.Anim_Gear; FlightDataOut.Anim_Nozzle = FormationData.Anim_Nozzle; FlightDataOut.Anim_Reverse = FormationData.Anim_Reverse; FlightDataOut.Anim_Rudder = FormationData.Anim_Rudder; FlightDataOut.Anim_Throttle = FormationData.Anim_Throttle; FlightDataOut.Anim_Trim = FormationData.Anim_Trim; FlightDataOut.Anim_VGW = FormationData.Anim_VGW; FlightDataOut._Anim_Flags = FormationData._Anim_Flags; #endregion #region SendFlightData ThisClient.SendPacket(FlightDataOut); #endregion return(true); }
public static bool OYSHandle_11_FlightData(Client ThisClient, Packets.GenericPacket InPacket) { Console.WriteLine("Got Formation Data."); #region PrepareFormationData Packets.Packet_64_11_FormationData FormationData = new Packets.Packet_64_11_FormationData(InPacket); if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).Count() <= 0) { Console.WriteLine("Target N/A"); return(false); } if (Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).Count() <= 0) { Console.WriteLine("Sender N/A"); return(false); } Vehicle SenderVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.SenderID).ToArray()[0]; Vehicle TargetVehicle = Vehicles.List.ToArray().Where(x => x.ID == FormationData.TargetID).ToArray()[0]; #endregion #region ValidateFlightData if (SenderVehicle.TimeStamp > FormationData.TimeStamp) { Console.WriteLine("OLD FORM"); return(false); } SenderVehicle.Update(FormationData); #endregion #region UpdateSendersVehicle SenderVehicle.V_PosX = TargetVehicle.V_PosX; SenderVehicle.V_PosY = TargetVehicle.V_PosY; SenderVehicle.V_PosZ = TargetVehicle.V_PosZ; #endregion #region BasicFlightData Packets.Packet_11_FlightData FlightDataOut = new Packets.Packet_11_FlightData(3); float TDelta = (float)(DateTime.Now - TargetVehicle.LastUpdated).TotalSeconds; FlightDataOut.ID = FormationData.SenderID; FlightDataOut.PosX = TargetVehicle.PosX + FormationData.PosX + (TDelta * (TargetVehicle.V_PosX / 10)); FlightDataOut.PosY = TargetVehicle.PosY + FormationData.PosY + (TDelta * (TargetVehicle.V_PosY / 10)); FlightDataOut.PosZ = TargetVehicle.PosZ + FormationData.PosZ + (TDelta * (TargetVehicle.V_PosZ / 10)); FlightDataOut.V_PosX = TargetVehicle.V_PosX; FlightDataOut.V_PosY = TargetVehicle.V_PosY; FlightDataOut.V_PosZ = TargetVehicle.V_PosZ; FlightDataOut.HdgX = FormationData.HdgX; FlightDataOut.HdgY = FormationData.HdgY; FlightDataOut.HdgZ = FormationData.HdgZ; FlightDataOut.V_HdgX = FormationData.V_HdgX; FlightDataOut.V_HdgY = FormationData.V_HdgY; FlightDataOut.V_HdgZ = FormationData.V_HdgZ; FlightDataOut.Weight_Fuel = 100; FlightDataOut.Weight_Payload = 100; FlightDataOut.Weight_SmokeOil = 100; #endregion #region Animation FlightDataOut.Anim_Aileron = FormationData.Anim_Aileron; FlightDataOut.Anim_Boards = FormationData.Anim_Boards; FlightDataOut.Anim_BombBay = FormationData.Anim_BombBay; FlightDataOut.Anim_Brake = FormationData.Anim_Brake; FlightDataOut.Anim_Elevator = FormationData.Anim_Elevator; FlightDataOut.Anim_Flaps = FormationData.Anim_Flaps; FlightDataOut.Anim_Gear = FormationData.Anim_Gear; FlightDataOut.Anim_Nozzle = FormationData.Anim_Nozzle; FlightDataOut.Anim_Reverse = FormationData.Anim_Reverse; FlightDataOut.Anim_Rudder = FormationData.Anim_Rudder; FlightDataOut.Anim_Throttle = FormationData.Anim_Throttle; FlightDataOut.Anim_Trim = FormationData.Anim_Trim; FlightDataOut.Anim_VGW = FormationData.Anim_VGW; FlightDataOut._Anim_Flags = FormationData._Anim_Flags; #endregion #region Send FlightData FlightDataOut.TimeStamp = (float)(DateTime.Now - OpenYS.TimeStarted).TotalSeconds; FormationData.TimeStamp = (float)(DateTime.Now - OpenYS.TimeStarted).TotalSeconds; foreach (Client OtherClient in Clients.AllClients.ToArray()) { if (OtherClient.Vehicle != null) { if (FlightDataOut.ID == OtherClient.Vehicle.ID) { continue; } //Console.WriteLine("-Did nothing."); } if (OtherClient.YSFClient.OpenYSSupport) { ThisClient.SendPacket(FormationData.ToCustomPacket()); //OtherClient.SendPacket(FlightDataOut); } if (!OtherClient.YSFClient.OpenYSSupport) { ThisClient.SendPacket(FlightDataOut); } } #endregion return(true); }