Updated
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user