Modified pipeline, now make import prepares maps for cooking
This commit is contained in:
parent
621120ad80
commit
edc27f7add
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue