StateTree: Fixed ID clash when duplicating transitions, plus misc editor fixes

- Fix duplicate state
- Fix creating new node IDs when a whole transitions is duplicated
- Fixed state ID leaking into state names, when ID debug display is on
- Fixed updating the state tree view when task type is changed

[FYI] yoan.stamant

[CL 26145413 by mikko mononen in ue5-main branch]
This commit is contained in:
mikko mononen
2023-06-21 08:18:32 -04:00
parent 7cae5b8131
commit dbda318952
7 changed files with 77 additions and 14 deletions

View File

@@ -242,8 +242,38 @@ void FStateTreeTransitionDetails::OnCopyTransition() const
}
}
UStateTreeEditorData* FStateTreeTransitionDetails::GetEditorData() const
{
TArray<UObject*> OuterObjects;
StructProperty->GetOuterObjects(OuterObjects);
for (UObject* Outer : OuterObjects)
{
UStateTreeEditorData* OuterEditorData = Cast<UStateTreeEditorData>(Outer);
if (OuterEditorData == nullptr)
{
OuterEditorData = Outer->GetTypedOuter<UStateTreeEditorData>();
}
if (OuterEditorData)
{
return OuterEditorData;
}
}
return nullptr;
}
void FStateTreeTransitionDetails::OnPasteTransition() const
{
UStateTreeEditorData* EditorData = GetEditorData();
if (!EditorData)
{
return;
}
FStateTreeEditorPropertyBindings* Bindings = EditorData->GetPropertyEditorBindings();
if (!Bindings)
{
return;
}
FString PastedText;
FPlatformApplicationMisc::ClipboardPaste(PastedText);
@@ -267,6 +297,16 @@ void FStateTreeTransitionDetails::OnPasteTransition() const
if (FStateTreeTransition* Transition = static_cast<FStateTreeTransition*>(RawData[Index]))
{
Transition->ID = FGuid::NewGuid();
for (FStateTreeEditorNode& Condition : Transition->Conditions)
{
const FGuid OldStructID = Condition.ID;
Condition.ID = FGuid::NewGuid();
if (OldStructID.IsValid())
{
Bindings->CopyBindings(OldStructID, Condition.ID);
}
}
}
}

View File

@@ -8,8 +8,7 @@ class IPropertyHandle;
class IPropertyUtilities;
class IDetailChildrenBuilder;
class FDetailWidgetRow;
class UStateTree;
class UStateTreeState;
class UStateTreeEditorData;
enum class EStateTreeTransitionTrigger : uint8;
/**
@@ -28,6 +27,8 @@ public:
private:
UStateTreeEditorData* GetEditorData() const;
FText GetDescription() const;
EStateTreeTransitionTrigger GetTrigger() const;