Modified pipeline, now make import prepares maps for cooking

This commit is contained in:
Manish 2019-07-09 21:19:17 +02:00 committed by Néstor Subirón
parent 621120ad80
commit edc27f7add
4 changed files with 77 additions and 51 deletions

View File

@ -31,7 +31,7 @@ UPrepareAssetsForCookingCommandlet::UPrepareAssetsForCookingCommandlet()
}
#if WITH_EDITORONLY_DATA
FString UPrepareAssetsForCookingCommandlet::ParseParams(const FString &InParams) const
FPackageParams UPrepareAssetsForCookingCommandlet::ParseParams(const FString &InParams) const
{
TArray<FString> Tokens;
TArray<FString> Params;
@ -39,10 +39,10 @@ FString UPrepareAssetsForCookingCommandlet::ParseParams(const FString &InParams)
ParseCommandLine(*InParams, Tokens, Params);
FString PackageName;
FParse::Value(*InParams, TEXT("PackageName="), PackageName);
return PackageName;
FPackageParams PackageParams;
FParse::Value(*InParams, TEXT("PackageName="), PackageParams.Name);
FParse::Bool(*InParams, TEXT("OnlyPrepareMaps="), PackageParams.bOnlyPrepareMaps);
return PackageParams;
}
void UPrepareAssetsForCookingCommandlet::LoadWorld(FAssetData &AssetData)
@ -307,68 +307,78 @@ bool UPrepareAssetsForCookingCommandlet::SavePackage(const FString &PackagePath,
int32 UPrepareAssetsForCookingCommandlet::Main(const FString &Params)
{
FString PackageName = ParseParams(Params);
FPackageParams PackageParams = ParseParams(Params);
// Get Props and Maps Path
FAssetsPaths AssetsPaths = GetAssetsPathFromPackage(PackageName);
FAssetsPaths AssetsPaths = GetAssetsPathFromPackage(PackageParams.Name);
// Load World
FAssetData AssetData;
LoadWorld(AssetData);
World = CastChecked<UWorld>(AssetData.GetAsset());
FString MapPathData;
for (auto Map : AssetsPaths.MapsPaths)
if (PackageParams.bOnlyPrepareMaps)
{
FString RoadsPath = TEXT("/Game/") + PackageName + TEXT("/Static/RoadNode/") + Map.Name;
FString MarkingLinePath = TEXT("/Game/") + PackageName + TEXT("/Static/MarkingNode/") + Map.Name;
FString TerrainPath = TEXT("/Game/") + PackageName + TEXT("/Static/TerrainNode/") + Map.Name;
for (auto Map : AssetsPaths.MapsPaths)
{
FString RoadsPath = TEXT("/Game/") + PackageParams.Name + TEXT("/Static/RoadNode/") + Map.Name;
FString MarkingLinePath = TEXT("/Game/") + PackageParams.Name + TEXT("/Static/MarkingNode/") + Map.Name;
FString TerrainPath = TEXT("/Game/") + PackageParams.Name + TEXT("/Static/TerrainNode/") + Map.Name;
TArray<FString> DataPath = {RoadsPath, MarkingLinePath, TerrainPath};
TArray<FString> DataPath = {RoadsPath, MarkingLinePath, TerrainPath};
// Add Meshes to inside the loaded World
TArray<AStaticMeshActor *> SpawnedActors = SpawnMeshesToWorld(DataPath, Map.bUseCarlaMapMaterials);
// Add Meshes to inside the loaded World
TArray<AStaticMeshActor *> SpawnedActors = SpawnMeshesToWorld(DataPath, Map.bUseCarlaMapMaterials);
// Save the World in specified path
SaveWorld(AssetData, PackageName, Map.Path, Map.Name);
// Save the World in specified path
SaveWorld(AssetData, PackageParams.Name, Map.Path, Map.Name);
// Remove spawned actors from world to keep equal as BaseMap
DestroySpawnedActorsInWorld(SpawnedActors);
MapPathData.Append(Map.Path + TEXT("/") + Map.Name + TEXT("+"));
}
if (AssetsPaths.PropsPaths.Num() > 0)
{
FString MapName("PropsMap");
FString WorldDestPath = TEXT("/Game/") + PackageName +
TEXT("/Maps/") + MapName;
MapPathData.Append(WorldDestPath + TEXT("/") + MapName);
// Add props in a single Base Map
TArray<AStaticMeshActor *> SpawnedActors = SpawnMeshesToWorld(AssetsPaths.PropsPaths, false, true);
SaveWorld(AssetData, PackageName, WorldDestPath, MapName);
DestroySpawnedActorsInWorld(SpawnedActors);
MapObjectLibrary->ClearLoaded();
// Remove spawned actors from world to keep equal as BaseMap
DestroySpawnedActorsInWorld(SpawnedActors);
}
}
else
{
if (MapPathData.Len() >= 0)
FString MapPathData;
for (auto Map : AssetsPaths.MapsPaths)
{
MapPathData.RemoveFromEnd(TEXT("+"));
MapPathData.Append(Map.Path + TEXT("/") + Map.Name + TEXT("+"));
}
}
// Save Map Path File for further use
FString SaveDirectory = FPaths::ProjectContentDir();
FString FileName = FString("MapPaths.txt");
SaveStringTextToFile(SaveDirectory, FileName, MapPathData, true);
FileName = FString("PackagePath.txt");
FString PackageJsonFilePath = GetFirstPackagePath(PackageName);
SaveStringTextToFile(SaveDirectory, FileName, PackageJsonFilePath, true);
if (AssetsPaths.PropsPaths.Num() > 0)
{
FString MapName("PropsMap");
FString WorldDestPath = TEXT("/Game/") + PackageParams.Name +
TEXT("/Maps/") + MapName;
MapPathData.Append(WorldDestPath + TEXT("/") + MapName);
// Add props in a single Base Map
TArray<AStaticMeshActor *> SpawnedActors = SpawnMeshesToWorld(AssetsPaths.PropsPaths, false, true);
SaveWorld(AssetData, PackageParams.Name, WorldDestPath, MapName);
DestroySpawnedActorsInWorld(SpawnedActors);
MapObjectLibrary->ClearLoaded();
}
else
{
if (MapPathData.Len() >= 0)
{
MapPathData.RemoveFromEnd(TEXT("+"));
}
}
// Save Map Path File for further use
FString SaveDirectory = FPaths::ProjectContentDir();
FString FileName = FString("MapPaths.txt");
SaveStringTextToFile(SaveDirectory, FileName, MapPathData, true);
FileName = FString("PackagePath.txt");
FString PackageJsonFilePath = GetFirstPackagePath(PackageParams.Name);
SaveStringTextToFile(SaveDirectory, FileName, PackageJsonFilePath, true);
}
return 0;
}
#endif

