Refactor map related methods
This commit is contained in:
parent
7f5a39bbb5
commit
6a943333a1
|
@ -15,6 +15,7 @@
|
|||
#include "EngineUtils.h"
|
||||
#include "Engine/StaticMeshActor.h"
|
||||
#include "GameFramework/SpectatorPawn.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
static FString UCarlaEpisode_GetTrafficSignId(ETrafficSignState State)
|
||||
{
|
||||
|
@ -40,10 +41,64 @@ static FString UCarlaEpisode_GetTrafficSignId(ETrafficSignState State)
|
|||
|
||||
UCarlaEpisode::UCarlaEpisode(const FObjectInitializer &ObjectInitializer)
|
||||
: Super(ObjectInitializer),
|
||||
Id(URandomEngine::GenerateRandomId()) {
|
||||
Id(URandomEngine::GenerateRandomId())
|
||||
{
|
||||
ActorDispatcher = CreateDefaultSubobject<UActorDispatcher>(TEXT("ActorDispatcher"));
|
||||
}
|
||||
|
||||
bool UCarlaEpisode::LoadNewEpisode(const FString &MapString)
|
||||
{
|
||||
FString FinalPath = MapString.IsEmpty() ? GetMapName() : MapString;
|
||||
bool bIsFileFound = false;
|
||||
if (MapString.StartsWith("/Game"))
|
||||
{
|
||||
// Full path
|
||||
if (!MapString.EndsWith(".umap"))
|
||||
{
|
||||
FinalPath += ".umap";
|
||||
}
|
||||
// Some conversions...
|
||||
FinalPath = FinalPath.Replace(TEXT("/Game/"), *FPaths::ProjectContentDir());
|
||||
if (FPaths::FileExists(IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FinalPath)))
|
||||
{
|
||||
bIsFileFound = true;
|
||||
FinalPath = MapString;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (MapString.Contains("/"))
|
||||
{
|
||||
bIsFileFound = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Find the full path under Carla
|
||||
TArray<FString> TempStrArray, PathList;
|
||||
if (!MapString.EndsWith(".umap"))
|
||||
{
|
||||
FinalPath += ".umap";
|
||||
}
|
||||
IFileManager::Get().FindFilesRecursive(PathList, *FPaths::ProjectContentDir(), *FinalPath, true, false, false);
|
||||
if (PathList.Num() > 0)
|
||||
{
|
||||
FinalPath = PathList[0];
|
||||
FinalPath.ParseIntoArray(TempStrArray, TEXT("Content/"), true);
|
||||
FinalPath = TempStrArray[1];
|
||||
FinalPath.ParseIntoArray(TempStrArray, TEXT("."), true);
|
||||
FinalPath = "/Game/" + TempStrArray[0];
|
||||
bIsFileFound = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bIsFileFound)
|
||||
{
|
||||
UE_LOG(LogCarla, Warning, TEXT("Loading a new episode: %s"), *FinalPath);
|
||||
UGameplayStatics::OpenLevel(GetWorld(), *FinalPath, true);
|
||||
}
|
||||
return bIsFileFound;
|
||||
}
|
||||
|
||||
void UCarlaEpisode::ApplySettings(const FEpisodeSettings &Settings)
|
||||
{
|
||||
FCarlaStaticDelegates::OnEpisodeSettingsChange.Broadcast(Settings);
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "Carla/Weather/Weather.h"
|
||||
|
||||
#include "GameFramework/Pawn.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
|
||||
#include <compiler/disable-ue4-macros.h>
|
||||
#include <carla/geom/BoundingBox.h>
|
||||
|
@ -41,6 +40,18 @@ public:
|
|||
|
||||
UCarlaEpisode(const FObjectInitializer &ObjectInitializer);
|
||||
|
||||
// ===========================================================================
|
||||
// -- Load a new episode -----------------------------------------------------
|
||||
// ===========================================================================
|
||||
|
||||
public:
|
||||
|
||||
/// Load a new map and start a new episode.
|
||||
///
|
||||
/// If @a MapString is empty, the current map is reloaded.
|
||||
UFUNCTION(BlueprintCallable)
|
||||
bool LoadNewEpisode(const FString &MapString);
|
||||
|
||||
// ===========================================================================
|
||||
// -- Episode settings -------------------------------------------------------
|
||||
// ===========================================================================
|
||||
|
@ -221,50 +232,6 @@ public:
|
|||
return ActorDispatcher->DestroyActor(Actor);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// -- World handling methods -------------------------------------------------
|
||||
// ===========================================================================
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
bool LoadMap(const FString& MapString, const UObject* WorldContext) {
|
||||
bool bIsFileFound = false;
|
||||
FString FinalPath = MapString;
|
||||
|
||||
|
||||
if (MapString.StartsWith("/Game")) {
|
||||
//Full path
|
||||
if(!MapString.EndsWith(".umap")) {
|
||||
FinalPath += ".umap";
|
||||
}
|
||||
//Some conversions...
|
||||
FinalPath = FinalPath.Replace(TEXT("/Game/"), *FPaths::ProjectContentDir());
|
||||
if(FPaths::FileExists(IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*FinalPath))) {
|
||||
bIsFileFound = true;
|
||||
FinalPath = MapString;
|
||||
}
|
||||
} else {
|
||||
if(MapString.Contains("/")) bIsFileFound = false;
|
||||
else {
|
||||
//Find the full path under Carla
|
||||
TArray<FString> TempStrArray, PathList;
|
||||
if(!MapString.EndsWith(".umap")) {
|
||||
FinalPath += ".umap";
|
||||
}
|
||||
IFileManager::Get().FindFilesRecursive(PathList, *FPaths::ProjectContentDir(), *FinalPath, true, false, false);
|
||||
if(PathList.Num()>0) {
|
||||
FinalPath = PathList[0];
|
||||
FinalPath.ParseIntoArray(TempStrArray, TEXT("Content/"), true);
|
||||
FinalPath = TempStrArray[1];
|
||||
FinalPath.ParseIntoArray(TempStrArray, TEXT("."), true);
|
||||
FinalPath = "/Game/" + TempStrArray[0];
|
||||
bIsFileFound = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(bIsFileFound) UGameplayStatics::OpenLevel(WorldContext, *FinalPath, true);
|
||||
return bIsFileFound;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
// -- Other methods ----------------------------------------------------------
|
||||
// ===========================================================================
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
|
||||
// de Barcelona (UAB).
|
||||
//
|
||||
// This work is licensed under the terms of the MIT license.
|
||||
// For a copy, see <https://opensource.org/licenses/MIT>.
|
||||
|
||||
#include "Carla.h"
|
||||
#include "Carla/Game/CarlaStatics.h"
|
||||
|
||||
TArray<FString> UCarlaStatics::GetAllMapNames()
|
||||
{
|
||||
TArray<FString> TmpStrList, MapNameList;
|
||||
IFileManager::Get().FindFilesRecursive(MapNameList, *FPaths::ProjectContentDir(), TEXT("*.umap"), true, false, false);
|
||||
for (int i = 0; i < MapNameList.Num(); i++) {
|
||||
MapNameList[i].ParseIntoArray(TmpStrList, TEXT("Content/"), true);
|
||||
MapNameList[i] = TmpStrList[1];
|
||||
MapNameList[i] = MapNameList[i].Replace(TEXT(".umap"), TEXT(""));
|
||||
MapNameList[i] = "/Game/" + MapNameList[i];
|
||||
}
|
||||
return MapNameList;
|
||||
}
|
|
@ -39,19 +39,8 @@ public:
|
|||
UFUNCTION(BlueprintPure, Category="CARLA", meta=(WorldContext="WorldContextObject"))
|
||||
static UCarlaSettings *GetCarlaSettings(const UObject *WorldContextObject);
|
||||
|
||||
UFUNCTION(BlueprintPure, Category="CARLA", meta=(WorldContext="WorldContextObject"))
|
||||
static FORCEINLINE TArray<FString> GetAllMapNames()
|
||||
{
|
||||
TArray<FString> TmpStrList, MapNameList;
|
||||
IFileManager::Get().FindFilesRecursive(MapNameList, *FPaths::ProjectContentDir(), TEXT("*.umap"), true, false, false);
|
||||
for (int i = 0; i < MapNameList.Num(); i++) {
|
||||
MapNameList[i].ParseIntoArray(TmpStrList, TEXT("Content/"), true);
|
||||
MapNameList[i] = TmpStrList[1];
|
||||
MapNameList[i] = MapNameList[i].Replace(TEXT(".umap"), TEXT(""));
|
||||
MapNameList[i] = "/Game/" + MapNameList[i];
|
||||
}
|
||||
return MapNameList;
|
||||
}
|
||||
UFUNCTION(BlueprintPure, Category="CARLA")
|
||||
static TArray<FString> GetAllMapNames();
|
||||
};
|
||||
|
||||
// =============================================================================
|
||||
|
@ -79,4 +68,3 @@ inline UCarlaSettings *UCarlaStatics::GetCarlaSettings(const UObject *WorldConte
|
|||
auto GameInstance = GetGameInstance(WorldContext);
|
||||
return GameInstance != nullptr ? GameInstance->GetCARLASettings() : nullptr;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue