第一次提交

This commit is contained in:
不明不惑
2026-03-03 01:23:02 +08:00
commit 3e434877e8
1053 changed files with 102411 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#include "Nodes/GMS_AnimNode_CurvesBlend.h"
#include "Animation/AnimTrace.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(GMS_AnimNode_CurvesBlend)
void FGMS_AnimNode_CurvesBlend::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_FUNC()
Super::Initialize_AnyThread(Context);
SourcePose.Initialize(Context);
CurvesPose.Initialize(Context);
}
void FGMS_AnimNode_CurvesBlend::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_FUNC()
Super::CacheBones_AnyThread(Context);
SourcePose.CacheBones(Context);
CurvesPose.CacheBones(Context);
}
void FGMS_AnimNode_CurvesBlend::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_FUNC()
Super::Update_AnyThread(Context);
GetEvaluateGraphExposedInputs().Execute(Context);
SourcePose.Update(Context);
const auto CurrentBlendAmount{GetBlendAmount()};
if (FAnimWeight::IsRelevant(CurrentBlendAmount))
{
CurvesPose.Update(Context);
}
TRACE_ANIM_NODE_VALUE(Context, TEXT("Blend Amount"), CurrentBlendAmount);
TRACE_ANIM_NODE_VALUE(Context, TEXT("Blend Mode"), *StaticEnum<EGMS_CurvesBlendMode>()->GetNameStringByValue(static_cast<int64>(GetBlendMode())));
}
void FGMS_AnimNode_CurvesBlend::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_FUNC()
ANIM_MT_SCOPE_CYCLE_COUNTER_VERBOSE(CurvesBlend, !IsInGameThread());
Super::Evaluate_AnyThread(Output);
SourcePose.Evaluate(Output);
const auto CurrentBlendAmount{GetBlendAmount()};
if (!FAnimWeight::IsRelevant(CurrentBlendAmount))
{
return;
}
auto CurvesPoseContext{Output};
CurvesPose.Evaluate(CurvesPoseContext);
switch (GetBlendMode())
{
case EGMS_CurvesBlendMode::BlendByAmount:
Output.Curve.Accumulate(CurvesPoseContext.Curve, CurrentBlendAmount);
break;
case EGMS_CurvesBlendMode::Combine:
Output.Curve.Combine(CurvesPoseContext.Curve);
break;
case EGMS_CurvesBlendMode::CombinePreserved:
Output.Curve.CombinePreserved(CurvesPoseContext.Curve);
break;
case EGMS_CurvesBlendMode::UseMaxValue:
Output.Curve.UseMaxValue(CurvesPoseContext.Curve);
break;
case EGMS_CurvesBlendMode::UseMinValue:
Output.Curve.UseMinValue(CurvesPoseContext.Curve);
break;
case EGMS_CurvesBlendMode::Override:
Output.Curve.Override(CurvesPoseContext.Curve);
break;
}
}
void FGMS_AnimNode_CurvesBlend::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
TStringBuilder<256> DebugItemBuilder{InPlace, DebugData.GetNodeName(this), TEXTVIEW(": Blend Amount: ")};
DebugItemBuilder.Appendf(TEXT("%.2f"), GetBlendAmount());
DebugData.AddDebugItem(FString{DebugItemBuilder});
SourcePose.GatherDebugData(DebugData.BranchFlow(1.0f));
CurvesPose.GatherDebugData(DebugData.BranchFlow(GetBlendAmount()));
}
float FGMS_AnimNode_CurvesBlend::GetBlendAmount() const
{
return GET_ANIM_NODE_DATA(float, BlendAmount);
}
EGMS_CurvesBlendMode FGMS_AnimNode_CurvesBlend::GetBlendMode() const
{
return GET_ANIM_NODE_DATA(EGMS_CurvesBlendMode, BlendMode);
}