private static void NotifyClientThatSimIsNotRunningOnServer() { if (Settings.Default.RunAsServer) { F16CPDServer.SetSimProperty("SimName", null); F16CPDServer.SetSimProperty("SimVersion", null); F16CPDServer.SetSimProperty("F4FlightData", null); } }
private void MakeTheaterMapAvailableToClient() { if (_theaterMap == null) { return; } var theaterMap = (Image)_theaterMap; var rawBytes = Common.Imaging.Util.BytesFromBitmap(theaterMap, null, "BMP"); F16CPDServer.SetSimProperty("CurrentMapImage", rawBytes); F16CPDServer.SetSimProperty("CurrentMapWidthInFeet", _mapWidthInFeet); }
public void UpdateManagerFlightData() { GetNextMorseCodeUnit(); if (Settings.Default.RunAsClient) { PerformClientSideFlightDataUpdates(); return; } FlightData flightData = Manager.FlightData; string exePath = F4Utils.Process.Util.GetFalconExePath(); CreateSharedMemReaderIfNotExists(); F4SharedMem.FlightData fromFalcon = ReadF4SharedMem(); if (_keyFile == null) { LoadCurrentKeyFile(); } EnsureTerrainIsLoaded(); if (exePath != null && ((_sharedMemReader != null && _sharedMemReader.IsFalconRunning))) { IsSimRunning = true; if (fromFalcon == null) { fromFalcon = new F4SharedMem.FlightData(); } var hsibits = ((HsiBits)fromFalcon.hsiBits); flightData.VviOffFlag = ((hsibits & HsiBits.VVI) == HsiBits.VVI); flightData.AoaOffFlag = ((hsibits & HsiBits.AOA) == HsiBits.AOA); flightData.HsiOffFlag = ((hsibits & HsiBits.HSI_OFF) == HsiBits.HSI_OFF); flightData.AdiOffFlag = ((hsibits & HsiBits.ADI_OFF) == HsiBits.ADI_OFF); flightData.PfdOffFlag = false; UpdateCpdPowerState(flightData, fromFalcon); flightData.RadarAltimeterOffFlag = ((fromFalcon.lightBits & (int)LightBits.RadarAlt) == (int)LightBits.RadarAlt); flightData.BarometricPressure = (fromFalcon.AltCalReading / 100.00f); flightData.AltimeterUnits = (((AltBits)fromFalcon.altBits & AltBits.CalType) == AltBits.CalType) ? AltimeterUnits.Hg : AltimeterUnits.hPa; flightData.AltimeterMode = (((AltBits)fromFalcon.altBits & AltBits.PneuFlag) == AltBits.PneuFlag) ? AltimeterMode.Pneumatic : AltimeterMode.Electronic; switch (fromFalcon.navMode) { case (byte)F4SharedMem.Headers.NavModes.ILS_NAV: flightData.NavMode = NavModes.IlsNav; break; case (byte)F4SharedMem.Headers.NavModes.ILS_TACAN: flightData.NavMode = NavModes.IlsTcn; break; case (byte)F4SharedMem.Headers.NavModes.TACAN: flightData.NavMode = NavModes.Tcn; break; case (byte)F4SharedMem.Headers.NavModes.NAV: flightData.NavMode = NavModes.Nav; break; } UpdateIndicatedAltitude(flightData, fromFalcon); UpdateAltitudeAGL(flightData, fromFalcon); UpdateIndicatedAirspeed(flightData, fromFalcon); UpdateALOW(flightData, fromFalcon); flightData.TrueAirspeedInDecimalFeetPerSecond = fromFalcon.vt; flightData.MachNumber = fromFalcon.mach; flightData.GroundSpeedInDecimalFeetPerSecond = (float)Math.Sqrt((fromFalcon.xDot * fromFalcon.xDot) + (fromFalcon.yDot * fromFalcon.yDot)); flightData.MagneticHeadingInDecimalDegrees = (360 + (fromFalcon.yaw / Common.Math.Constants.RADIANS_PER_DEGREE)) % 360; UpdateVerticalVelocity(flightData, fromFalcon, hsibits); flightData.AngleOfAttackInDegrees = ((hsibits & HsiBits.AOA) == HsiBits.AOA) ? 0 : fromFalcon.alpha; flightData.AdiAuxFlag = ((hsibits & HsiBits.ADI_AUX) == HsiBits.ADI_AUX); flightData.AdiGlideslopeInvalidFlag = ((hsibits & HsiBits.ADI_GS) == HsiBits.ADI_GS); flightData.AdiLocalizerInvalidFlag = ((hsibits & HsiBits.ADI_LOC) == HsiBits.ADI_LOC); UpdateMarkerBeaconLight(flightData, fromFalcon); if (((hsibits & HsiBits.ADI_OFF) == HsiBits.ADI_OFF)) { TurnOffADI(flightData); } else { flightData.PitchAngleInDecimalDegrees = ((fromFalcon.pitch / Common.Math.Constants.RADIANS_PER_DEGREE)); flightData.RollAngleInDecimalDegrees = fromFalcon.roll / Common.Math.Constants.RADIANS_PER_DEGREE; flightData.BetaAngleInDecimalDegrees = fromFalcon.beta; flightData.GammaAngleInDecimalDegrees = fromFalcon.gamma / Common.Math.Constants.RADIANS_PER_DEGREE; flightData.WindOffsetToFlightPathMarkerInDecimalDegrees = fromFalcon.windOffset / Common.Math.Constants.RADIANS_PER_DEGREE; flightData.AdiIlsGlideslopeDeviationInDecimalDegrees = fromFalcon.AdiIlsVerPos / Common.Math.Constants.RADIANS_PER_DEGREE; flightData.AdiIlsLocalizerDeviationInDecimalDegrees = fromFalcon.AdiIlsHorPos / Common.Math.Constants.RADIANS_PER_DEGREE; UpdateHSIToFromFlagVisibilityAndADICommandBarsVisibilityBasedOnBMS4NavMode(flightData, fromFalcon); } UpdateHSIData(flightData, fromFalcon, hsibits); flightData.RateOfTurnInDecimalDegreesPerSecond = _indicatedRateOfTurnCalculator.DetermineIndicatedRateOfTurn(flightData.MagneticHeadingInDecimalDegrees); UpdateTACANChannel(flightData, fromFalcon); UpdateMapPosition(flightData, fromFalcon); flightData.LMFDImage = GetLMFDImage(); flightData.RMFDImage = GetRMFDImage(); } else //Falcon's not running { IsSimRunning = false; if (Settings.Default.ShutoffIfFalconNotRunning) { TurnOffAllInstruments(flightData); } if (_sharedMemReader != null) { Common.Util.DisposeObject(_sharedMemReader); _sharedMemReader = null; } if (_texSharedMemReader != null) { Common.Util.DisposeObject(_texSharedMemReader); _texSharedMemReader = null; } Common.Util.DisposeObject(_keyFile); Common.Util.DisposeObject(_terrainDB); _keyFile = null; _terrainDB = null; } //if running in server mode, send updated flight data to client if (Settings.Default.RunAsServer) { F16CPDServer.SetSimProperty("F4FlightData", Common.Serialization.Util.ToRawBytes(flightData)); } }