async Task ILoadableContent.LoadAsync(CancellationToken cancellationToken) { _object = await ReplaysManager.Instance.GetByIdAsync(_id); if (_object?.TrackId != null) { var trackObject = await TracksManager.Instance.GetByIdAsync(_object.TrackId); if (_object.TrackConfiguration != null) { _trackObject = trackObject?.GetLayoutByLayoutId(_object.TrackConfiguration) ?? trackObject; } else { _trackObject = trackObject; } } if (_object?.CarId != null) { _carObject = await CarsManager.Instance.GetByIdAsync(_object.CarId); _carSkinObject = _carObject == null ? null : (_object.CarSkinId != null ? await _carObject.SkinsManager.GetByIdAsync(_object.CarSkinId) : null) ?? _carObject.SelectedSkin; } if (_object?.WeatherId != null) { _weather = await WeatherManager.Instance.GetByIdAsync(_object.WeatherId); } }
private static async Task UpdateAsyncInner(TrackObjectBase track) { if (!File.Exists(track.MapImage)) { ModernDialog.ShowMessage("Map not found"); return; } try { using (WaitingDialog.Create("Saving…")) { var maps = track.MainTrackObject.MultiLayouts?.Select(x => x.MapImage).ToArray() ?? new[] { track.MapImage }; await Task.Run(() => { using (var renderer = new TrackOutlineRenderer(maps, track.MapImage, track.PreviewImage) { LoadPreview = false }) { renderer.Initialize(); renderer.Width = CommonAcConsts.TrackOutlineWidth; renderer.Height = CommonAcConsts.TrackOutlineHeight; TrackOutlineRendererTools.LoadSettings(track, renderer); using (var holder = FileUtils.RecycleOriginal(track.OutlineImage)) { renderer.Shot(holder.Filename); } } }); } } catch (Exception e) { NonfatalError.Notify("Can’t update outline", e); } }
public TrackOutlineRendererWrapper(TrackObjectBase track, TrackOutlineRenderer renderer) : base(renderer, track.Name, CommonAcConsts.TrackOutlineWidth, CommonAcConsts.TrackOutlineHeight) { _helper = new AttachedHelper(this, new TrackOutlineRendererTools(track, renderer), 244, -80, false); Form.FormBorderStyle = FormBorderStyle.FixedToolWindow; Form.MaximizeBox = false; }
public static async Task Run(TrackObjectBase track) { var modelsFilename = track.ModelsFilename; Logging.Debug(modelsFilename); string kn5Filename = null; if (!File.Exists(modelsFilename)) { modelsFilename = null; kn5Filename = Path.Combine(track.Location, track.Id + ".kn5"); if (!File.Exists(kn5Filename)) { ModernDialog.ShowMessage("Model not found"); return; } } TrackMapPreparationRenderer renderer = null; try { using (WaitingDialog.Create("Loading model…")) { renderer = modelsFilename == null ? new TrackMapPreparationRenderer(await Task.Run(() => Kn5.FromFile(kn5Filename))) : new TrackMapPreparationRenderer(await Task.Run(() => TrackComplexModelDescription.CreateLoaded(modelsFilename))); } var wrapper = new TrackMapRendererWrapper(track, renderer); wrapper.Form.Icon = AppIconService.GetAppIcon(); wrapper.Run(); } finally { renderer?.Dispose(); } }
public bool setCurrentTrack(string trackId, string layoutId = null) { return(Sync(() => { _track = TracksManager.Instance.GetLayoutById(trackId, layoutId); return _track != null; })); }
protected override Task <Tuple <string, bool> > GetStateAsync() { var match = Regex.Match(Id, @"^(.+)_(\d+)$"); if (!match.Success) { return(Task.FromResult <Tuple <string, bool> >(null)); } var postfix = $" #{match.Groups[2].Value}"; var baseTrackId = match.Groups[1].Value; if (baseTrackId.Contains(@"__")) { var trackId = baseTrackId.Replace(@"__", @"/"); Track = TracksManager.Instance.GetLayoutById(trackId); if (Track != null) { return(Task.FromResult(Tuple.Create(Track.LayoutName + postfix, true))); } } var track = TracksManager.Instance.GetById(baseTrackId); Track = track; return(Task.FromResult(track != null ? Tuple.Create(track.DisplayNameWithoutCount + postfix, true) : null)); }
public ViewModel(TrackObjectBase track, TrackMapPreparationRenderer renderer) { Track = track; Renderer = renderer; Renderer.SetFilter(this); Surfaces = SurfaceDescription.LoadAll(Path.Combine(track.DataDirectory, "surfaces.ini")).ToList(); _save = new SaveHelper <SaveableData>(".TrackMapRendererTools:" + track.Id, () => new SaveableData { Filter = Filter, IgnoreCase = FilterIgnoreCase, UseFxaa = UseFxaa, Scale = Scale, Margin = Margin, AiLaneWidth = AiLaneWidth, AiLaneActualWidth = AiLaneActualWidth, }, o => { if (o.Filter == null) { UpdateFilter(Surfaces.Where(x => x.ShouldBeVisibleOnMap())); } else { Filter = o.Filter; } FilterIgnoreCase = o.IgnoreCase; UseFxaa = o.UseFxaa; Scale = o.Scale; Margin = o.Margin; AiLaneWidth = o.AiLaneWidth; AiLaneActualWidth = o.AiLaneActualWidth; }, storage: CacheStorage.Storage); _save.Initialize(); }
void ILoadableContent.Load() { _object = ReplaysManager.Instance.GetById(_id); if (_object?.TrackId != null) { var trackObject = TracksManager.Instance.GetById(_object.TrackId); if (_object.TrackConfiguration != null) { _trackObject = trackObject?.GetLayoutByLayoutId(_object.TrackConfiguration) ?? trackObject; } else { _trackObject = trackObject; } } if (_object?.CarId != null) { _carObject = CarsManager.Instance.GetById(_object.CarId); _carSkinObject = _carObject == null ? null : (_object.CarSkinId != null ? _carObject.SkinsManager.GetById(_object.CarSkinId) : null) ?? _carObject.SelectedSkin; } if (_object?.WeatherId != null) { _weather = WeatherManager.Instance.GetById(_object.WeatherId); } }
public void Show(ServerEntry server) { ServerEntry = server; if (!ReferenceEquals(DataContext, this)) { DataContext = this; InitializeComponent(); Show(); Owner = Application.Current?.MainWindow; _timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1), IsEnabled = true }; _timer.Tick += OnTick; } Car = server.SelectedCarEntry?.CarObject; Track = server.Track; try { _ignoreSkinChange = true; Skin = server.GetSelectedCarSkin(); } finally { _ignoreSkinChange = false; } Buttons = new[] { CreateExtraStyledDialogButton("Go.Button", AppStrings.Common_Go, () => ServerEntry?.JoinCommand.Execute(ServerEntry.ActualJoin), () => Ready), CancelButton }; }
public void Apply(TrackOutlineRenderer renderer, TrackObjectBase track) { var value = ExtraLayoutIds; renderer.SetActiveMaps(value == null ? new string[0] : track.MainTrackObject.MultiLayouts?.Where(x => value.ArrayContains(x.LayoutId)).Select(x => x.MapImage).ToArray()); }
public static void LoadSettings(TrackObjectBase track, TrackOutlineRenderer renderer) { SaveHelper <PerLayoutSaveable> .LoadOrReset(".TrackOutlineRendererTools:l:" + track.IdWithLayout, CacheStorage.Storage).Apply(renderer, track); SaveHelper <PerTrackSaveable> .LoadOrReset(".TrackOutlineRendererTools:" + track.Id, CacheStorage.Storage).Apply(renderer); SaveHelper <GlobalSaveable> .LoadOrReset(".TrackOutlineRendererTools", ValuesStorage.Storage).Apply(renderer); }
public ViewModel([NotNull] ServerPresetObject acObject, TrackObjectBase track, CarObject[] cars) : base(acObject) { SelectedObject.PropertyChanged += AcObject_PropertyChanged; Track = track; Cars = new BetterObservableCollection <CarObject>(cars); Cars.CollectionChanged += Cars_CollectionChanged; }
public void OnTrackVersionChanged(TrackObjectBase track) { if (!_trackVersionIsWrong || !PortExtended.HasValue || Track != track) { return; } CheckPostUpdate(); }
/// <summary> /// Gets description for ReadMe.txt inside shared archive. /// </summary> /// <returns></returns> private static string GetDescription([CanBeNull] CarObject car, [CanBeNull] TrackObjectBase track) { return(car == null ? (track == null ? ToolsStrings.Common_AcReplay : $"{ToolsStrings.Common_AcReplay} ({track.Name})") : (track == null ? $"{ToolsStrings.Common_AcReplay} ({car.DisplayName})" : $"{ToolsStrings.Common_AcReplay} ({car.DisplayName}, {track.Name})")); }
public void OnTrackVersionChanged(TrackObjectBase track) { if (!_trackVersionIsWrong || !HasDetails || Track != track) { return; } CheckPostUpdate(); }
public static Task Run(TrackObjectBase track, bool aiLane) { try { return(RunInner(track, aiLane)); } catch (Exception e) { VisualCppTool.OnException(e, "Can’t update map"); return(Task.Delay(0)); } }
public static Task UpdateAsync(TrackObjectBase track) { try { return(UpdateAsyncInner(track)); } catch (Exception e) { VisualCppTool.OnException(e, "Can’t update outline"); return(Task.Delay(0)); } }
public static Task <GeoTagsEntry> TryToLocateAsync([NotNull] TrackObjectBase track) { var data = DataProvider.Instance.TrackParams[track.MainTrackObject.Id]; if (data.ContainsKey(@"LATITUDE") && data.ContainsKey(@"LONGITUDE")) { return(Task.FromResult(new GeoTagsEntry(data.GetDouble("LATITUDE", 0d), data.GetDouble("LONGITUDE", 0d)))); } return(track.Country != null?TryToLocateAsync(track.Country, track.City) : Task.FromResult <GeoTagsEntry>(null)); }
private void UpdateSelected(TrackObjectBase track) { var item = _countriesInformationList.FirstOrDefault(x => x.DisplayName == track.Country); if (item == null) { return; } CountriesListBox.SelectedItem = item; CountriesListBox.ScrollIntoView(item); }
void ILoadableContent.Load() { _object = ServerPresetsManager.Instance.GetById(_id); if (_object == null) { return; } _track = _object.TrackId == null ? null : TracksManager.Instance.GetLayoutById(_object.TrackId, _object.TrackLayoutId); _cars = _object.CarIds.Select(x => CarsManager.Instance.GetById(x)).ToArray(); }
private async Task <Tuple <string, string> > LoadData() { Car = null; CarSkin = null; Track = null; string uri; if (EventId.Contains(@"/")) { var splitted = EventId.Split('/'); uri = $"http://www.radiators-champ.com/RSRLiveTiming/index.php?page=rank&track={splitted[0]}&car={splitted[1]}"; } else { uri = $"http://www.radiators-champ.com/RSRLiveTiming/index.php?page=event_rank&eventId={EventId}"; } string page; using (var client = new WebClient { Headers = { [HttpRequestHeader.UserAgent] = InternalUtils.GetKunosUserAgent(), [@"X-User-Agent"] = CmApiProvider.UserAgent } }) { page = await client.DownloadStringTaskAsync(uri); } var carIdMatch = Regex.Match(page, @"\bdata-car=""([\w-]+)"""); var trackIdMatch = Regex.Match(page, @"\bdata-track=""([\w-]+)"""); var trackLayoutIdMatch = Regex.Match(page, @"\bdata-track-layout=""([\w-]+)"""); if (!carIdMatch.Success || !trackIdMatch.Success) { return(null); } var carId = carIdMatch.Groups[1].Value; var trackId = trackIdMatch.Groups[1].Value; var trackLayoutId = trackLayoutIdMatch.Success ? trackLayoutIdMatch.Groups[1].Value : null; if (trackLayoutId == trackId) { trackLayoutId = null; // TODO: temporary fix } Car = CarsManager.Instance.GetById(carId); CarSkin = Car?.SelectedSkin; Track = TracksManager.Instance.GetLayoutById(trackId, trackLayoutId); return(new Tuple <string, string>(carId, trackId)); }
public SelectTrackDialog([NotNull] TrackObjectBase selectedTrackConfiguration) { _instance = new WeakReference <SelectTrackDialog>(this); DataContext = new ViewModel(selectedTrackConfiguration); InitializeComponent(); Model.PropertyChanged += Model_PropertyChanged; BackgroundImage0.Source = UriToCachedImageConverter.Convert(Model.CurrentPreviewImage); Buttons = new[] { OkButton, CancelButton }; }
public MapParams(TrackObjectBase track) { Track = track; var config = new IniFile(Path.Combine(track.DataDirectory, "map.ini")); _offsetX = config["PARAMETERS"].GetDouble("X_OFFSET", 0d); _offsetY = config["PARAMETERS"].GetDouble("Z_OFFSET", 0d); var scaleFactor = config["PARAMETERS"].GetDouble("SCALE_FACTOR", 1d); _configSizeX = config["PARAMETERS"].GetDouble("WIDTH", 1e3) * scaleFactor; _configSizeY = config["PARAMETERS"].GetDouble("HEIGHT", 1e3) * scaleFactor; }
async Task ILoadableContent.LoadAsync(CancellationToken cancellationToken) { _object = await ServerPresetsManager.Instance.GetByIdAsync(_id); if (_object == null) { return; } _track = _object.TrackId == null ? null : await TracksManager.Instance.GetLayoutByIdAsync(_object.TrackId, _object.TrackLayoutId); _cars = (await _object.CarIds.Select(x => CarsManager.Instance.GetByIdAsync(x)).WhenAll(4)).ToArray(); }
public ViewModel(TrackObjectBase track, TrackMapPreparationRenderer renderer) { Track = track; Renderer = renderer; Renderer.SetFilter(this); Surfaces = SurfaceDescription.LoadAll(Path.Combine(track.DataDirectory, "surfaces.ini")).ToList(); UpdateFilter(Surfaces.Where(x => x.ShouldBeVisibleOnMap())); _useFxaa = Renderer.UseFxaa; _margin = Renderer.Margin; _scale = Renderer.Scale; }
private static async Task RunInner(TrackObjectBase track, bool aiLane) { string modelsFilename = null, kn5Filename = null, aiLaneFilename = null; if (!aiLane) { modelsFilename = track.ModelsFilename; if (!File.Exists(modelsFilename)) { modelsFilename = null; kn5Filename = Path.Combine(track.Location, track.Id + ".kn5"); if (!File.Exists(kn5Filename)) { ModernDialog.ShowMessage("Model not found"); return; } } } else { aiLaneFilename = track.AiLaneFastFilename; if (!File.Exists(aiLaneFilename)) { ModernDialog.ShowMessage("AI lane not found"); return; } } await PrepareAsync(); TrackMapPreparationRenderer renderer = null; try { using (WaitingDialog.Create("Loading model…")) { renderer = aiLaneFilename == null ? modelsFilename == null ? new TrackMapPreparationRenderer(await Task.Run(() => Kn5.FromFile(kn5Filename))) : new TrackMapPreparationRenderer(await Task.Run(() => TrackComplexModelDescription.CreateLoaded(modelsFilename))) : new TrackMapPreparationRenderer(await Task.Run(() => AiSpline.FromFile(aiLaneFilename))); } var wrapper = new TrackMapRendererWrapper(track, renderer); wrapper.Form.Icon = AppIconService.GetAppIcon(); wrapper.Run(); } catch (Exception e) { NonfatalError.Notify("Can’t update map", e); } finally { renderer?.Dispose(); } }
public static void Show(TrackObjectBase track) { // TODO if (!InternalUtils.IsAllRight) { return; } if (Application.Current?.MainWindow is MainWindow) { _selectNextTrack = track.Id; _selectNextTrackLayoutId = track.LayoutId; NavigateToPage(); } }
public ViewModel(TrackObjectBase track) { Track = track; if (track.GeoTags != null) { Latitude = track.GeoTags.Latitude; Longitude = track.GeoTags.Longitude; } else { Latitude = null; Longitude = null; } }
public SelectTrackDialog([NotNull] TrackObjectBase selectedTrackConfiguration) { _instance = new WeakReference <SelectTrackDialog>(this); DataContext = new ViewModel(selectedTrackConfiguration); InputBindings.AddRange(new[] { new InputBinding(ToggleFavouriteCommand, new KeyGesture(Key.B, ModifierKeys.Control)) }); InitializeComponent(); Model.PropertyChanged += Model_PropertyChanged; BackgroundImage0.Source = UriToCachedImageConverter.Convert(Model.CurrentPreviewImage); Buttons = new[] { OkButton, CancelButton }; }
public static TrackObjectBase Show([CanBeNull] TrackObjectBase track) { if (track == null) { track = TracksManager.Instance.GetDefault(); if (track == null) { return(null); } } var dialog = new SelectTrackDialog(track); dialog.ShowDialog(); return(!dialog.IsResultOk || dialog.Model.SelectedTrackConfiguration == null ? track : dialog.Model.SelectedTrackConfiguration); }