This commit is contained in:
2025-04-23 01:18:06 +08:00
parent 83d52181f5
commit 0ea2281199
93 changed files with 8954 additions and 8943 deletions

View File

@@ -81,54 +81,45 @@ void FFLESHEditorModule::OpenFLESHEditorCommand()
OpenFLESHEditor(EToolkitMode::Standalone, nullptr, nullptr);
}
void FFLESHEditorModule::OpenFLESHEditor(const EToolkitMode::Type Mode, const TSharedPtr<IToolkitHost>& InitToolkitHost, UObject* ObjectToEdit)
void FFLESHEditorModule::OpenFLESHEditor(const EToolkitMode::Type Mode, const TSharedPtr<IToolkitHost>& InitToolkitHost, TObjectPtr<UObject> ObjectToEdit)
{
// Add try-catch block to prevent crashes when opening editor
// Add try-catch block to prevent crashes when opening the editor
try
{
// Check if FLESH module is loaded
if (!FModuleManager::Get().IsModuleLoaded("FLESH"))
{
UE_LOG(LogTemp, Error, TEXT("Cannot open FLESH Editor: FLESH module is not loaded"));
UE_LOG(LogTemp, Error, TEXT("Failed to open FLESH Editor: FLESH module not loaded"));
return;
}
// If no object is provided, create a default object to edit
// If no object is provided, create a default object
if (ObjectToEdit == nullptr)
{
// Try to find or create a dismemberment graph asset to edit
UClass* DismembermentGraphClass = FindObject<UClass>(nullptr, TEXT("/Script/FLESH.DismembermentGraphAsset"));
if (DismembermentGraphClass)
// Create a basic UObject
ObjectToEdit = NewObject<UObject>(GetTransientPackage(), UObject::StaticClass(), TEXT("DefaultFLESHObject"));
if (ObjectToEdit == nullptr)
{
// Try to find an existing asset first
ObjectToEdit = FindObject<UObject>(nullptr, TEXT("DefaultDismembermentGraph"));
// If not found, create a temporary object
if (ObjectToEdit == nullptr)
{
ObjectToEdit = NewObject<UObject>(GetTransientPackage(), DismembermentGraphClass, TEXT("DefaultDismembermentGraph"));
ObjectToEdit->AddToRoot(); // Prevent garbage collection
}
}
else
{
// If we can't find the class, create a basic UObject
ObjectToEdit = NewObject<UObject>(GetTransientPackage(), UObject::StaticClass(), TEXT("DefaultFLESHObject"));
ObjectToEdit->AddToRoot(); // Prevent garbage collection
UE_LOG(LogTemp, Error, TEXT("Failed to create default object, cannot open FLESH Editor"));
return;
}
}
// Create a new FLESH editor
TSharedRef<FFLESHEditor> NewFLESHEditor(new FFLESHEditor());
NewFLESHEditor->InitFLESHEditor(Mode, InitToolkitHost, ObjectToEdit);
UE_LOG(LogTemp, Log, TEXT("FLESH Editor successfully opened"));
}
catch (const std::exception& e)
{
UE_LOG(LogTemp, Error, TEXT("Failed to open FLESH Editor: %s"), UTF8_TO_TCHAR(e.what()));
FMessageDialog::Open(EAppMsgType::Ok, FText::Format(LOCTEXT("OpenEditorError", "Failed to open FLESH Editor: {0}"), FText::FromString(UTF8_TO_TCHAR(e.what()))));
}
catch (...)
{
UE_LOG(LogTemp, Error, TEXT("Failed to open FLESH Editor with unknown exception"));
UE_LOG(LogTemp, Error, TEXT("Unknown exception occurred when opening FLESH Editor"));
FMessageDialog::Open(EAppMsgType::Ok, LOCTEXT("OpenEditorUnknownError", "Unknown exception occurred when opening FLESH Editor"));
}
}