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,
TrackPropertiesPreset = SelectedTrackPropertiesPreset.Name,
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.TrackPropertiesPreset != null) {
SelectedTrackPropertiesPreset =
Game.DefaultTrackPropertiesPresets.FirstOrDefault(x => x.Name == o.TrackPropertiesPreset) ?? SelectedTrackPropertiesPreset;
}
}, () => {
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();
SelectedTrackPropertiesPreset = Game.GetDefaultTrackPropertiesPreset();
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();
}