10#include "Misc/FileHelper.h"
12#include "GenericPlatform/GenericPlatformProcess.h"
14#include "Runtime/Core/Public/HAL/FileManagerGeneric.h"
15#include "Misc/FileHelper.h"
19 FString MapName = InMapName;
24 FString CorrectedMapName = MapName;
25 constexpr auto PIEPrefix = TEXT(
"UEDPIE_0_");
26 CorrectedMapName.RemoveFromStart(PIEPrefix);
27 MapName = CorrectedMapName;
32 MapName += TEXT(
".xodr");
35 const FString DefaultFilePath =
36 FPaths::ProjectContentDir() +
37 TEXT(
"Carla/Maps/OpenDrive/") +
41 auto &FileManager = IFileManager::Get();
44 if (FileManager.FileExists(*DefaultFilePath))
47 return DefaultFilePath;
51 TArray<FString> FilesFound;
53 FileManager.FindFilesRecursive(
55 *FPaths::ProjectContentDir(),
62 return FilesFound.Num() > 0 ? FilesFound[0u] : FString{};
69 auto MapName =
World->GetMapName();
74 FString CorrectedMapName = MapName;
75 constexpr auto PIEPrefix = TEXT(
"UEDPIE_0_");
76 CorrectedMapName.RemoveFromStart(PIEPrefix);
77 MapName = CorrectedMapName;
84 const auto FolderDir = MapDir +
"/OpenDrive/";
85 const auto FileName = MapDir.EndsWith(MapName) ?
"*" : MapName;
88 TArray<FString> Files;
90 IFileManager::Get().FindFilesRecursive(Files, *FolderDir, *FString(FileName +
".xodr"),
true,
false,
false);
98 UE_LOG(LogTemp, Error, TEXT(
"Failed to find OpenDrive file for map '%s'"), *MapName);
101 else if (FFileHelper::LoadFileToString(Content, *Files[0]))
104 UE_LOG(LogTemp, Log, TEXT(
"Loaded OpenDrive file '%s'"), *Files[0]);
110 UE_LOG(LogTemp, Error, TEXT(
"Failed to load OpenDrive file '%s'"), *Files[0]);
126 if (FilePath.IsEmpty())
129 UE_LOG(LogTemp, Error, TEXT(
"Failed to find OpenDrive file for map '%s'"), *MapName);
132 else if (FFileHelper::LoadFileToString(Content, *FilePath))
135 UE_LOG(LogTemp, Log, TEXT(
"Loaded OpenDrive file '%s'"), *FilePath);
141 UE_LOG(LogTemp, Error, TEXT(
"Failed to load OpenDrive file '%s'"), *FilePath);
154 FString CorrectedMapName = MapName;
155 constexpr auto PIEPrefix = TEXT(
"UEDPIE_0_");
156 CorrectedMapName.RemoveFromStart(PIEPrefix);
157 MapName = CorrectedMapName;
161 FString FileName = XODRPath.EndsWith(MapName) ?
"*" : MapName;
162 FString FolderDir = XODRPath;
163 FolderDir.RemoveFromEnd(MapName +
".xodr");
166 TArray<FString> Files;
167 IFileManager::Get().FindFilesRecursive(Files, *FolderDir, *FString(FileName +
".xodr"),
true,
false,
false);
173 UE_LOG(LogTemp, Error, TEXT(
"Failed to find OpenDrive file for map '%s'"), *MapName);
175 else if (FFileHelper::LoadFileToString(Content, *Files[0]))
177 UE_LOG(LogTemp, Log, TEXT(
"Loaded OpenDrive file '%s'"), *Files[0]);
186 auto XODRContent =
LoadXODR(MapName);
187 if (!XODRContent.IsEmpty())
189 Map = NewObject<UOpenDriveMap>();
190 Map->Load(XODRContent);
197 UWorld *
World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
198 return World !=
nullptr ?
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld * World
const FString GetFullMapPath() const
地图类的前向声明,用于在LaneInvasionSensor类中可能的引用。
static ACarlaGameModeBase * GetGameMode(const UObject *WorldContextObject)
将 CARLA OpenDrive API 公开给蓝图的辅助类。
static UOpenDriveMap * LoadCurrentOpenDriveMap(const UObject *WorldContextObject)
뵱ǰصӳOpenDriveMapҲ뵱ǰӳƥXODRnullptr
static FString FindPathToXODRFile(const FString &InMapName)
static FString GetXODR(const UWorld *World)
MapNameOpenDrive XMLҲļؿա
static FString LoadXODR(const FString &MapName)
static UOpenDriveMap * LoadOpenDriveMap(const FString &MapName)
MapNameOpenDriveMapҲͬMapNameODRnullptr
static FString GetXODRByPath(FString XODRPath, FString MapName)
MapNameOpenDrive XMLҲļؿա