void simconnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data) { if(data.dwRequestID >= (uint)SIMCONNECT_EVENTS.EVENTID_POSITIONREPORT_FOR_AIUPDATE) HandleAIPositionReport(data.dwObjectID, (AIPositionReportStruct)data.dwData[0]); else { switch ((SIMCONNECT_EVENTS)data.dwRequestID) { case SIMCONNECT_EVENTS.EVENTID_POSITIONREPORT: var posreport = (PositionReportStruct)data.dwData[0]; var positionReportMsg = new PositionReportMessage() { TrueAltitude = posreport.truealtitude, PressureAltitude = posreport.pressurealtitude, Longitude = posreport.longitude, Latitude = posreport.latitude, Groundspeed = posreport.groundspeed, Pitch = -posreport.pitch, Bank = -posreport.bank, Heading = posreport.heading, }; broker.Publish(positionReportMsg); break; } } }
private void SendPositionReportToFSDServer(PositionReportMessage positionReportMessage, VSPCContext context) { if (context.FSDIsConnected && fsdSession.Connected) // TODO: TrueAlt + PressureAlt fsdSession.SendPDU(new PDUPilotPosition(context.Callsign, positionReportMessage.Transponder, positionReportMessage.SquawkingCharlie, positionReportMessage.Identing, NetworkRating.OBS, positionReportMessage.Latitude, positionReportMessage.Longitude, (int)Math.Round(positionReportMessage.TrueAltitude), (int)Math.Round(positionReportMessage.PressureAltitude), (int)Math.Round(positionReportMessage.Groundspeed), (int)Math.Round(positionReportMessage.Pitch), (int)Math.Round(positionReportMessage.Bank), (int)Math.Round(positionReportMessage.Heading))); }