Merge 79555a7c5d
into 85420544db
This commit is contained in:
commit
2478083e46
Binary file not shown.
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env python
|
||||
import unreal
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
|
||||
"""Generic function for running a commandlet with its arguments."""
|
||||
ue4_path = os.environ["UE5_ROOT"]
|
||||
uproject_path = unreal.Paths.project_dir() + ("CarlaUE4.uproject")
|
||||
run = "-run=%s" % ("SetProperPositionForWorldPartitionCommandlet")
|
||||
|
||||
print("Before any Commandlet:")
|
||||
|
||||
argparser = argparse.ArgumentParser()
|
||||
|
||||
argparser.add_argument(
|
||||
'-s', '--paramstring',
|
||||
metavar='S',
|
||||
default='',
|
||||
type=str,
|
||||
help='String to put as arguments')
|
||||
args = argparser.parse_args()
|
||||
|
||||
arguments = args.paramstring.split()
|
||||
|
||||
if os.name == "nt":
|
||||
sys_name = "Win64"
|
||||
editor_path = "%s/Engine/Binaries/%s/UnrealEditor" % (ue4_path, sys_name)
|
||||
command = [editor_path, uproject_path, run]
|
||||
command = command + arguments
|
||||
print("Commandlet:", command)
|
||||
print("Arguments:", arguments)
|
||||
subprocess.check_call(command, shell=True)
|
||||
elif os.name == "posix":
|
||||
sys_name = "Linux"
|
||||
editor_path = "%s/Engine/Binaries/%s/UnrealEditor" % (ue4_path, sys_name)
|
||||
full_command = editor_path + " " + uproject_path + " " + run + " " + arguments
|
||||
print("Commandlet:", full_command)
|
||||
print("Arguments:", arguments)
|
||||
subprocess.call([full_command], shell=True)
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
// Copyright (c) 2024 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 "Commandlet/SetProperPositionForWorldPartitionCommandlet.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#if WITH_EDITOR
|
||||
#include "FileHelpers.h"
|
||||
#endif
|
||||
#include "UObject/ConstructorHelpers.h"
|
||||
#include "EditorLevelLibrary.h"
|
||||
#include "MapGen/LargeMapManager.h"
|
||||
|
||||
|
||||
|
||||
DEFINE_LOG_CATEGORY(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet);
|
||||
|
||||
|
||||
USetProperPositionForWorldPartitionCommandlet::USetProperPositionForWorldPartitionCommandlet()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
USetProperPositionForWorldPartitionCommandlet::USetProperPositionForWorldPartitionCommandlet(const FObjectInitializer& Initializer)
|
||||
: Super(Initializer)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#if WITH_EDITORONLY_DATA
|
||||
|
||||
int32 USetProperPositionForWorldPartitionCommandlet::Main(const FString &Params)
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Log, TEXT("USetProperPositionForWorldPartition::Main Arguments %s"), *Params);
|
||||
TArray<FString> Tokens;
|
||||
TArray<FString> Switches;
|
||||
TMap<FString,FString> ParamsMap;
|
||||
|
||||
ParseCommandLine(*Params, Tokens, Switches, ParamsMap );
|
||||
|
||||
FString BaseLevelName = ParamsMap["BaseLevelName"];
|
||||
FIntVector CurrentTilesInXY = FIntVector(FCString::Atof(*ParamsMap["CTileX"]), FCString::Atof(*ParamsMap["CTileY"]), 0);
|
||||
UEditorLevelLibrary::LoadLevel(*BaseLevelName);
|
||||
|
||||
AActor* QueryActor = UGameplayStatics::GetActorOfClass( GEditor->GetEditorWorldContext().World(), ALargeMapManager::StaticClass());
|
||||
if (QueryActor != nullptr) {
|
||||
ALargeMapManager* LmManager = Cast<ALargeMapManager>(QueryActor);
|
||||
|
||||
const FIntVector NumTilesInXY = LmManager->GetNumTilesInXY();
|
||||
const float TileSize = LmManager->GetTileSize();
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Warning, TEXT("NumTilesInXY is %s"), *(NumTilesInXY.ToString()));
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Warning, TEXT("TileSize is %f"), (TileSize));
|
||||
|
||||
UEditorLevelLibrary::SaveCurrentLevel();
|
||||
|
||||
UEditorLevelLibrary::LoadLevel(*BaseLevelName);
|
||||
ProcessTile(FIntVector(CurrentTilesInXY.X, CurrentTilesInXY.Y, 0), TileSize);
|
||||
UEditorLevelLibrary::SaveCurrentLevel();
|
||||
}
|
||||
else {
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Error, TEXT("Largemapmanager not found "));
|
||||
}
|
||||
|
||||
//UEditorLoadingAndSavingUtils::SaveDirtyPackages(true, true);
|
||||
UEditorLevelLibrary::SaveCurrentLevel();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void USetProperPositionForWorldPartitionCommandlet::ProcessTile(const FIntVector CurrentTilesInXY, const float TileSize)
|
||||
{
|
||||
AActor* QueryActor = UGameplayStatics::GetActorOfClass( GEditor->GetEditorWorldContext().World(), ALargeMapManager::StaticClass());
|
||||
if (QueryActor != nullptr)
|
||||
{
|
||||
ALargeMapManager* LmManager = Cast<ALargeMapManager>(QueryActor);
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Warning, TEXT("Current Tile is %s"), *(CurrentTilesInXY.ToString()));
|
||||
const FCarlaMapTile& CarlaTile = LmManager->GetCarlaMapTile(CurrentTilesInXY);
|
||||
|
||||
UE_LOG(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Warning, TEXT("Tile Name is %s"), *(CarlaTile.Name));
|
||||
UEditorLevelLibrary::LoadLevel(CarlaTile.Name);
|
||||
|
||||
const FVector MinPosition = FVector(CurrentTilesInXY.X * TileSize, CurrentTilesInXY.Y * -TileSize, 0.0f);
|
||||
|
||||
TArray<AActor*> FoundActors;
|
||||
UGameplayStatics::GetAllActorsOfClass(GEditor->GetEditorWorldContext().World(), AActor::StaticClass(), FoundActors);
|
||||
for (AActor* CA : FoundActors)
|
||||
{
|
||||
CA->AddActorWorldOffset(MinPosition, false, nullptr, ETeleportType::ResetPhysics);
|
||||
}
|
||||
|
||||
UEditorLevelLibrary::SaveCurrentLevel();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,44 @@
|
|||
// Copyright (c) 2024 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>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Runtime/Engine/Classes/Engine/ObjectLibrary.h"
|
||||
#include "Commandlets/Commandlet.h"
|
||||
|
||||
#include <compiler/disable-ue4-macros.h>
|
||||
|
||||
#include <compiler/enable-ue4-macros.h>
|
||||
|
||||
#include "OpenDriveToMap.h"
|
||||
|
||||
#include "SetProperPositionForWorldPartitionCommandlet.generated.h"
|
||||
|
||||
// Each commandlet should generate only 1 Tile
|
||||
|
||||
DECLARE_LOG_CATEGORY_EXTERN(LogCarlaToolsMapSetProperPositionForWorldPartitionCommandlet, Log, All);
|
||||
|
||||
|
||||
UCLASS()
|
||||
class CARLATOOLS_API USetProperPositionForWorldPartitionCommandlet
|
||||
: public UCommandlet
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
/// Default constructor.
|
||||
USetProperPositionForWorldPartitionCommandlet();
|
||||
USetProperPositionForWorldPartitionCommandlet(const FObjectInitializer &);
|
||||
|
||||
#if WITH_EDITORONLY_DATA
|
||||
|
||||
virtual int32 Main(const FString &Params) override;
|
||||
|
||||
void ProcessTile(const FIntVector CurrentTilesInXY, const float TileSize);
|
||||
|
||||
#endif // WITH_EDITORONLY_DATA
|
||||
};
|
Loading…
Reference in New Issue