24#if WITH_EDITORONLY_DATA
28 TArray<AActor*> MeshActors;
29 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AStaticMeshActor::StaticClass(), MeshActors);
30 for (int32 i = 0; i < MeshActors.Num(); ++i) {
32 AStaticMeshActor *StaticMeshActor = Cast<AStaticMeshActor>(MeshActors[i]);
33 if (StaticMeshActor) {
35 if (StaticMeshActor->GetName().Contains(
"Curb", ESearchCase::Type::IgnoreCase) || StaticMeshActor->GetName().Contains(
"Gutter", ESearchCase::Type::IgnoreCase)) {
37 StaticMeshActor->GetStaticMeshComponent()->bReceivesDecals =
false;
57 FString JsonConfigFile;
59 TArray<FString> FileList;
60 IFileManager::Get().FindFilesRecursive(FileList, *(FPaths::ProjectContentDir()),
61 *(FString(
"roadpainter_decals.json")),
true,
false,
false);
63 if(FFileHelper::LoadFileToString(JsonConfigFile, *(IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FileList[0]))))
65 TSharedPtr<FJsonObject> JsonParsed;
66 TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonConfigFile);
67 if(FJsonSerializer::Deserialize(JsonReader, JsonParsed))
70 auto DecalJsonArray = JsonParsed->GetArrayField(TEXT(
"decals"));
71 for(
auto &DecalJsonValue : DecalJsonArray)
73 const auto DecalJsonObject = DecalJsonValue->AsObject();
77 FString JsonMapName = DecalJsonObject->GetStringField(TEXT(
"map_name"));
78 if(JsonMapName.Equals(CurrentMapName) ==
true)
82 for (
const TPair<FString, FString>& Pair : DecalNamesMap) {
83 if (DecalJsonObject->HasField(Pair.Key) ==
true) {