Files
UnrealEngine/Engine/Source/Runtime/UMG/Private/Animation/WidgetAnimationHandle.cpp
2025-05-18 13:04:45 +08:00

78 lines
1.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Animation/WidgetAnimationHandle.h"
#include "Animation/UMGSequencePlayer.h"
#include "Animation/WidgetAnimationState.h"
#include "Blueprint/UserWidget.h"
#include "EdGraph/EdGraphPin.h"
FWidgetAnimationHandle::FWidgetAnimationHandle()
{
}
FWidgetAnimationHandle::FWidgetAnimationHandle(UUserWidget* InUserWidget, int32 InStateIndex, uint32 InStateSerial)
: WeakUserWidget(InUserWidget)
, StateIndex(InStateIndex)
, StateSerial(InStateSerial)
{
}
bool FWidgetAnimationHandle::IsValid() const
{
return (WeakUserWidget.IsValid() && StateIndex >= 0);
}
UUMGSequencePlayer* FWidgetAnimationHandle::GetSequencePlayer() const
{
if (FWidgetAnimationState* State = GetAnimationState())
{
return State->GetOrCreateLegacyPlayer();
}
return nullptr;
}
FWidgetAnimationState* FWidgetAnimationHandle::GetAnimationState() const
{
if (UUserWidget* UserWidget = WeakUserWidget.Get())
{
if (UserWidget->ActiveAnimations.IsValidIndex(StateIndex))
{
FWidgetAnimationState& ActiveState = UserWidget->ActiveAnimations[StateIndex];
if (ActiveState.SerialNumber == StateSerial)
{
return &ActiveState;
}
}
}
return nullptr;
}
FName FWidgetAnimationHandle::GetUserTag() const
{
if (FWidgetAnimationState* State = GetAnimationState())
{
return State->GetUserTag();
}
return NAME_None;
}
void FWidgetAnimationHandle::SetUserTag(FName InUserTag)
{
if (FWidgetAnimationState* State = GetAnimationState())
{
State->SetUserTag(InUserTag);
}
}
FName UWidgetAnimationHandleFunctionLibrary::GetUserTag(const FWidgetAnimationHandle& Target)
{
return Target.GetUserTag();
}
void UWidgetAnimationHandleFunctionLibrary::SetUserTag(FWidgetAnimationHandle& Target, FName InUserTag)
{
Target.SetUserTag(InUserTag);
}