FAnimationActiveTransitionEntry::FAnimationActiveTransitionEntry(int32 NextStateID, float ExistingWeightOfNextState, int32 PreviousStateID, const FAnimationTransitionBetweenStates& ReferenceTransitionInfo)
	: ElapsedTime(0.0f)
	, Alpha(0.0f)
	, CrossfadeMode(ReferenceTransitionInfo.CrossfadeMode)
	, bActive(true)
	, NextState(NextStateID)
	, PreviousState(PreviousStateID)
	, StartNotify(ReferenceTransitionInfo.StartNotify)
	, EndNotify(ReferenceTransitionInfo.EndNotify)
	, InterruptNotify(ReferenceTransitionInfo.InterruptNotify)
	, LogicType(ReferenceTransitionInfo.LogicType)
{
	// Adjust the duration of the blend based on the target weight to get us there quicker if we're closer
	const float Scaler = 1.0f - ExistingWeightOfNextState;
	CrossfadeDuration = ReferenceTransitionInfo.CrossfadeDuration * CalculateInverseAlpha(CrossfadeMode, Scaler);
}
FAnimationActiveTransitionEntry::FAnimationActiveTransitionEntry(int32 NextStateID, float ExistingWeightOfNextState, FAnimationActiveTransitionEntry* ExistingTransitionForNextState, int32 PreviousStateID, const FAnimationTransitionBetweenStates& ReferenceTransitionInfo)
	: ElapsedTime(0.0f)
	, Alpha(0.0f)
	, BlendOption(ReferenceTransitionInfo.BlendMode)
	, bActive(true)
	, NextState(NextStateID)
	, PreviousState(PreviousStateID)
	, StartNotify(ReferenceTransitionInfo.StartNotify)
	, EndNotify(ReferenceTransitionInfo.EndNotify)
	, InterruptNotify(ReferenceTransitionInfo.InterruptNotify)
	, LogicType(ReferenceTransitionInfo.LogicType)
	, BlendProfile(ReferenceTransitionInfo.BlendProfile)
{
	const float Scaler = 1.0f - ExistingWeightOfNextState;
	CrossfadeDuration = ReferenceTransitionInfo.CrossfadeDuration * CalculateInverseAlpha(BlendOption, Scaler);

	Blend.SetBlendTime(CrossfadeDuration);
	Blend.SetBlendOption(BlendOption);
	Blend.SetCustomCurve(ReferenceTransitionInfo.CustomCurve);
	Blend.SetValueRange(0.0f, 1.0f);
}