View File

@ -18,6 +18,17 @@
#include <Runtime/Engine/Classes/Engine/StaticMeshActor.h>
#include "PrepareAssetsForCookingCommandlet.generated.h"
/// Struct containing Package Params
USTRUCT()
struct CARLA_API FPackageParams
{
GENERATED_USTRUCT_BODY()
FString Name;
bool bOnlyPrepareMaps;
};
/// Struct containing map data read from .Package.json file.
USTRUCT()
struct CARLA_API FMapData
@ -55,7 +66,7 @@ public:
#if WITH_EDITORONLY_DATA
/// Parses the command line parameters provided through @a InParams
FString ParseParams(const FString &InParams) const;
FPackageParams ParseParams(const FString &InParams) const;
/// Loads a UWorld object contained in Carla BaseMap into @a AssetData data
/// structure.

View File

@ -10,7 +10,6 @@
from __future__ import print_function
from contextlib import contextmanager
import errno
import fnmatch
import json
@ -218,6 +217,7 @@ def import_assets_from_json_list(json_list):
if not package_name:
print("No Packages JSONs found, nothing to import. Skipping package.")
continue
prepare_maps_commandlet_for_cooking(package_name)
def move_uassets(package_name, maps):
@ -247,6 +247,11 @@ def move_uassets(package_name, maps):
if "TerrainNode" in filename:
shutil.move(os.path.join(origin_path, filename), os.path.join(terrain_dir, filename))
def prepare_maps_commandlet_for_cooking(package_name):
commandlet_name = "PrepareAssetsForCooking"
commandlet_arguments = "-PackageName=%s" % package_name
commandlet_arguments += " -OnlyPrepareMaps=%d" % True
invoke_commandlet(commandlet_name, commandlet_arguments)
def main():
import_folder = os.path.join(CARLA_ROOT_PATH, "Import")

View File

@ -204,7 +204,7 @@ for PACKAGE_NAME in "${PACKAGES[@]}" ; do if [[ ${PACKAGE_NAME} != "Carla" ]] ;
# Prepare cooking of package
${UE4_ROOT}/Engine/Binaries/Linux/UE4Editor "${CARLAUE4_ROOT_FOLDER}/CarlaUE4.uproject" \
-run=PrepareAssetsForCooking -PackageName=${PACKAGE_NAME}
-run=PrepareAssetsForCooking -PackageName=${PACKAGE_NAME} -OnlyPrepareMaps=false
PACKAGE_PATH_FILE=${CARLAUE4_ROOT_FOLDER}/Content/PackagePath.txt
MAP_LIST_FILE=${CARLAUE4_ROOT_FOLDER}/Content/MapPaths.txt