/// <summary> /// Repositions the FSX aircraft to match the location, speed and attitude of a real aircraft. /// </summary> private void MoveAircraft() { var selectedAircraft = _View.SelectedRealAircraft; if (_View.RidingAircraft && selectedAircraft != null) { long trash1, trash2; var aircraft = _Feed == null ? null : _Feed.AircraftList.TakeSnapshot(out trash1, out trash2).Where(a => a.UniqueId == selectedAircraft.UniqueId).FirstOrDefault(); if (aircraft != null) { var speedLimit = (float)_MaximumAirspeed - 30f; var writeAircraftInformation = new WriteAircraftInformation(); writeAircraftInformation.AirspeedIndicated = aircraft.GroundSpeed > speedLimit ? speedLimit : aircraft.GroundSpeed.GetValueOrDefault(); aircraft.GroundSpeed.GetValueOrDefault(); writeAircraftInformation.Altitude = aircraft.Altitude.GetValueOrDefault(); writeAircraftInformation.Operator = aircraft.Operator; writeAircraftInformation.Registration = aircraft.Registration; writeAircraftInformation.Latitude = aircraft.Latitude.GetValueOrDefault(); writeAircraftInformation.Longitude = aircraft.Longitude.GetValueOrDefault(); writeAircraftInformation.TrueHeading = aircraft.Track.GetValueOrDefault(); writeAircraftInformation.VerticalSpeed = aircraft.VerticalRate.GetValueOrDefault(); writeAircraftInformation.Bank = ApproximateBank(_MovedAircraft, aircraft); _MovedAircraft = aircraft; _FlightSimulatorX.MoveAircraft(writeAircraftInformation); } } }
/// <summary> /// See interface docs. /// </summary> /// <param name="aircraftInformation"></param> public void MoveAircraft(WriteAircraftInformation aircraftInformation) { if (Connected && _SimConnect.IsInstalled) { _SimConnect.SetDataOnSimObject(DefinitionId.WriteAircraftInformation, (uint)SIMCONNECT_SIMOBJECT_TYPE.USER, (int)SIMCONNECT_DATA_SET_FLAG.DEFAULT, aircraftInformation); } }
public void TestInitialise() { _OriginalClassFactory = Factory.CreateChildFactory(); _SimConnect = TestUtilities.CreateMockImplementation <ISimConnectWrapper>(); _SimConnect.Setup(m => m.IsInstalled).Returns(true); _Fsx = Factory.Resolve <IFlightSimulatorX>(); _ClientEventIdMap = new Dictionary <string, Enum>(); _SimConnect.Setup(m => m.MapClientEventToSimEvent(It.IsAny <Enum>(), It.IsAny <string>())).Callback((Enum id, string name) => { _ClientEventIdMap.Add(name, id); }); _SystemEventIdMap = new Dictionary <string, Enum>(); _SimConnect.Setup(m => m.SubscribeToSystemEvent(It.IsAny <Enum>(), It.IsAny <string>())).Callback((Enum id, string name) => { _SystemEventIdMap.Add(name, id); }); _NotificationGroupMap = new Dictionary <Enum, Enum>(); _SimConnect.Setup(m => m.AddClientEventToNotificationGroup(It.IsAny <Enum>(), It.IsAny <Enum>(), false)).Callback((Enum groupId, Enum eventId, bool maskable) => { _NotificationGroupMap.Add(eventId, groupId); }); _ReadAircraftInformationDefinitionId = default(Enum); _SimConnect.Setup(m => m.RegisterDataDefineStruct <ReadAircraftInformation>(It.IsAny <Enum>())).Callback((Enum definitionId) => { _ReadAircraftInformationDefinitionId = definitionId; }); _AircraftInformationRequestId = default(Enum); _SimConnect.Setup(m => m.RequestDataOnSimObjectType(It.IsAny <Enum>(), It.IsAny <Enum>(), It.IsAny <uint>(), It.IsAny <int>())).Callback((Enum requestId, Enum definitionId, uint radius, int objectType) => { if (definitionId == _ReadAircraftInformationDefinitionId) { _AircraftInformationRequestId = requestId; } }); _WriteAircraftInformationDefinitionId = default(Enum); _SimConnect.Setup(m => m.RegisterDataDefineStruct <WriteAircraftInformation>(It.IsAny <Enum>())).Callback((Enum definitionId) => { _WriteAircraftInformationDefinitionId = definitionId; }); _ConnectionStatusChangedEvent = new EventRecorder <EventArgs>(); _FreezeStatusChangedEvent = new EventRecorder <EventArgs>(); _SlewStatusChangedEvent = new EventRecorder <EventArgs>(); _FlightSimulatorXExceptionRaisedEvent = new EventRecorder <EventArgs <FlightSimulatorXException> >(); _AircraftInformationReceivedEvent = new EventRecorder <EventArgs <ReadAircraftInformation> >(); _SlewToggledEvent = new EventRecorder <EventArgs>(); _ReadAircraftInformation = new ReadAircraftInformation(); _WriteAircraftInformation = new WriteAircraftInformation(); _Message = new Message(); }