in Ambit/Source/Ambit/Mode/ScenarioDefinition.cpp [43:158]
void FScenarioDefinition::DeserializeFromJson(TSharedPtr<FJsonObject> JsonObject)
{
FString Warnings;
if (JsonObject->HasField(JsonConstants::KVersionKey))
{
const FString Version = JsonObject->GetStringField(JsonConstants::KVersionKey);
// TODO: Support a list of approved/backwards compatible versions?
if (!Version.Equals(KCurrentVersion))
{
const FString InvalidVersion = FString::Printf(
TEXT("The version in the file (%s) is not supported"), *Version);
FMenuHelpers::LogErrorAndPopup(InvalidVersion);
return;
}
}
if (JsonObject->HasField(JsonConstants::KScenarioNameKey))
{
this->ScenarioName = JsonObject->GetStringField(JsonConstants::KScenarioNameKey);
}
if (JsonObject->HasField(JsonConstants::KTimeOfDayKey))
{
FString TempMessage;
const float IncomingTime = JsonObject->GetNumberField(JsonConstants::KTimeOfDayKey);
this->TimeOfDay = FMathHelpers::ClampBoundary(IncomingTime, 0.f, 23.99999f, TEXT("time of day"), TempMessage);
if (!TempMessage.IsEmpty())
{
Warnings.Append(TempMessage + LINE_TERMINATOR);
}
}
if (JsonObject->HasField(JsonConstants::KWeatherParametersKey))
{
FJsonObjectConverter::JsonObjectToUStruct(
JsonObject->GetObjectField(JsonConstants::KWeatherParametersKey).ToSharedRef(),
FAmbitWeatherParameters::StaticStruct(), &this->AmbitWeatherParameters, 0, 0);
FString CloudinessTempMessage;
this->AmbitWeatherParameters.Cloudiness = FMathHelpers::ClampBoundary(
this->AmbitWeatherParameters.Cloudiness, 0.f, 100.f, TEXT("cloudiness"), CloudinessTempMessage);
if (!CloudinessTempMessage.IsEmpty())
{
Warnings.Append(CloudinessTempMessage + LINE_TERMINATOR);
}
FString PrecipitationTempMessage;
this->AmbitWeatherParameters.Precipitation = FMathHelpers::ClampBoundary(
this->AmbitWeatherParameters.Precipitation, 0.f, 100.f, TEXT("precipitation"), PrecipitationTempMessage);
if (!PrecipitationTempMessage.IsEmpty())
{
Warnings.Append(PrecipitationTempMessage + LINE_TERMINATOR);
}
FString PuddlesTempMessage;
this->AmbitWeatherParameters.Puddles = FMathHelpers::ClampBoundary(
this->AmbitWeatherParameters.Puddles, 0.f, 100.f, TEXT("puddles"), PuddlesTempMessage);
if (!PuddlesTempMessage.IsEmpty())
{
Warnings.Append(PuddlesTempMessage + LINE_TERMINATOR);
}
FString WetnessTempMessage;
this->AmbitWeatherParameters.Wetness = FMathHelpers::ClampBoundary(
this->AmbitWeatherParameters.Wetness, 0.f, 100.f, TEXT("cloudiness"), WetnessTempMessage);
if (!WetnessTempMessage.IsEmpty())
{
Warnings.Append(WetnessTempMessage + LINE_TERMINATOR);
}
FString FogDensityTempMessage;
this->AmbitWeatherParameters.FogDensity = FMathHelpers::ClampBoundary(
this->AmbitWeatherParameters.FogDensity, 0.f, 100.f, TEXT("fog density"), FogDensityTempMessage);
if (!FogDensityTempMessage.IsEmpty())
{
Warnings.Append(FogDensityTempMessage + LINE_TERMINATOR);
}
}
if (JsonObject->HasField(JsonConstants::KPedestrianDensityKey))
{
FString TempMessage;
const float IncomingDensity = JsonObject->GetNumberField(JsonConstants::KPedestrianDensityKey);
this->PedestrianDensity = FMathHelpers::ClampBoundary(IncomingDensity, 0.f, 1.f, TEXT("pedestrian density"),
TempMessage);
if (!TempMessage.IsEmpty())
{
Warnings.Append(TempMessage + LINE_TERMINATOR);
}
}
if (JsonObject->HasField(JsonConstants::KTrafficDensityKey))
{
FString TempMessage;
const float IncomingDensity = JsonObject->GetNumberField(JsonConstants::KTrafficDensityKey);
this->VehicleDensity = FMathHelpers::ClampBoundary(IncomingDensity, 0.f, 1.f, TEXT("vehicle density"),
TempMessage);
if (!TempMessage.IsEmpty())
{
Warnings.Append(TempMessage + LINE_TERMINATOR);
}
}
if (!Warnings.IsEmpty())
{
FMenuHelpers::LogErrorAndPopup(Warnings);
}
}