Files
UnrealEngineUWP/Engine/Source/Editor/Persona/Private/PoseWatchManagerDefaultHierarchy.cpp
lucas dower 9d3cb8136b Added 'Pose Watch Manager' and other pose watch improvements
#rb Thomas.Sarkanen
#preflight 619e6b3f0141b3c6da60ae1d
#jira UE-127674

#ROBOMERGE-AUTHOR: lucas.dower
#ROBOMERGE-SOURCE: CL 18285294 in //UE5/Release-5.0/... via CL 18285317
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)

[CL 18285320 by lucas dower in ue5-release-engine-test branch]
2021-11-24 12:24:41 -05:00

72 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PoseWatchManagerDefaultHierarchy.h"
#include "PoseWatchManagerFolderTreeItem.h"
#include "PoseWatchManagerPoseWatchTreeItem.h"
#include "PoseWatchManagerDefaultMode.h"
#include "EditorFolderUtils.h"
#include "Engine/PoseWatch.h"
#include "Animation/AnimBlueprint.h"
#include "SPoseWatchManager.h"
FPoseWatchManagerDefaultHierarchy::FPoseWatchManagerDefaultHierarchy(FPoseWatchManagerDefaultMode* InMode) : Mode(InMode) {}
FPoseWatchManagerTreeItemPtr FPoseWatchManagerDefaultHierarchy::FindParent(const IPoseWatchManagerTreeItem& Item, const TMap<FObjectKey, FPoseWatchManagerTreeItemPtr>& Items) const
{
UPoseWatchFolder* ParentFolder = nullptr;
if (const FPoseWatchManagerFolderTreeItem* FolderTreeItem = Item.CastTo<FPoseWatchManagerFolderTreeItem>())
{
ParentFolder = FolderTreeItem->PoseWatchFolder->GetParent();
}
else if (const FPoseWatchManagerPoseWatchTreeItem* PoseWatchTreeItem = Item.CastTo<FPoseWatchManagerPoseWatchTreeItem>())
{
ParentFolder = PoseWatchTreeItem->PoseWatch->GetParent();
}
if (ParentFolder)
{
const FPoseWatchManagerTreeItemPtr* ParentTreeItem = Items.Find(ParentFolder);
if (ParentTreeItem)
{
return *ParentTreeItem;
}
}
return nullptr;
}
void FPoseWatchManagerDefaultHierarchy::CreateItems(TArray<FPoseWatchManagerTreeItemPtr>& OutItems) const
{
UAnimBlueprint* AnimBlueprint = Mode->PoseWatchManager->AnimBlueprint;
for (int32 Index = 0; Index < AnimBlueprint->PoseWatchFolders.Num(); ++Index)
{
TObjectPtr<UPoseWatchFolder>& PoseWatchFolder = AnimBlueprint->PoseWatchFolders[Index];
if (PoseWatchFolder)
{
FPoseWatchManagerTreeItemPtr PoseWatchFolderItem = Mode->PoseWatchManager->CreateItemFor<FPoseWatchManagerFolderTreeItem>(PoseWatchFolder);
OutItems.Add(PoseWatchFolderItem);
}
else
{
AnimBlueprint->PoseWatchFolders.RemoveAtSwap(Index);
}
}
for (int32 Index = 0; Index < AnimBlueprint->PoseWatches.Num(); ++Index)
{
TObjectPtr<UPoseWatch>& PoseWatch = AnimBlueprint->PoseWatches[Index];
if (PoseWatch)
{
if (!PoseWatch->GetShouldDeleteOnDeselect())
{
FPoseWatchManagerTreeItemPtr PoseWatchItem = Mode->PoseWatchManager->CreateItemFor<FPoseWatchManagerPoseWatchTreeItem>(PoseWatch);
OutItems.Add(PoseWatchItem);
}
}
else
{
AnimBlueprint->PoseWatches.RemoveAtSwap(Index);
}
}
}