Code cleaning and refactoring
This commit is contained in:
parent
3c6605ff79
commit
5a5212d25b
Binary file not shown.
|
@ -63,7 +63,6 @@ void UMapGeneratorWidget::GenerateMapFiles(const FMapGeneratorMetaInfo& MetaInfo
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error creating OpenDrive file for %s"),
|
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error creating OpenDrive file for %s"),
|
||||||
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UMapGeneratorWidget::CookVegetation(const FMapGeneratorMetaInfo& MetaInfo)
|
void UMapGeneratorWidget::CookVegetation(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
|
@ -95,83 +94,52 @@ void UMapGeneratorWidget::CookVegetationToCurrentTile(const TArray<UProceduralFo
|
||||||
*CUR_CLASS_FUNC_LINE);
|
*CUR_CLASS_FUNC_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UMapGeneratorWidget::RecalculateCollision(FString MapPath)
|
bool UMapGeneratorWidget::RecalculateCollision()
|
||||||
{
|
{
|
||||||
UWorld* World = GEditor->GetEditorWorldContext().World();
|
UWorld* World = GEditor->GetEditorWorldContext().World();
|
||||||
// UWorld* World = GEngine->GetWorld();
|
|
||||||
if(World == nullptr)
|
if(World == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
||||||
World,
|
World,
|
||||||
ALandscape::StaticClass());
|
ALandscape::StaticClass());
|
||||||
// LandscapePostEditEvent(Landscape);
|
|
||||||
|
|
||||||
FProperty* PropertyToUpdate = Landscape->GetClass()->FindPropertyByName(TEXT("CollisionMipLevel"));
|
|
||||||
int32* PropertyValue = PropertyToUpdate->ContainerPtrToValuePtr<int32>(Landscape);
|
|
||||||
if(!PropertyToUpdate){
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Could not found the specified property"),
|
|
||||||
*CUR_CLASS_FUNC_LINE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
*PropertyValue += 1; // Increment
|
|
||||||
|
|
||||||
FPropertyChangedEvent LandscapeCustomPropertyChangedEvent(PropertyToUpdate);
|
|
||||||
Landscape->PostEditChangeProperty(LandscapeCustomPropertyChangedEvent);
|
|
||||||
Landscape->PostEditChange();
|
|
||||||
|
|
||||||
|
|
||||||
Landscape->RecreateCollisionComponents();
|
Landscape->RecreateCollisionComponents();
|
||||||
|
|
||||||
if (MapPath == "")
|
|
||||||
{
|
|
||||||
MapPath = World->GetPathName();
|
|
||||||
}
|
|
||||||
Landscape->ReregisterAllComponents();
|
Landscape->ReregisterAllComponents();
|
||||||
/* bool bSaveMapSuccess = FEditorFileUtils::SaveMap(World,
|
|
||||||
World->GetPathName());*/
|
SaveWorld(World);
|
||||||
UEditorAssetLibrary::SaveAsset(World->GetPathName(), true);
|
|
||||||
bool bSuccess = FEditorFileUtils::SaveDirtyPackages(true, true, true, true, true, true);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UMapGeneratorWidget::CookTilesCollisions(const FMapGeneratorMetaInfo& MetaInfo)
|
void UMapGeneratorWidget::CookTilesCollisions(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MetaInfo.SizeX; i++)
|
for (int i = 0; i < MetaInfo.SizeX; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < MetaInfo.SizeY; j++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < MetaInfo.SizeY; j++)
|
const FString MapName =
|
||||||
{
|
MetaInfo.MapName + "_Tile_" + FString::FromInt(i) + "_" + FString::FromInt(j);
|
||||||
const FString MapName =
|
const FString MapNameToLoad = MetaInfo.DestinationPath + "/" + MapName + "." + MapName;
|
||||||
MetaInfo.MapName + "_Tile_" + FString::FromInt(i) + "_" + FString::FromInt(j);
|
|
||||||
const FString MapNameToLoad = MetaInfo.DestinationPath + "/" + MapName + "." + MapName;
|
|
||||||
|
|
||||||
bool bLoadedSuccess = FEditorFileUtils::LoadMap(*MapNameToLoad, false, true);
|
bool bLoadedSuccess = FEditorFileUtils::LoadMap(*MapNameToLoad, false, true);
|
||||||
|
|
||||||
if (!bLoadedSuccess)
|
if (!bLoadedSuccess)
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Error loading to %s tiles"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Error loading to %s tiles"),
|
||||||
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
||||||
|
|
||||||
UWorld* EditorWorld = GEditor->GetEditorWorldContext().World();
|
UWorld* EditorWorld = GEditor->GetEditorWorldContext().World();
|
||||||
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: HERE! %s -- %s to %s tiles"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: HERE! %s -- %s to %s tiles"),
|
||||||
*CUR_CLASS_FUNC_LINE, *MapNameToLoad, *GEditor->GetEditorWorldContext().World()->GetName(), *MetaInfo.MapName);
|
*CUR_CLASS_FUNC_LINE, *MapNameToLoad, *GEditor->GetEditorWorldContext().World()->GetName(), *MetaInfo.MapName);
|
||||||
|
|
||||||
bool bRecalculateResult = RecalculateCollision(MapNameToLoad);
|
bool bRecalculateResult = RecalculateCollision();
|
||||||
|
|
||||||
if (!bRecalculateResult)
|
if (!bRecalculateResult)
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error recalculating to %s tiles"),
|
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error recalculating to %s tiles"),
|
||||||
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
||||||
|
|
||||||
//bool bSaveMapSuccess = FEditorFileUtils::SaveMap(GEditor->GetEditorWorldContext().World(),
|
|
||||||
//MapNameToLoad);
|
|
||||||
|
|
||||||
//if(!bSaveMapSuccess)
|
|
||||||
//UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error Saving to %s tiles"),
|
|
||||||
//*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FString UMapGeneratorWidget::SanitizeDirectory(FString InDirectory)
|
FString UMapGeneratorWidget::SanitizeDirectory(FString InDirectory)
|
||||||
|
@ -254,14 +222,6 @@ AActor* UMapGeneratorWidget::GenerateWater(TSubclassOf<class AActor> RiverClass)
|
||||||
|
|
||||||
UWorld* World = GetWorld();
|
UWorld* World = GetWorld();
|
||||||
|
|
||||||
///////********** TODO PROV ***********//////
|
|
||||||
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
|
||||||
World,
|
|
||||||
ALandscape::StaticClass());
|
|
||||||
LandscapePostEditEvent(Landscape);
|
|
||||||
|
|
||||||
//////*****************************/////
|
|
||||||
|
|
||||||
float ActorZCoord = GetLandscapeSurfaceHeight(World, 0, 0, false);
|
float ActorZCoord = GetLandscapeSurfaceHeight(World, 0, 0, false);
|
||||||
FVector Location(20000, 20000, ActorZCoord); // Auxiliar values for x and y coords
|
FVector Location(20000, 20000, ActorZCoord); // Auxiliar values for x and y coords
|
||||||
FRotator Rotation(0,0,0);
|
FRotator Rotation(0,0,0);
|
||||||
|
@ -317,222 +277,6 @@ AActor* UMapGeneratorWidget::AddWeatherToExistingMap(TSubclassOf<class AActor> W
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UMapGeneratorWidget::LandscapePostEditEvent(ALandscape* Landscape)
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Landscape Post Edit Event Called"),
|
|
||||||
*CUR_CLASS_FUNC_LINE);
|
|
||||||
|
|
||||||
// FProperty* PropertyToUpdate = Landscape->GetClass()->FindPropertyByName(TEXT("CollisionMipLevel"));
|
|
||||||
// if(!PropertyToUpdate){
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Could not found the specified property"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE);
|
|
||||||
// }
|
|
||||||
// FPropertyChangedEvent LandscapeCustomPropertyChangedEvent(PropertyToUpdate, EPropertyChangeType::Interactive);
|
|
||||||
// Landscape->PostEditChangeProperty(LandscapeCustomPropertyChangedEvent);
|
|
||||||
|
|
||||||
// static const FName PropertyName(TEXT("CollisionMipLevel"));
|
|
||||||
// FObjectEditorUtils::SetPropertyValue<ALandscape, int32>(Landscape, PropertyName, 1);
|
|
||||||
|
|
||||||
|
|
||||||
// Post edit event
|
|
||||||
// FProperty* PropertyToUpdate = Landscape->GetClass()->FindPropertyByName(TEXT("CollisionMipLevel"));
|
|
||||||
// int32* PropertyValue = PropertyToUpdate->ContainerPtrToValuePtr<int32>(Landscape);
|
|
||||||
// if(!PropertyToUpdate){
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Could not found the specified property"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// *PropertyValue += 1; // Increment
|
|
||||||
|
|
||||||
// FPropertyChangedEvent LandscapeCustomPropertyChangedEvent(PropertyToUpdate);
|
|
||||||
// Landscape->PostEditChangeProperty(LandscapeCustomPropertyChangedEvent);
|
|
||||||
// Landscape->PostEditChange();
|
|
||||||
|
|
||||||
|
|
||||||
// Recreate Collision Components
|
|
||||||
// Landscape->PostDuplicate(false);
|
|
||||||
// Landscape->PostDuplicate(EDuplicateMode::Type::World);
|
|
||||||
Landscape->RecreateCollisionComponents();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::LoadBaseTileWorld(FAssetData& WorldAssetData)
|
|
||||||
{
|
|
||||||
const FString BaseMapPath = TEXT("/CarlaTools/MapGenerator/BaseMap/Tiles");
|
|
||||||
const FString MapName = TEXT("MapGeneratorBaseMap");
|
|
||||||
// return LoadWorldByName(WorldAssetData, BaseMapPath, MapName);
|
|
||||||
return LoadWorld(WorldAssetData, BaseMapPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::LoadBaseLargeMapWorld(FAssetData& WorldAssetData)
|
|
||||||
{
|
|
||||||
const FString BaseMapPath= TEXT("/CarlaTools/MapGenerator/BaseMap/MainLargeMap");
|
|
||||||
return LoadWorld(WorldAssetData, BaseMapPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::LoadWorld(FAssetData& WorldAssetData, const FString& BaseMapPath)
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Loading World from %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *BaseMapPath);
|
|
||||||
|
|
||||||
TArray<FAssetData> AssetsData;
|
|
||||||
bool success = LoadWorlds(AssetsData, BaseMapPath);
|
|
||||||
|
|
||||||
if(success && AssetsData.Num() > 0)
|
|
||||||
{
|
|
||||||
WorldAssetData = AssetsData.Pop();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error getting worlds from %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *BaseMapPath);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::LoadWorldByName(FAssetData& WorldAssetData, const FString& BaseMapPath, const FString& MapName)
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Loading World named %s from %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *MapName, *BaseMapPath);
|
|
||||||
|
|
||||||
// Loading all and search for the matching name
|
|
||||||
TArray<FAssetData> AssetsData;
|
|
||||||
bool bSuccess = LoadWorlds(AssetsData, BaseMapPath);
|
|
||||||
|
|
||||||
if(bSuccess && AssetsData.Num() > 0)
|
|
||||||
{
|
|
||||||
for(FAssetData AssetData : AssetsData)
|
|
||||||
{
|
|
||||||
if(MapName.Equals(AssetData.AssetName.ToString(), ESearchCase::CaseSensitive))
|
|
||||||
{
|
|
||||||
WorldAssetData = AssetData;
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: World is load %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, WorldAssetData.IsAssetLoaded() ? TEXT("YES") : TEXT("NO"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false; // Asset not found
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error getting worlds from %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *BaseMapPath);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::DUBUG_LandscapeApplyHeightmap(const FMapGeneratorMetaInfo& MetaInfo)
|
|
||||||
{
|
|
||||||
// for(int i = 0; i < MetaInfo.SizeX; i++)
|
|
||||||
// {
|
|
||||||
// for(int j = 0; j < MetaInfo.SizeY; j++)
|
|
||||||
// {
|
|
||||||
// const FString MapName =
|
|
||||||
// MetaInfo.MapName + "_Tile_" + FString::FromInt(i) + "_" + FString::FromInt(j);
|
|
||||||
// const FString WorldSearchPath = MetaInfo.DestinationPath + "/" + MapName + "." + MapName;
|
|
||||||
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Heightmap to %s"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
|
|
||||||
// UWorld* PreWorld = LoadObject<UWorld>(nullptr, *WorldSearchPath);
|
|
||||||
// if(PreWorld == nullptr){
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Error Finding pre-world in: %s"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// UPackage* ReloadedPackage = ReloadPackage(PreWorld->GetPackage(), ELoadFlags::LOAD_EditorOnly);
|
|
||||||
|
|
||||||
// UWorld* World = LoadObject<UWorld>(ReloadedPackage, *WorldSearchPath);
|
|
||||||
// if(World == nullptr){
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Error Finding world in: %s"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Actor count
|
|
||||||
// TArray<AActor*> ActorsInWorld;
|
|
||||||
// UGameplayStatics::GetAllActorsOfClass(World, AActor::StaticClass(), ActorsInWorld);
|
|
||||||
|
|
||||||
// ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
|
||||||
// World,
|
|
||||||
// ALandscape::StaticClass());
|
|
||||||
// FMapGeneratorTileMetaInfo MetaTileInfo;
|
|
||||||
// MetaTileInfo.IndexX = i;
|
|
||||||
// MetaTileInfo.IndexY = j;
|
|
||||||
// if (Landscape == nullptr)
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error. No landscape found in tile %s %d_%d ------- Actors found: %d"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *World->GetName(), MetaTileInfo.IndexX, MetaTileInfo.IndexY, ActorsInWorld.Num());
|
|
||||||
|
|
||||||
// // Landscape->ComponentSizeQuads = 126;
|
|
||||||
// // Landscape->SubsectionSizeQuads = 63;
|
|
||||||
// // Landscape->NumSubsections = 4;
|
|
||||||
// // UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Landscape info %d %d %d"),
|
|
||||||
// // *CUR_CLASS_FUNC_LINE, Landscape->ComponentSizeQuads, Landscape->SubsectionSizeQuads, Landscape->NumSubsections);
|
|
||||||
|
|
||||||
// AssignLandscapeHeightMap(Landscape, MetaTileInfo);
|
|
||||||
|
|
||||||
// const FString PackageName = MetaInfo.DestinationPath + "/" + MapName;
|
|
||||||
// const FString PackageFileName = FPackageName::LongPackageNameToFilename(
|
|
||||||
// PackageName,
|
|
||||||
// FPackageName::GetMapPackageExtension());
|
|
||||||
// UPackage::SavePackage(World->GetPackage(), World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
|
|
||||||
// *PackageFileName, GError, nullptr, true, true, SAVE_NoError);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
const FString MapName = MetaInfo.MapName;
|
|
||||||
const FString WorldSearchPath = MetaInfo.DestinationPath + "/" + MapName + "." + MapName;
|
|
||||||
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Heightmap to %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
|
|
||||||
UWorld* PreWorld = LoadObject<UWorld>(nullptr, *WorldSearchPath);
|
|
||||||
if(PreWorld == nullptr){
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Error Finding pre-world in: %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
UPackage* ReloadedPackage = ReloadPackage(PreWorld->GetPackage(), ELoadFlags::LOAD_EditorOnly);
|
|
||||||
|
|
||||||
UWorld* World = LoadObject<UWorld>(ReloadedPackage, *WorldSearchPath);
|
|
||||||
if(World == nullptr){
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Error Finding world in: %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *WorldSearchPath);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actor count
|
|
||||||
TArray<AActor*> ActorsInWorld;
|
|
||||||
UGameplayStatics::GetAllActorsOfClass(World, AActor::StaticClass(), ActorsInWorld);
|
|
||||||
|
|
||||||
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
|
||||||
World,
|
|
||||||
ALandscape::StaticClass());
|
|
||||||
FMapGeneratorTileMetaInfo MetaTileInfo;
|
|
||||||
// MetaTileInfo.IndexX = i;
|
|
||||||
// MetaTileInfo.IndexY = j;
|
|
||||||
if (Landscape == nullptr)
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error. No landscape found in tile %s %d_%d ------- Actors found: %d"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *World->GetName(), MetaTileInfo.IndexX, MetaTileInfo.IndexY, ActorsInWorld.Num());
|
|
||||||
|
|
||||||
AssignLandscapeHeightMap(Landscape, MetaTileInfo);
|
|
||||||
|
|
||||||
const FString PackageName = MetaInfo.DestinationPath + "/" + MapName;
|
|
||||||
const FString PackageFileName = FPackageName::LongPackageNameToFilename(
|
|
||||||
PackageName,
|
|
||||||
FPackageName::GetMapPackageExtension());
|
|
||||||
UPackage::SavePackage(World->GetPackage(), World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
|
|
||||||
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::LoadWorlds(TArray<FAssetData>& WorldAssetsData, const FString& BaseMapPath, bool bRecursive)
|
bool UMapGeneratorWidget::LoadWorlds(TArray<FAssetData>& WorldAssetsData, const FString& BaseMapPath, bool bRecursive)
|
||||||
{
|
{
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Loading Worlds from %s"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Loading Worlds from %s"),
|
||||||
|
@ -563,48 +307,14 @@ bool UMapGeneratorWidget::LoadWorlds(TArray<FAssetData>& WorldAssetsData, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UMapGeneratorWidget::SaveWorld(
|
bool UMapGeneratorWidget::SaveWorld(UWorld* WorldToBeSaved)
|
||||||
FAssetData& WorldToBeSaved,
|
|
||||||
const FString& DestinationPath,
|
|
||||||
const FString& WorldName,
|
|
||||||
bool bCheckFileExists)
|
|
||||||
{
|
{
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Saving World to %s as %s"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Saving World to %s"),
|
||||||
*CUR_CLASS_FUNC_LINE, *DestinationPath, *WorldName);
|
*CUR_CLASS_FUNC_LINE, *WorldToBeSaved->GetPathName());
|
||||||
|
|
||||||
UWorld* World = GetWorldFromAssetData(WorldToBeSaved);
|
bool bSaveAssetSuccess = UEditorAssetLibrary::SaveAsset(WorldToBeSaved->GetPathName(), true);
|
||||||
|
bool bSaveDirtySuccess = FEditorFileUtils::SaveDirtyPackages(true, true, true, true, true, true);
|
||||||
const FString PackagePath = DestinationPath + "/" + WorldName;
|
return bSaveAssetSuccess && bSaveDirtySuccess;
|
||||||
|
|
||||||
// Create Package
|
|
||||||
UPackage *Package = WorldToBeSaved.GetPackage();
|
|
||||||
Package->SetFolderName(*WorldName);
|
|
||||||
Package->FullyLoad();
|
|
||||||
Package->MarkPackageDirty();
|
|
||||||
FAssetRegistryModule::AssetCreated(World);
|
|
||||||
|
|
||||||
// Rename new World
|
|
||||||
World->Rename(*WorldName, World->GetOuter());
|
|
||||||
|
|
||||||
FAssetRegistryModule::AssetRenamed(World, *PackagePath);
|
|
||||||
World->MarkPackageDirty();
|
|
||||||
World->GetOuter()->MarkPackageDirty();
|
|
||||||
|
|
||||||
// Saving Package
|
|
||||||
const FString PackageFileName = FPackageName::LongPackageNameToFilename(
|
|
||||||
PackagePath,
|
|
||||||
FPackageName::GetMapPackageExtension());
|
|
||||||
|
|
||||||
if(bCheckFileExists && FPaths::FileExists(*PackageFileName))
|
|
||||||
{
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error,
|
|
||||||
TEXT("%s: Could not save %s because it already exists."),
|
|
||||||
*PackageFileName);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return UPackage::SavePackage(
|
|
||||||
Package, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
|
|
||||||
*PackageFileName, GError, nullptr, true, true, SAVE_NoError);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaInfo)
|
bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
|
@ -660,8 +370,7 @@ bool UMapGeneratorWidget::CreateMainLargeMap(const FMapGeneratorMetaInfo& MetaIn
|
||||||
|
|
||||||
LargeMapManager->LargeMapTilePath = MetaInfo.DestinationPath;
|
LargeMapManager->LargeMapTilePath = MetaInfo.DestinationPath;
|
||||||
LargeMapManager->LargeMapName = MetaInfo.MapName;
|
LargeMapManager->LargeMapName = MetaInfo.MapName;
|
||||||
// LargeMapManager->AssetsPath = MetaInfo.DestinationPath;
|
|
||||||
// LargeMapManager->TileSide = 2.0f * 1000.0f * 100.0f;
|
|
||||||
LargeMapManager->GenerateMap_Editor();
|
LargeMapManager->GenerateMap_Editor();
|
||||||
|
|
||||||
UPackage::SavePackage(BaseMapPackage, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
|
UPackage::SavePackage(BaseMapPackage, World, EObjectFlags::RF_Public | EObjectFlags::RF_Standalone,
|
||||||
|
@ -698,11 +407,6 @@ bool UMapGeneratorWidget::CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
|
|
||||||
const FString BaseWorldSearchPath = TEXT("/CarlaTools/MapGenerator/BaseMap/TilesEmpty/BaseTileEmpty.BaseTileEmpty");
|
const FString BaseWorldSearchPath = TEXT("/CarlaTools/MapGenerator/BaseMap/TilesEmpty/BaseTileEmpty.BaseTileEmpty");
|
||||||
|
|
||||||
UWorld* BaseWorld;
|
|
||||||
UWorld* World;
|
|
||||||
|
|
||||||
|
|
||||||
// CREATION OF TILES USING FASSETDATA
|
|
||||||
for(int i = 0; i < MetaInfo.SizeX; i++)
|
for(int i = 0; i < MetaInfo.SizeX; i++)
|
||||||
{
|
{
|
||||||
for(int j = 0; j < MetaInfo.SizeY; j++)
|
for(int j = 0; j < MetaInfo.SizeY; j++)
|
||||||
|
@ -710,7 +414,7 @@ bool UMapGeneratorWidget::CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Creating tile map %s (%d_%d)"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Creating tile map %s (%d_%d)"),
|
||||||
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName, i, j);
|
*CUR_CLASS_FUNC_LINE, *MetaInfo.MapName, i, j);
|
||||||
|
|
||||||
BaseWorld = LoadObject<UWorld>(nullptr, *BaseWorldSearchPath);
|
UWorld* BaseWorld = LoadObject<UWorld>(nullptr, *BaseWorldSearchPath);
|
||||||
|
|
||||||
const FString MapName =
|
const FString MapName =
|
||||||
MetaInfo.MapName + "_Tile_" + FString::FromInt(i) + "_" + FString::FromInt(j);
|
MetaInfo.MapName + "_Tile_" + FString::FromInt(i) + "_" + FString::FromInt(j);
|
||||||
|
@ -722,80 +426,41 @@ bool UMapGeneratorWidget::CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
Parameters.DestClass = BaseWorld->GetClass();
|
Parameters.DestClass = BaseWorld->GetClass();
|
||||||
Parameters.DuplicateMode = EDuplicateMode::World;
|
Parameters.DuplicateMode = EDuplicateMode::World;
|
||||||
Parameters.PortFlags = PPF_Duplicate;
|
Parameters.PortFlags = PPF_Duplicate;
|
||||||
// Parameters.PortFlags = PPF_DuplicateForPIE;
|
|
||||||
|
|
||||||
World = CastChecked<UWorld>(StaticDuplicateObjectEx(Parameters));
|
UWorld* World = CastChecked<UWorld>(StaticDuplicateObjectEx(Parameters));
|
||||||
|
|
||||||
if (World == nullptr)
|
if (World == nullptr)
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error. No world found in tile %s %d_%d"),
|
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error. No world found in tile %s %d_%d"),
|
||||||
*CUR_CLASS_FUNC_LINE, *World->GetName(), i, j);
|
*CUR_CLASS_FUNC_LINE, *World->GetName(), i, j);
|
||||||
|
|
||||||
// 4033 x 4033
|
// 2017 x 2017
|
||||||
ALandscape* Landscape = World->SpawnActor<ALandscape>();
|
ALandscape* Landscape = World->SpawnActor<ALandscape>();
|
||||||
Landscape->ComponentSizeQuads = 126; // Component Size
|
Landscape->ComponentSizeQuads = 126; // Component Size
|
||||||
Landscape->SubsectionSizeQuads = 63; // Quads / Section
|
Landscape->SubsectionSizeQuads = 63; // Quads / Section
|
||||||
Landscape->NumSubsections = 2; // (1 for 1x1 , 2 for 2x2)
|
Landscape->NumSubsections = 2; // (1 for 1x1 , 2 for 2x2)
|
||||||
Landscape->SetLandscapeGuid(FGuid::NewGuid());
|
Landscape->SetLandscapeGuid(FGuid::NewGuid());
|
||||||
|
|
||||||
// 2017 x 2017
|
|
||||||
// ALandscape* Landscape = World->SpawnActor<ALandscape>();
|
|
||||||
// Landscape->ComponentSizeQuads = 63;
|
|
||||||
// Landscape->SubsectionSizeQuads = 63;
|
|
||||||
// Landscape->NumSubsections = 1;
|
|
||||||
// Landscape->SetLandscapeGuid(FGuid::NewGuid());
|
|
||||||
|
|
||||||
// Landscape Material
|
|
||||||
|
|
||||||
// Height Render Target
|
// Height Render Target
|
||||||
UTextureRenderTarget2D* HeightRT = MetaInfo.GlobalHeightmap;
|
UTextureRenderTarget2D* HeightRT = MetaInfo.GlobalHeightmap;
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Heightmap detected with dimensions %dx%d"),
|
UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Heightmap detected with dimensions %dx%d"),
|
||||||
*CUR_CLASS_FUNC_LINE, HeightRT->SizeX, HeightRT->SizeY);
|
*CUR_CLASS_FUNC_LINE, HeightRT->SizeX, HeightRT->SizeY);
|
||||||
TArray<uint16> HeightData;
|
TArray<uint16> HeightData;
|
||||||
// FTextureRenderTargetResource* RenderTargetResource = HeightRT->GetRenderTargetResource();
|
|
||||||
// TODO: UTexture2D and GetMipData
|
// TODO: UTexture2D and GetMipData
|
||||||
FTextureRenderTargetResource* RenderTargetResource = HeightRT->GameThread_GetRenderTargetResource();
|
FTextureRenderTargetResource* RenderTargetResource = HeightRT->GameThread_GetRenderTargetResource();
|
||||||
FIntRect Rect = FIntRect(0, 0, HeightRT->SizeX, HeightRT->SizeY);
|
FIntRect Rect = FIntRect(0, 0, HeightRT->SizeX, HeightRT->SizeY);
|
||||||
// FIntRect Rect = FIntRect(0, 0, FMath::Min(1 + MaxX - MinX, HeightRT->SizeX), FMath::Min(1 + MaxY - MinY, HeightRT->SizeY));
|
|
||||||
TArray<FLinearColor> HeightmapColor;
|
TArray<FLinearColor> HeightmapColor;
|
||||||
////
|
|
||||||
// TArray<uint16> HeightData;
|
|
||||||
// HeightData.Init(0, 2017*2017);
|
|
||||||
// HeightmapColor.Reserve(2017*2017);
|
|
||||||
////
|
|
||||||
HeightmapColor.Reserve(Rect.Width() * Rect.Height());
|
HeightmapColor.Reserve(Rect.Width() * Rect.Height());
|
||||||
RenderTargetResource->ReadLinearColorPixels(HeightmapColor, FReadSurfaceDataFlags(RCM_MinMax, CubeFace_MAX), Rect);
|
RenderTargetResource->ReadLinearColorPixels(HeightmapColor, FReadSurfaceDataFlags(RCM_MinMax, CubeFace_MAX), Rect);
|
||||||
HeightData.Reserve(HeightmapColor.Num());
|
HeightData.Reserve(HeightmapColor.Num());
|
||||||
|
|
||||||
// int IterCount = 0;
|
|
||||||
// float R = 1.0f;
|
|
||||||
// float G = 1.0f;
|
|
||||||
for(FLinearColor LinearColor : HeightmapColor)
|
for(FLinearColor LinearColor : HeightmapColor)
|
||||||
{
|
{
|
||||||
// if(IterCount % HeightRT->SizeX == 0)
|
|
||||||
// {
|
|
||||||
// R -= 0.001f;
|
|
||||||
// // G -= 0.01f;
|
|
||||||
// }
|
|
||||||
// HeightData.Add((uint16)(R * 255 * 255 + G * 255));
|
|
||||||
// IterCount++;
|
|
||||||
HeightData.Add((uint16)(LinearColor.R * 255 * 255 + LinearColor.G * 255));
|
HeightData.Add((uint16)(LinearColor.R * 255 * 255 + LinearColor.G * 255));
|
||||||
// // // HeightData.Add((uint16)(LinearColor.R * 255 + LinearColor.G));
|
|
||||||
// // // HeightData.Add(((uint16)LinearColor.R << 8) | (uint16)LinearColor.G);
|
|
||||||
// // // HeightData.Add((uint16)LinearColor.R);
|
|
||||||
// // // if(IterCount % 10 == 0)
|
|
||||||
// // // UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Color: %d"),
|
|
||||||
// // // *CUR_CLASS_FUNC_LINE, HeightData.Last());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// HeightmapGenerator HMGenerator();
|
|
||||||
// HeightData = UHeightmapGenerator::GenerateHeightmap(Rect.Width());
|
|
||||||
|
|
||||||
|
|
||||||
// FVector LandscapeScaleVector(100.0f, 100.0f, 100.0f*255);
|
|
||||||
FVector LandscapeScaleVector(100.0f, 100.0f, 100.0f);
|
FVector LandscapeScaleVector(100.0f, 100.0f, 100.0f);
|
||||||
// FVector LandscapeScaleVector(1.0f, 1.0f, 1.0f);
|
|
||||||
Landscape->CreateLandscapeInfo();
|
Landscape->CreateLandscapeInfo();
|
||||||
// Landscape->SetActorTransform(FTransform(FQuat::Identity, FVector::ZeroVector, FVector::OneVector));
|
|
||||||
Landscape->SetActorTransform(FTransform(FQuat::Identity, FVector(), LandscapeScaleVector));
|
Landscape->SetActorTransform(FTransform(FQuat::Identity, FVector(), LandscapeScaleVector));
|
||||||
|
|
||||||
TMap<FGuid, TArray<uint16>> HeightmapDataPerLayers;
|
TMap<FGuid, TArray<uint16>> HeightmapDataPerLayers;
|
||||||
|
@ -806,17 +471,8 @@ bool UMapGeneratorWidget::CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo)
|
||||||
|
|
||||||
Landscape->Import(Landscape->GetLandscapeGuid(), 0, 0, HeightRT->SizeX-1, HeightRT->SizeY-1, Landscape->NumSubsections, Landscape->SubsectionSizeQuads,
|
Landscape->Import(Landscape->GetLandscapeGuid(), 0, 0, HeightRT->SizeX-1, HeightRT->SizeY-1, Landscape->NumSubsections, Landscape->SubsectionSizeQuads,
|
||||||
HeightmapDataPerLayers, TEXT("NONE"), MaterialLayerDataPerLayer, ELandscapeImportAlphamapType::Layered);
|
HeightmapDataPerLayers, TEXT("NONE"), MaterialLayerDataPerLayer, ELandscapeImportAlphamapType::Layered);
|
||||||
// Landscape->Import(Landscape->GetLandscapeGuid(), 0, 0, 2016, 2016, Landscape->NumSubsections, Landscape->SubsectionSizeQuads,
|
|
||||||
// HeightmapDataPerLayers, TEXT("NONE"), MaterialLayerDataPerLayer, ELandscapeImportAlphamapType::Layered);
|
|
||||||
|
|
||||||
|
|
||||||
// FVector LandscapeOrigin;
|
|
||||||
// FVector LandscapeBounds;
|
|
||||||
// Landscape->GetActorBounds(false, LandscapeOrigin, LandscapeBounds);
|
|
||||||
// Landscape->SetActorLocation(FVector(0.0f, 0.0f, LandscapeBounds.Z));
|
|
||||||
|
|
||||||
Landscape->ReregisterAllComponents();
|
Landscape->ReregisterAllComponents();
|
||||||
|
|
||||||
Landscape->CreateLandscapeInfo();
|
Landscape->CreateLandscapeInfo();
|
||||||
Landscape->SetActorLabel("Landscape");
|
Landscape->SetActorLabel("Landscape");
|
||||||
|
|
||||||
|
@ -902,54 +558,13 @@ bool UMapGeneratorWidget::CookVegetationToTiles(const FMapGeneratorMetaInfo& Met
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save world with vegetation spawned
|
|
||||||
bool bSaved = SaveWorld(AssetData, MetaInfo.DestinationPath, World->GetMapName());
|
SaveWorld(World);
|
||||||
if(!bSaved){
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error Saving after Cooking Vegetation in %s"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *MapNameToLoad);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UMapGeneratorWidget::ApplyHeightMapToLandscape(
|
|
||||||
FAssetData& WorldAssetData,
|
|
||||||
FMapGeneratorTileMetaInfo TileMetaInfo)
|
|
||||||
{
|
|
||||||
UWorld* World = GetWorldFromAssetData(WorldAssetData);
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Applying Heigthmap to %s tile (%d_%d)"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *World->GetMapName(), TileMetaInfo.IndexX, TileMetaInfo.IndexY);
|
|
||||||
|
|
||||||
/****** TODO PROV Loading World ******/
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Warning, TEXT("%s: Loading %s tile to Editor (%d_%d)"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *World->GetMapName(), TileMetaInfo.IndexX, TileMetaInfo.IndexY);
|
|
||||||
// const FString TilesPath = TileMetaInfo.MapMetaInfo.DestinationPath;
|
|
||||||
// const FString MapNameToLoad = TilesPath + "/" + World->GetMapName() + "." + World->GetMapName();
|
|
||||||
// bool bLoadedSuccess = FEditorFileUtils::LoadMap(*MapNameToLoad, false, true);
|
|
||||||
// if(!bLoadedSuccess){
|
|
||||||
// UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error Loading %s"),
|
|
||||||
// *CUR_CLASS_FUNC_LINE, *MapNameToLoad);
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
/****************************/
|
|
||||||
|
|
||||||
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
|
||||||
World,
|
|
||||||
ALandscape::StaticClass());
|
|
||||||
if (Landscape == nullptr)
|
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("%s: Error. No landscape found in tile %s %d_%d"),
|
|
||||||
*CUR_CLASS_FUNC_LINE, *World->GetName(), TileMetaInfo.IndexX, TileMetaInfo.IndexY);
|
|
||||||
AssignLandscapeHeightMap(Landscape, TileMetaInfo);
|
|
||||||
|
|
||||||
// LandscapePostEditEvent(Landscape);
|
|
||||||
|
|
||||||
// FEditorFileUtils::SaveCurrentLevel();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UMapGeneratorWidget::CookVegetationToWorld(
|
bool UMapGeneratorWidget::CookVegetationToWorld(
|
||||||
UWorld* World,
|
UWorld* World,
|
||||||
const TArray<UProceduralFoliageSpawner*> FoliageSpawners)
|
const TArray<UProceduralFoliageSpawner*> FoliageSpawners)
|
||||||
|
@ -957,13 +572,6 @@ bool UMapGeneratorWidget::CookVegetationToWorld(
|
||||||
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Cooking vegetation to %s"),
|
UE_LOG(LogCarlaToolsMapGenerator, Log, TEXT("%s: Cooking vegetation to %s"),
|
||||||
*CUR_CLASS_FUNC_LINE, *World->GetMapName());
|
*CUR_CLASS_FUNC_LINE, *World->GetMapName());
|
||||||
|
|
||||||
// TODO PROV : Fix World *********************/
|
|
||||||
ALandscape* Landscape = (ALandscape*) UGameplayStatics::GetActorOfClass(
|
|
||||||
World,
|
|
||||||
ALandscape::StaticClass());
|
|
||||||
LandscapePostEditEvent(Landscape);
|
|
||||||
/********************************************/
|
|
||||||
|
|
||||||
// For each spawner create a procedural foliage volume and simulates the vegetation
|
// For each spawner create a procedural foliage volume and simulates the vegetation
|
||||||
for(auto Spawner : FoliageSpawners)
|
for(auto Spawner : FoliageSpawners)
|
||||||
{
|
{
|
||||||
|
@ -976,7 +584,7 @@ bool UMapGeneratorWidget::CookVegetationToWorld(
|
||||||
FName InName = NAME_None;
|
FName InName = NAME_None;
|
||||||
|
|
||||||
FTransform Transform{ Rotation,Translation,Scale3D };
|
FTransform Transform{ Rotation,Translation,Scale3D };
|
||||||
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, "Creating Volume...");
|
|
||||||
UActorFactory* ActorFactory = GEditor->FindActorFactoryForActorClass(AProceduralFoliageVolume::StaticClass());
|
UActorFactory* ActorFactory = GEditor->FindActorFactoryForActorClass(AProceduralFoliageVolume::StaticClass());
|
||||||
AProceduralFoliageVolume* FoliageVolumeActor = (AProceduralFoliageVolume*) ActorFactory->CreateActor(
|
AProceduralFoliageVolume* FoliageVolumeActor = (AProceduralFoliageVolume*) ActorFactory->CreateActor(
|
||||||
AProceduralFoliageVolume::StaticClass(), Level, Transform, InObjectFlags, InName);
|
AProceduralFoliageVolume::StaticClass(), Level, Transform, InObjectFlags, InName);
|
||||||
|
|
|
@ -70,16 +70,6 @@ class CARLATOOLS_API UMapGeneratorWidget : public UEditorUtilityWidget
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// This function invokes a blueprint event defined in widget blueprint
|
|
||||||
/// event graph, which sets a heightmap to the @a Landscape using
|
|
||||||
/// ALandscapeProxy::LandscapeImportHeightMapFromRenderTarget(...)
|
|
||||||
/// function, which is not exposed to be used in C++ code, only blueprints
|
|
||||||
/// @a metaTileInfo contains some useful info to execute this function
|
|
||||||
UFUNCTION(BlueprintImplementableEvent)
|
|
||||||
void AssignLandscapeHeightMap(ALandscape* Landscape, FMapGeneratorTileMetaInfo TileMetaInfo);
|
|
||||||
|
|
||||||
// UFUNCTION(Category="Map Generator", BlueprintImplementableEvent)
|
|
||||||
// void GetTileHeigtmapRT(FMapGeneratorTileMetaInfo TileMetaInfo, UTextureRenderTarget2D& OutRT);
|
|
||||||
|
|
||||||
UFUNCTION(BlueprintImplementableEvent)
|
UFUNCTION(BlueprintImplementableEvent)
|
||||||
void AssignLandscapeMaterial(ALandscape* Landscape);
|
void AssignLandscapeMaterial(ALandscape* Landscape);
|
||||||
|
@ -101,10 +91,10 @@ public:
|
||||||
void CookVegetationToCurrentTile(const TArray<UProceduralFoliageSpawner*> FoliageSpawners);
|
void CookVegetationToCurrentTile(const TArray<UProceduralFoliageSpawner*> FoliageSpawners);
|
||||||
|
|
||||||
UFUNCTION(Category="Map Generator", BlueprintCallable)
|
UFUNCTION(Category="Map Generator", BlueprintCallable)
|
||||||
bool RecalculateCollision(FString MapPath = "");
|
bool RecalculateCollision();
|
||||||
|
|
||||||
UFUNCTION(Category = "MapGenerator", BlueprintCallable)
|
UFUNCTION(Category = "MapGenerator", BlueprintCallable)
|
||||||
void CookTilesCollisions(const FMapGeneratorMetaInfo& MetaInfo);
|
void CookTilesCollisions(const FMapGeneratorMetaInfo& MetaInfo);
|
||||||
|
|
||||||
/// Utils funtion to format @a InDirectory so it gets sanitized in a
|
/// Utils funtion to format @a InDirectory so it gets sanitized in a
|
||||||
/// format that unreal can access the directory, deleting unnecesary
|
/// format that unreal can access the directory, deleting unnecesary
|
||||||
|
@ -122,43 +112,16 @@ public:
|
||||||
AActor* AddWeatherToExistingMap(TSubclassOf<class AActor> WeatherActorClass,
|
AActor* AddWeatherToExistingMap(TSubclassOf<class AActor> WeatherActorClass,
|
||||||
const FMapGeneratorMetaInfo& MetaInfo, const FString SelectedWeather);
|
const FMapGeneratorMetaInfo& MetaInfo, const FString SelectedWeather);
|
||||||
|
|
||||||
UFUNCTION(Category="MapGenerator", BlueprintCallable)
|
|
||||||
void LandscapePostEditEvent(ALandscape* Landscape);
|
|
||||||
|
|
||||||
UFUNCTION(Category="MapGenerator", BlueprintCallable)
|
|
||||||
bool DUBUG_LandscapeApplyHeightmap(const FMapGeneratorMetaInfo& MetaInfo);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Loads the base tile map and stores it in @a WorldAssetData
|
|
||||||
/// The funtions return true is success, otherwise false
|
|
||||||
UFUNCTION()
|
|
||||||
bool LoadBaseTileWorld(FAssetData& WorldAssetData);
|
|
||||||
|
|
||||||
/// Loads the base large map and stores it in @a WorldAssetData
|
|
||||||
/// The funtions return true is success, otherwise false
|
|
||||||
UFUNCTION()
|
|
||||||
bool LoadBaseLargeMapWorld(FAssetData& WorldAssetData);
|
|
||||||
|
|
||||||
/// Loads a UWorld object from @a BaseMapPath and returns
|
|
||||||
/// it in @a WorldAssetData
|
|
||||||
/// The funtion returns true is success, otherwise false
|
|
||||||
UFUNCTION()
|
|
||||||
bool LoadWorld(FAssetData& WorldAssetData, const FString& BaseMapPath);
|
|
||||||
|
|
||||||
UFUNCTION()
|
|
||||||
bool LoadWorldByName(FAssetData& WorldAssetData, const FString& BaseMapPath, const FString& MapName);
|
|
||||||
|
|
||||||
/// Loads a bunch of world objects located in @a BaseMapPath and
|
/// Loads a bunch of world objects located in @a BaseMapPath and
|
||||||
/// returns them in @a WorldAssetsData.
|
/// returns them in @a WorldAssetsData.
|
||||||
/// The function returns true if success, otherwise false
|
/// The function returns true if success, otherwise false
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
bool LoadWorlds(TArray<FAssetData>& WorldAssetsData, const FString& BaseMapPath, bool bRecursive = true);
|
bool LoadWorlds(TArray<FAssetData>& WorldAssetsData, const FString& BaseMapPath, bool bRecursive = true);
|
||||||
|
|
||||||
/// Saves a world contained in @a WorldToBeSaved, in the path defined in @a DestinationPath
|
|
||||||
/// named as @a WorldName, as a package .umap
|
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
bool SaveWorld(FAssetData& WorldToBeSaved, const FString& DestinationPath,
|
bool SaveWorld(UWorld* WorldToBeSaved);
|
||||||
const FString& WorldName, bool bCheckFileExists = false);
|
|
||||||
|
|
||||||
/// Takes the name of the map from @a MetaInfo and created the main map
|
/// Takes the name of the map from @a MetaInfo and created the main map
|
||||||
/// including all the actors needed by large map system
|
/// including all the actors needed by large map system
|
||||||
|
@ -174,8 +137,6 @@ private:
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
bool CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo);
|
bool CreateTilesMaps(const FMapGeneratorMetaInfo& MetaInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Searches for the specified map in the specified path in @a MetaInfo
|
/// Searches for the specified map in the specified path in @a MetaInfo
|
||||||
/// and starts the vegetation cooking process for each of the tile.
|
/// and starts the vegetation cooking process for each of the tile.
|
||||||
/// IMPORTANT: Only maps with '_Tile_' tag in it name are processed as
|
/// IMPORTANT: Only maps with '_Tile_' tag in it name are processed as
|
||||||
|
@ -184,13 +145,6 @@ private:
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
bool CookVegetationToTiles(const FMapGeneratorMetaInfo& MetaInfo);
|
bool CookVegetationToTiles(const FMapGeneratorMetaInfo& MetaInfo);
|
||||||
|
|
||||||
/// Gets the Landscape from the input world @a WorldAssetData and
|
|
||||||
/// applies the heightmap to it. The tile index is indexX and indexY in
|
|
||||||
/// @a TileMetaInfo argument
|
|
||||||
/// The funtions return true is success, otherwise false
|
|
||||||
UFUNCTION()
|
|
||||||
bool ApplyHeightMapToLandscape(FAssetData& WorldAssetData, FMapGeneratorTileMetaInfo TileMetaInfo);
|
|
||||||
|
|
||||||
/// Instantiate a procedural foliage volume for each element in @a FoliageSpawners
|
/// Instantiate a procedural foliage volume for each element in @a FoliageSpawners
|
||||||
/// and cooks the corresponding vegetation to @a World
|
/// and cooks the corresponding vegetation to @a World
|
||||||
/// Return true if success, false otherwise
|
/// Return true if success, false otherwise
|
||||||
|
|
Loading…
Reference in New Issue