You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
93 lines
2.8 KiB
C++
93 lines
2.8 KiB
C++
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|||
|
|
|
|||
|
|
#include "AnimNodes/AnimNode_CallFunction.h"
|
|||
|
|
#include "Animation/AnimInstanceProxy.h"
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::OnInitializeAnimInstance(const FAnimInstanceProxy* InProxy, const UAnimInstance* InAnimInstance)
|
|||
|
|
{
|
|||
|
|
if(FunctionName != NAME_None)
|
|||
|
|
{
|
|||
|
|
Function = InAnimInstance->FindFunction(FunctionName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Counter.Reset();
|
|||
|
|
CurrentWeight = 0.0f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::GatherDebugData(FNodeDebugData& DebugData)
|
|||
|
|
{
|
|||
|
|
DebugData.AddDebugItem(TEXT("CallFunction"));
|
|||
|
|
|
|||
|
|
Source.GatherDebugData(DebugData);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::CallFunctionFromCallSite(EAnimFunctionCallSite InCallSite, const FAnimationBaseContext& InContext) const
|
|||
|
|
{
|
|||
|
|
if(CallSite == InCallSite && Function != nullptr)
|
|||
|
|
{
|
|||
|
|
UObject* AnimInstanceObject = InContext.AnimInstanceProxy->GetAnimInstanceObject();
|
|||
|
|
AnimInstanceObject->ProcessEvent(Function, nullptr);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::Update_AnyThread(const FAnimationUpdateContext& InContext)
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnUpdate, InContext);
|
|||
|
|
|
|||
|
|
bool bBecameRelevant = false;
|
|||
|
|
if(!Counter.HasEverBeenUpdated() || !Counter.WasSynchronizedCounter(InContext.AnimInstanceProxy->GetUpdateCounter()))
|
|||
|
|
{
|
|||
|
|
bBecameRelevant = true;
|
|||
|
|
CurrentWeight = 0.0f;
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnBecomeRelevant, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const float NewWeight = InContext.GetFinalBlendWeight();
|
|||
|
|
if(FAnimWeight::IsFullWeight(CurrentWeight) && !FAnimWeight::IsFullWeight(NewWeight))
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnStartedBlendingOut, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(!FAnimWeight::IsRelevant(CurrentWeight) && FAnimWeight::IsRelevant(NewWeight))
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnStartedBlendingIn, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(!FAnimWeight::IsFullWeight(CurrentWeight) && FAnimWeight::IsFullWeight(NewWeight))
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnFinishedBlendingIn, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Source.Update(InContext);
|
|||
|
|
|
|||
|
|
if(bBecameRelevant)
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnBecomeRelevantPostRecursion, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnUpdatePostRecursion, InContext);
|
|||
|
|
|
|||
|
|
Counter.SynchronizeWith(InContext.AnimInstanceProxy->GetUpdateCounter());
|
|||
|
|
CurrentWeight = NewWeight;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::Evaluate_AnyThread(FPoseContext& InContext)
|
|||
|
|
{
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnEvaluate, InContext);
|
|||
|
|
|
|||
|
|
Source.Evaluate(InContext);
|
|||
|
|
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnEvaluatePostRecursion, InContext);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void FAnimNode_CallFunction::Initialize_AnyThread(const FAnimationInitializeContext& InContext)
|
|||
|
|
{
|
|||
|
|
CurrentWeight = 0.0f;
|
|||
|
|
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnInitialize, InContext);
|
|||
|
|
|
|||
|
|
Source.Initialize(InContext);
|
|||
|
|
|
|||
|
|
CallFunctionFromCallSite(EAnimFunctionCallSite::OnInitializePostRecursion, InContext);
|
|||
|
|
}
|