Ejemplo n.º 1
0
            internal ViewModel(string serializedPreset, bool uiMode, CarObject carObject = null, string carSkinId = null,
                               TrackObjectBase trackObject = null, string carSetupId = null, string weatherId = null, int?time = null, bool savePreset = false)
            {
                _uiMode     = uiMode;
                _carSetupId = carSetupId;
                _weatherId  = weatherId;
                _forceTime  = time;

                _saveable = new SaveHelper <SaveableData>(KeySaveable, () => new SaveableData {
                    RealConditions             = RealConditions,
                    RealConditionsLocalWeather = RealConditionsLocalWeather,
                    RealConditionsTimezones    = RealConditionsTimezones,
                    RealConditionsManualTime   = RealConditionsManualTime,

                    Mode     = SelectedMode,
                    ModeData = SelectedModeViewModel?.ToSerializedString(),

                    CarId     = SelectedCar?.Id,
                    TrackId   = SelectedTrack?.IdWithLayout,
                    WeatherId = SelectedWeather?.Id,

                    // TODO
                    TrackPropertiesData           = TrackState.ExportToPresetData(),
                    TrackPropertiesPresetFilename = UserPresetsControl.GetCurrentFilename(TrackState.PresetableKey),

                    Temperature   = Temperature,
                    Time          = Time,
                    TimeMultipler = TimeMultipler,
                }, o => {
                    TimeMultipler = o.TimeMultipler;

                    RealConditions             = _weatherId == null && o.RealConditions;
                    RealConditionsTimezones    = o.RealConditionsTimezones ?? true;
                    RealConditionsLocalWeather = o.RealConditionsLocalWeather ?? false;
                    RealConditionsManualTime   = o.RealConditionsManualTime ?? false;

                    Temperature = o.Temperature;
                    Time        = o.Time;

                    if (RealConditions)
                    {
                        UpdateConditions();
                    }

                    try {
                        _skipLoading = o.ModeData != null;
                        if (o.Mode != null && o.Mode.OriginalString.Contains('_'))
                        {
                            SelectedMode = o.Mode;
                        }
                        if (o.ModeData != null)
                        {
                            SelectedModeViewModel?.FromSerializedString(o.ModeData);
                        }
                    } finally {
                        _skipLoading = false;
                    }

                    if (o.CarId != null)
                    {
                        SelectedCar = CarsManager.Instance.GetById(o.CarId) ?? SelectedCar;
                    }
                    if (o.TrackId != null)
                    {
                        SelectedTrack = TracksManager.Instance.GetLayoutById(o.TrackId) ?? SelectedTrack;
                    }
                    if (_weatherId != null)
                    {
                        SelectedWeather = WeatherManager.Instance.GetById(_weatherId);
                    }
                    else if (o.WeatherId != null)
                    {
                        SelectedWeather = WeatherManager.Instance.GetById(o.WeatherId) ?? SelectedWeather;
                    }

                    if (o.TrackPropertiesPresetFilename != null && File.Exists(o.TrackPropertiesPresetFilename))
                    {
                        UserPresetsControl.LoadPreset(TrackState.PresetableKey, o.TrackPropertiesPresetFilename);
                    }
                    else if (o.TrackPropertiesData != null)
                    {
                        UserPresetsControl.LoadSerializedPreset(TrackState.PresetableKey, o.TrackPropertiesData);
                    }
                    else if (o.ObsTrackPropertiesPreset != null)
                    {
                        UserPresetsControl.LoadBuiltInPreset(TrackState.PresetableKey, TrackStateViewModelBase.PresetableCategory, o.ObsTrackPropertiesPreset);
                    }
                }, () => {
                    RealConditions             = false;
                    RealConditionsTimezones    = true;
                    RealConditionsManualTime   = false;
                    RealConditionsLocalWeather = false;

                    SelectedMode    = new Uri("/Pages/Drive/QuickDrive_Race.xaml", UriKind.Relative);
                    SelectedCar     = CarsManager.Instance.GetDefault();
                    SelectedTrack   = TracksManager.Instance.GetDefault();
                    SelectedWeather = WeatherManager.Instance.GetDefault();

                    UserPresetsControl.LoadBuiltInPreset(TrackState.PresetableKey, TrackStateViewModelBase.PresetableCategory, "Green");

                    Temperature   = 12.0;
                    Time          = 12 * 60 * 60;
                    TimeMultipler = 1;
                });

                if (string.IsNullOrEmpty(serializedPreset))
                {
                    _saveable.LoadOrReset();
                }
                else
                {
                    _saveable.Reset();

                    if (savePreset)
                    {
                        _saveable.FromSerializedString(serializedPreset);
                    }
                    else
                    {
                        _saveable.FromSerializedStringWithoutSaving(serializedPreset);
                    }
                }

                if (carObject != null)
                {
                    SelectedCar = carObject;
                    // TODO: skin?
                }

                if (trackObject != null)
                {
                    SelectedTrack = trackObject;
                }

                UpdateConditions();
            }