diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEpisode.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEpisode.cpp index fac744162..e2dfeffb5 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEpisode.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaEpisode.cpp @@ -71,7 +71,6 @@ bool UCarlaEpisode::LoadNewEpisode(const FString &MapString, bool ResetSettings) FinalPath = IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FinalPath); if (FPaths::FileExists(FinalPath)) { - UCarlaStatics::GetGameInstance(GetWorld())->SetMapPath(FinalPath); bIsFileFound = true; FinalPath = MapString; } @@ -90,7 +89,7 @@ bool UCarlaEpisode::LoadNewEpisode(const FString &MapString, bool ResetSettings) FinalPath = TempStrArray[1]; FinalPath.ParseIntoArray(TempStrArray, TEXT("."), true); FinalPath = "/Game/" + TempStrArray[0]; - + return LoadNewEpisode(FinalPath, ResetSettings); } } diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp index b3ecd09ad..e63f69aac 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.cpp @@ -13,12 +13,10 @@ UCarlaGameInstance::UCarlaGameInstance() { CarlaSettings = CreateDefaultSubobject(TEXT("CarlaSettings")); Recorder = CreateDefaultSubobject(TEXT("Recorder")); CarlaEngine.SetRecorder(Recorder); - + check(CarlaSettings != nullptr); CarlaSettings->LoadSettings(); CarlaSettings->LogSettings(); - - SetDefaultMapPath(); } UCarlaGameInstance::~UCarlaGameInstance() = default; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h index 1fa3b9bf5..68daa2025 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameInstance.h @@ -103,40 +103,6 @@ public: return CurrentMapLayer; } - UFUNCTION(BlueprintCallable) - void SetDefaultMapPath() { - // Read the config file - FConfigFile ConfigFile = FConfigFile(); - FString configFStr = FPaths::ProjectDir(); - configFStr += "Config/DefaultEngine.ini"; - ConfigFile.Read(configFStr); - - // Depending on where we are, set the editor or game default map -#ifdef UE_EDITOR - ConfigFile.GetString(TEXT("/Script/EngineSettings.GameMapsSettings"), TEXT("EditorStartupMap"), _MapPath); -#else - ConfigFile.GetString(TEXT("/Script/EngineSettings.GameMapsSettings"), TEXT("GameDefaultMap"), _MapPath); -#endif - - // Format and convert the path to absolute - _MapPath.RemoveFromStart(TEXT("/Game/")); - _MapPath = FPaths::ProjectContentDir() + _MapPath; - _MapPath = IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*_MapPath); - _MapPath = FPaths::GetBaseFilename(_MapPath, false); - } - - UFUNCTION(BlueprintCallable) - void SetMapPath(const FString &MapPath) - { - _MapPath = MapPath; - } - - UFUNCTION(BlueprintCallable) - const FString &GetMapPath() const - { - return _MapPath; - } - private: UPROPERTY(Category = "CARLA Settings", EditAnywhere) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp index 726b46f35..a00ac01de 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp @@ -50,6 +50,13 @@ ACarlaGameModeBase::ACarlaGameModeBase(const FObjectInitializer& ObjectInitializ CarlaSettingsDelegate = CreateDefaultSubobject(TEXT("CarlaSettingsDelegate")); } +const FString ACarlaGameModeBase::GetMapPath() const +{ + UWorld* World = GetWorld(); + TSoftObjectPtr AssetPtr (World); + return AssetPtr.GetLongPackageName(); +} + void ACarlaGameModeBase::InitGame( const FString &MapName, const FString &Options, diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h index 17ee5e31d..243a7f33b 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.h @@ -48,6 +48,8 @@ public: return Map; } + const FString GetMapPath() const; + UFUNCTION(Exec, Category = "CARLA Game Mode") void DebugShowSignals(bool enable); @@ -164,7 +166,7 @@ private: bool ReadyToRegisterObjects = false; - // We keep a global uuid to allow the load/unload layer methods to be called + // We keep a global uuid to allow the load/unload layer methods to be called // in the same tick int32 LatentInfoUUID = 0; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/OpenDrive/OpenDrive.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/OpenDrive/OpenDrive.cpp index a66ec3612..ed0ac75b8 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/OpenDrive/OpenDrive.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/OpenDrive/OpenDrive.cpp @@ -6,6 +6,8 @@ #include "Carla.h" #include "Carla/OpenDrive/OpenDrive.h" +#include "Carla/Game/CarlaGameModeBase.h" +#include "GenericPlatform/GenericPlatformProcess.h" #include "Runtime/Core/Public/HAL/FileManagerGeneric.h" @@ -66,7 +68,11 @@ FString UOpenDrive::GetXODR(const UWorld *World) } #endif // WITH_EDITOR - const auto MapDir = FPaths::GetPath(UCarlaStatics::GetGameInstance(World)->GetMapPath()); + ACarlaGameModeBase* GameMode = UCarlaStatics::GetGameMode(World); + + auto RelativePath = FPaths::GetPath(GameMode->GetMapPath()); + RelativePath.RemoveFromStart("/Game/"); + auto MapDir = FPaths::ProjectContentDir() + RelativePath; const auto FolderDir = MapDir + "/OpenDrive/"; const auto FileName = MapDir.EndsWith(MapName) ? "*" : MapName; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp index 644e726b1..585c3185b 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Server/CarlaServer.cpp @@ -341,8 +341,9 @@ void FCarlaServer::FPimpl::BindActions() BIND_SYNC(get_map_info) << [this]() -> R { REQUIRE_CARLA_EPISODE(); + ACarlaGameModeBase* GameMode = UCarlaStatics::GetGameMode(Episode->GetWorld()); const auto &SpawnPoints = Episode->GetRecommendedSpawnPoints(); - FString FullMapPath = FPaths::GetPath(UCarlaStatics::GetGameInstance(Episode->GetWorld())->GetMapPath()); + FString FullMapPath = FPaths::GetPath(GameMode->GetMapPath()); FString MapDir = FullMapPath.RightChop(FullMapPath.Find("Content/", ESearchCase::CaseSensitive) + 8); MapDir += "/" + Episode->GetMapName(); return cr::MapInfo{ @@ -353,7 +354,7 @@ void FCarlaServer::FPimpl::BindActions() BIND_SYNC(get_map_data) << [this]() -> R { REQUIRE_CARLA_EPISODE(); - return cr::FromFString(UOpenDrive::GetXODR(Episode->GetWorld())); + return cr::FromLongFString(UOpenDrive::GetXODR(Episode->GetWorld())); }; BIND_SYNC(get_navigation_mesh) << [this]() -> R> @@ -376,7 +377,8 @@ void FCarlaServer::FPimpl::BindActions() } // Get the map's folder absolute path and check if it's in its own folder - const auto mapDir = FPaths::GetPath(UCarlaStatics::GetGameInstance(Episode->GetWorld())->GetMapPath()); + ACarlaGameModeBase* GameMode = UCarlaStatics::GetGameMode(Episode->GetWorld()); + const auto mapDir = FPaths::GetPath(GameMode->GetMapPath()); const auto folderDir = mapDir + "/" + folder.c_str(); const auto fileName = mapDir.EndsWith(Episode->GetMapName()) ? "*" : Episode->GetMapName();