commiting Source folder. Got forgotten in previous commits

This commit is contained in:
2026-04-09 21:44:44 +02:00
parent 4338efdb30
commit 563df1ffc8
91 changed files with 6756 additions and 0 deletions

View File

@@ -0,0 +1,262 @@
#include "GaeaUEToolsEditor.h"
#include "GaeaEditorStyle.h"
#include "EditorStyleSet.h"
#include "GaeaCommands.h"
#include "LevelEditor.h"
#include "Misc/CoreDelegates.h"
#include "Subsystems/EditorActorSubsystem.h"
#include "GaeaLandscapeComponent.h"
#include "Landscape.h"
#include "ToolMenus.h"
#include "WorldPartition/WorldPartitionSubsystem.h"
DEFINE_LOG_CATEGORY(GaeaUETools);
#define LOCTEXT_NAMESPACE "FGaeaUEToolsEditorModule"
void FGaeaUEToolsEditorModule::StartupModule()
{
FGaeaEditorStyle::Initialize();
FGaeaCommands::Register();
/*UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(
this, &FGaeaUEToolsEditorModule::RegisterMCWindow));*/ // Register Material Creator Callback
UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(
this, &FGaeaUEToolsEditorModule::RegisterGaeaActorMenu));
/*UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(
this, &FGaeaUEToolsEditorModule::RegisterLandscapeActorMenu));*/
UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(
this, &FGaeaUEToolsEditorModule::RegisterImporterWindow)); // Register Importer Callback
// Bind the commands
const FLevelEditorModule& LevelEditor = FModuleManager::GetModuleChecked<FLevelEditorModule>("LevelEditor");
const TSharedRef<FUICommandList> Commands = LevelEditor.GetGlobalLevelEditorActions();
Commands->MapAction(
FGaeaCommands::Get().OpenImporter,
FExecuteAction::CreateLambda([this]()
{
UE_LOG(LogTemp, Log, TEXT("Opening Gaea Landscape Importer Window"));
if (UGaeaSubsystem* GSubsystem = UGaeaSubsystem::GetGaeaSubsystem())
{
//UE_LOG(LogTemp, Log, TEXT("Opened Gaea Landscape Importer Window."));
GSubsystem->SpawnGImporterWindow();
}
})
);
}
void FGaeaUEToolsEditorModule::ShutdownModule()
{
FGaeaEditorStyle::Shutdown();
FGaeaCommands::Unregister();
UToolMenus::UnregisterOwner(this); //Unregister menu entry
}
/*void FGaeaUEToolsEditorModule::RegisterMCWindow()
{
//Register owner for menu entry
FToolMenuOwnerScoped OwnerScoped(this);
//Set our menu entry name
constexpr TCHAR ParentMenuName[] = TEXT("ContentBrowser.Toolbar");
UToolMenu* GaeaToolBar = UToolMenus::Get()->ExtendMenu(ParentMenuName);
GaeaToolBar->StyleName = TEXT("GaeaToolbar");
//Find the section of the editor menu we want to add to
//FToolMenuSection& Section = GaeaToolBar->FindOrAddSection("Tools");
FToolMenuSection& Section = GaeaToolBar->AddSection(TEXT("Gaea Material Creator"), LOCTEXT("GaeaMaterialTools_Label", "GaeaMaterialTools"));
//Create and define our UI action
FToolUIAction OpenGaeaMaterialAction;
OpenGaeaMaterialAction.ExecuteAction = FToolMenuExecuteAction::CreateLambda([](const FToolMenuContext& InContext)
{
if ( UGaeaSubsystem* Manager = UGaeaSubsystem::GetGaeaSubsystem())
{
Manager->SpawnGMCWindow(); // Spawn Material Creator Window
}
}
);
//Create our custom toolbar entry
const FToolMenuEntry OpenGaeaLandscapeMaterialCreator = FToolMenuEntry::InitToolBarButton(
TEXT("OpenGaeaLandscapeMaterialCreator"),
OpenGaeaMaterialAction,
LOCTEXT("OpenGaeaLandscapeMaterialCreator_Label", "Gaea Landscape Material Creation"),
LOCTEXT("OpenGaeaLandscapeMaterialCreator_Label_Description", "Opens Gaea Material Creator"),
FSlateIcon(FAppStyle::Get().GetStyleSetName(), TEXT("ClassIcon.Material")))
;
//Add our custom menu entry to our previously selected menu section
Section.AddEntry(OpenGaeaLandscapeMaterialCreator);
}*/
void FGaeaUEToolsEditorModule::RegisterImporterWindow()
{
//Register owner for menu entry
FToolMenuOwnerScoped OwnerScoped(this);
//Set our menu entry name
constexpr TCHAR ParentMenuName[] = TEXT("LevelEditor.LevelEditorToolBar.User");
UToolMenu* GaeaToolBar = UToolMenus::Get()->ExtendMenu(ParentMenuName);
GaeaToolBar->StyleName = TEXT("GaeaToolbar");
//Find the section of the editor menu we want to add to
//FToolMenuSection& Section = GaeaToolBar->FindOrAddSection("User");
FToolMenuSection& Section = GaeaToolBar->AddSection(TEXT("Gaea Landscape Importer"), LOCTEXT("GaeaLandscapeImporter_Label", "GaeaImporterTools"));
//Create and define our UI action
FToolUIAction OpenGaeaImporter;
OpenGaeaImporter.ExecuteAction = FToolMenuExecuteAction::CreateLambda([](const FToolMenuContext& InContext)
{
if ( UGaeaSubsystem* Manager = UGaeaSubsystem::GetGaeaSubsystem())
{
Manager->SpawnGImporterWindow(); // Spawn Importer Window
}
}
);
//Create our custom toolbar entry - OLD. Does not work with editor shortcut key.
/*const FToolMenuEntry OpenGaeaLandscapeImporter = FToolMenuEntry::InitToolBarButton(
TEXT("OpenGaeaLandscapeImporter"),
OpenGaeaImporter,
LOCTEXT("OpenGaeaLandscapeImporter_Label", "Gaea Landscape Importer"),
LOCTEXT("OpenGaeaLandscapeImporter_Label_Description", "Opens Gaea Landscape Importer"),
//FSlateIcon(FAppStyle::Get().GetStyleSetName(), TEXT("ClassIcon.LandscapeComponent")));
FSlateIcon(FGaeaEditorStyle::GetStyleSetName(), TEXT("ImporterIcon"))
);*/
const FToolMenuEntry OpenGaeaLandscapeImporter = FToolMenuEntry::InitToolBarButton(
FGaeaCommands::Get().OpenImporter,
LOCTEXT("OpenGaeaLandscapeImporter_Label", "Gaea Landscape Importer"),
LOCTEXT("OpenGaeaLandscapeImporter_Label_Description", "Opens Gaea Landscape Importer"),
FSlateIcon(FGaeaEditorStyle::GetStyleSetName(), TEXT("ImporterIcon"))
);
//Add our custom menu entry to our previously selected menu section
Section.AddEntry(OpenGaeaLandscapeImporter);
}
void FGaeaUEToolsEditorModule::RegisterGaeaActorMenu()
{
// Register owner for menu entry
FToolMenuOwnerScoped OwnerScoped(this);
// Create menu entry button in a new sub-menu
UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.ActorContextMenu");
Menu->AddDynamicSection("GaeaOptions", FNewToolMenuDelegate::CreateLambda([this](UToolMenu* InMenu)
{
// This delegate is called when it is time to create the menu section
UEditorActorSubsystem* ActorSubsystem = GEditor->GetEditorSubsystem<UEditorActorSubsystem>();
if (ActorSubsystem)
{
const TArray<AActor*>& SelectedActors = ActorSubsystem->GetSelectedLevelActors();
if (SelectedActors.Num() > 0)
{
AActor* Actor = SelectedActors[0];
if (Actor && Actor->GetClass()->IsChildOf(ALandscape::StaticClass()))
{
if (UGaeaLandscapeComponent* GaeaComponent = Actor->FindComponentByClass<UGaeaLandscapeComponent>())
{
// If a Landscape is selected, then add an item to the section
FToolMenuSection& Section = InMenu->AddSection("GaeaOptionsSection",
FText::FromString("Gaea Options"),
FToolMenuInsert("ActorGeneral", EToolMenuInsertType::Before));
Section.AddSubMenu(
"GaeaLandscapeSubMenu",
FText::FromString("Gaea Landscape Actions"),
FText::FromString("Contains various actions for landscapes imported from Gaea"),
FNewMenuDelegate::CreateRaw(this, &FGaeaUEToolsEditorModule::GaeaActorActions),
false,
FSlateIcon(FGaeaEditorStyle::GetStyleSetName(), TEXT("ImporterIcon"))
);
}
}
}
}
}));
}
void FGaeaUEToolsEditorModule::GaeaActorActions(FMenuBuilder& MenuBuilder)
{
FUIAction ExecuteReimportGaeaLandscape(
FExecuteAction::CreateLambda([]() {
if (UGaeaSubsystem* Manager = UGaeaSubsystem::GetGaeaSubsystem())
{
UWorld* World = GEditor->GetEditorWorldContext().World();
if (World)
{
if (World->IsPartitionedWorld())
{
Manager->ReimportGaeaWPTerrain(); // Reimport for World Partition
}
else
{
Manager->ReimportGaeaTerrain(); // Reimport for standard landscape
}
} // ReimportTerrain
}
})
);
MenuBuilder.AddMenuEntry(
FText::FromString("Refresh Landscape in Place"),
FText::FromString("Clears current landscape actor internal data and fills with the associated heightmap/weightmaps"),
FSlateIcon(),
ExecuteReimportGaeaLandscape
);
}
void FGaeaUEToolsEditorModule::RegisterLandscapeActorMenu()
{
FToolMenuOwnerScoped OwnerScoped(this);
UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorSceneOutliner.ContextMenu");
FToolMenuSection& Section = Menu->FindOrAddSection("ActorOptions");
Section.AddDynamicEntry("DeleteWPLandscapeEntry", FNewToolMenuSectionDelegate::CreateLambda([](FToolMenuSection& Section)
{
FToolMenuEntry Entry = FToolMenuEntry::InitMenuEntry(
"DeleteWPLandscapeEntry",
FText::FromString("Delete World Partitioned Landscape"),
FText::FromString("Deletes selected landscape and its proxies."),
FSlateIcon(FGaeaEditorStyle::GetStyleSetName(), "ImporterIcon"),
FUIAction(
FExecuteAction::CreateLambda([]()
{
if (UGaeaSubsystem* Subsystem = UGaeaSubsystem::GetGaeaSubsystem())
{
//Subsystem->DeleteWPLandscape();
}
}),
FCanExecuteAction::CreateLambda([]()
{
UEditorActorSubsystem* ActorSubsystem = GEditor->GetEditorSubsystem<UEditorActorSubsystem>();
const TArray<AActor*>& Selected = ActorSubsystem->GetSelectedLevelActors();
const UWorld* World = GEditor->GetEditorWorldContext().World();
const bool bWP = World->IsPartitionedWorld();
return Selected.Num() > 0 && Selected[0]->IsA<ALandscape>() && bWP;
})
)
);
Entry.InsertPosition = FToolMenuInsert("EditSubMenu", EToolMenuInsertType::After);
Section.AddEntry(Entry);
}));
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FGaeaUEToolsEditorModule, GaeaUEToolsEditor)