private static void StartAsync_Prepare(Game.StartProperties properties) { if (!_nationCodesProviderSet) { _nationCodesProviderSet = true; try { Game.NationCodeProvider = NationCodeProvider.Instance; } catch (Exception e) { Logging.Unexpected(e); } } AcSettingsHolder.Graphics.FixShadowMapBias(); if (SettingsHolder.Drive.CopyFilterToSystemForOculus && AcSettingsHolder.Video.CameraMode.Id == "OCULUS") { properties.SetAdditional(new CopyFilterToSystemForOculusHelper()); } if (SettingsHolder.Common.FixResolutionAutomatically) { Logging.Debug("Trying to fix resolution just in case…"); AcSettingsHolder.Video.EnsureResolutionIsCorrect(); } if (SettingsHolder.Drive.WeatherSpecificClouds) { properties.SetAdditional(new WeatherSpecificCloudsHelper()); } if (SettingsHolder.Drive.WeatherSpecificTyreSmoke) { properties.SetAdditional(new WeatherSpecificTyreSmokeHelper()); } if (SettingsHolder.Live.RsrEnabled && SettingsHolder.Live.RsrDisableAppAutomatically) { PrepareRaceModeRsr(properties); } if (SettingsHolder.Drive.SidekickIntegration && properties.BasicProperties?.CarId != null) { SidekickHelper.UpdateSidekickDatabase(properties.BasicProperties.CarId); } if (SettingsHolder.Drive.RaceEssentialsIntegration && properties.BasicProperties?.CarId != null) { RaceEssentialsHelper.UpdateRaceEssentialsDatabase(properties.BasicProperties.CarId, false); } properties.SetAdditional(new WeatherSpecificVideoSettingsHelper()); properties.SetAdditional(new ModeSpecificPresetsHelper()); properties.SetAdditional(new CarSpecificControlsPresetHelper()); }
private static void StartAsync_Prepare(Game.StartProperties properties) { if (!_nationCodesProviderSet) { _nationCodesProviderSet = true; try { Game.NationCodeProvider = NationCodeProvider.Instance; } catch (Exception e) { Logging.Unexpected(e); } } AcSettingsHolder.Graphics.FixShadowMapBias(); CarCustomDataHelper.Revert(); if (SettingsHolder.Drive.CheckAndFixControlsOrder) { try { AcSettingsHolder.Controls.FixControllersOrder(); } catch (Exception e) { VisualCppTool.OnException(e, null); } } if (SettingsHolder.Common.FixResolutionAutomatically) { Logging.Debug("Trying to fix resolution just in case…"); AcSettingsHolder.Video.EnsureResolutionIsCorrect(); } properties.SetAdditional(new TrackDetails()); properties.SetAdditional( new WeatherProceduralHelper(properties.ConditionProperties != null && properties.ConditionProperties.RoadTemperature == null)); properties.SetAdditional(new WeatherSpecificLightingHelper()); if (SettingsHolder.Drive.WeatherSpecificClouds) { properties.SetAdditional(new WeatherSpecificCloudsHelper()); } if (SettingsHolder.Drive.WeatherSpecificTyreSmoke) { properties.SetAdditional(new WeatherSpecificTyreSmokeHelper()); } if (File.Exists(properties.GetAdditional <CustomTrackState>()?.Filename)) { properties.SetAdditional(new CustomTrackPropertiesHelper(properties.GetAdditional <CustomTrackState>()?.Filename ?? string.Empty)); } if (SettingsHolder.Live.RsrEnabled && SettingsHolder.Live.RsrDisableAppAutomatically) { PrepareRaceModeRsr(properties); } var carId = properties.BasicProperties?.CarId; if (carId != null) { if (SettingsHolder.Drive.CamberExtravaganzaIntegration) { CamberExtravaganzaHelper.UpdateDatabase(carId); } if (SettingsHolder.Drive.SidekickIntegration) { SidekickHelper.UpdateSidekickDatabase(carId); } if (SettingsHolder.Drive.SidekickOdometerExportValues) { SidekickHelper.OdometerExport(carId); } if (SettingsHolder.Drive.RaceEssentialsIntegration) { RaceEssentialsHelper.UpdateRaceEssentialsDatabase(carId, false); } if (SettingsHolder.Drive.StereoOdometerExportValues) { StereoOdometerHelper.Export(carId); } if (PatchHelper.IsFeatureSupported(PatchHelper.FeatureNeedsOdometerValue)) { var car = CarsManager.Instance.GetById(carId); if (car != null) { properties.SetAdditional(new DrivenDistance(car.TotalDrivenDistance)); } } } properties.SetAdditional(new ModeSpecificPresetsHelper()); properties.SetAdditional(new WeatherSpecificVideoSettingsHelper()); properties.SetAdditional(new CarSpecificControlsPresetHelper()); properties.SetAdditional(new CarRaceTextures()); if (PatchHelper.GetInstalledVersion() != null) { properties.SetAdditional(new AcPatchTrackOutline()); } properties.SetAdditional(new ExtraHotkeysRaceHelper()); if (SettingsHolder.Drive.CopyFilterToSystemForOculus && (AcSettingsHolder.Video.CameraMode.Id == "OCULUS" || AcSettingsHolder.Video.CameraMode.Id == "OPENVR")) { properties.SetAdditional(new CopyFilterToSystemForOculusHelper()); } }
private static async Task <Game.Result> StartAsync(Game.StartProperties properties, bool raceMode) { AcSettingsHolder.Graphics.FixShadowMapBias(); if (SettingsHolder.Drive.CopyFilterToSystemForOculus && AcSettingsHolder.Video.CameraMode.Id == "OCULUS") { properties.SetAdditional(new CopyFilterToSystemForOculusHelper()); } if (SettingsHolder.Common.FixResolutionAutomatically) { AcSettingsHolder.Video.EnsureResolutionIsCorrect(); } if (SettingsHolder.Drive.WeatherSpecificClouds) { properties.SetAdditional(new WeatherSpecificCloudsHelper()); } if (SettingsHolder.Drive.WeatherSpecificTyreSmoke) { properties.SetAdditional(new WeatherSpecificTyreSmokeHelper()); } if (SettingsHolder.Live.RsrEnabled && SettingsHolder.Live.RsrDisableAppAutomatically) { PrepareRaceModeRsr(properties); } if (SettingsHolder.Drive.SidekickIntegration && properties.BasicProperties?.CarId != null) { SidekickHelper.UpdateSidekickDatabase(properties.BasicProperties.CarId); } properties.SetAdditional(new WeatherSpecificVideoSettingsHelper()); properties.SetAdditional(new ModeSpecificPresetsHelper()); properties.SetAdditional(new CarSpecificControlsPresetHelper()); if (raceMode) { if (properties.AssistsProperties == null) { properties.AssistsProperties = _defaultAssistsFactory?.Create(); } PrepareRaceModeImmediateStart(properties); PrepareRaceDriverName(properties); Logging.Write("Assists: " + properties.AssistsProperties?.GetDescription()); } if (_uiFactory == null) { using (ReplaysExtensionSetter.OnlyNewIfEnabled()) using (ScreenshotsConverter.OnlyNewIfEnabled()) { if (raceMode) { properties.SetAdditional(new RaceCommandExecutor(properties)); } else { properties.SetAdditional(new ReplayCommandExecutor(properties)); } return(await Game.StartAsync(AcsStarterFactory.Create(), properties, null, CancellationToken.None)); } } using (var ui = _uiFactory.Create()) { Logging.Write($"Starting game: {properties.GetDescription()}"); ui.Show(properties); CancellationTokenSource linked = null; IsInGame = true; try { Game.Result result; using (ReplaysExtensionSetter.OnlyNewIfEnabled()) using (ScreenshotsConverter.OnlyNewIfEnabled()) { if (raceMode) { properties.SetAdditional(new RaceCommandExecutor(properties)); Started?.Invoke(null, new GameStartedArgs(properties)); if (SettingsHolder.Drive.ContinueOnEscape) { properties.SetAdditional(new ContinueRaceHelper()); } } else { properties.SetAdditional(new ReplayCommandExecutor(properties)); } var cancellationToken = ui.CancellationToken; if (SettingsHolder.Drive.ImmediateCancel) { var cancelHelper = new ImmediateCancelHelper(); linked = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, cancelHelper.GetCancellationToken()); cancellationToken = linked.Token; properties.SetAdditional(cancelHelper); properties.SetKeyboardListener = true; } result = await Game.StartAsync(AcsStarterFactory.Create(), properties, new ProgressHandler(ui), cancellationToken); } Logging.Write($"Result: {result?.GetDescription() ?? @"<NULL>"}"); if (ui.CancellationToken.IsCancellationRequested) { ui.OnError(new UserCancelledException()); return(null); } if (raceMode) { if (result == null) { var whatsGoingOn = AcLogHelper.TryToDetermineWhatsGoingOn(); if (whatsGoingOn != null) { properties.SetAdditional(whatsGoingOn); } } var param = new GameEndedArgs(properties, result); Ended?.Invoke(null, param); /* TODO: should set result to null if param.Cancel is true? */ var replayHelper = new ReplayHelper(properties, result); (result == null || param.Cancel ? Cancelled : Finished)?.Invoke(null, new GameFinishedArgs(properties, result)); ui.OnResult(result, replayHelper); } else { ui.OnResult(null, null); } return(result); } catch (TaskCanceledException) { // ui.OnError(new UserCancelledException()); ui.OnResult(null, null); return(null); } catch (Exception e) { Logging.Warning(e); ui.OnError(e); return(null); } finally { linked?.Dispose(); IsInGame = false; } } }