#include "UnrealProject.h"
#include "AnimationProxy.h"

bool FMainAnimProxy::Evaluate(FPoseContext& pose)
{
	// Evalueate the animation pose according to the blueprint
	if(GetRootNode() != NULL)
	{
		GetRootNode()->Evaluate(pose);
	}

	// Now set bone scales for character customizations
	SetBoneScale(boneNames[0], FVector(charCustomization.headScale), pose);

	SetBoneScale(boneNames[1], FVector(1, charCustomization.legThicknessYScale, charCustomization.legThicknessZScale), pose);
	SetBoneScale(boneNames[2], FVector(1, charCustomization.legThicknessYScale, charCustomization.legThicknessZScale), pose);

	SetBoneScale(boneNames[3], FVector(charCustomization.leftArmScale), pose);
	SetBoneScale(boneNames[4], FVector(charCustomization.rightArmScale), pose);

	SetBoneScale(boneNames[5], FVector(charCustomization.torsoScale), pose);

	SetBoneScale(boneNames[6], FVector(charCustomization.overallScale), pose);

	return true;
}

void FMainAnimProxy::SetBoneScale(const FName boneName, const FVector scale, FPoseContext& pose)
{
	int32 boneIndex = this->GetSkelMeshComponent()->GetBoneIndex(boneName);
	// Check if bone is in the skeleton.
	if(boneIndex != INDEX_NONE)
	{
		FTransform& boneTransform = pose.Pose[FCompactPoseBoneIndex(boneIndex)];
		boneTransform.SetScale3D(scale);
	}
}