// Project Lab - NHTV Igad

#include "UnrealProject.h"
#include "MinionAnimInstance.h"

UMinionAnimInstance::UMinionAnimInstance(const FObjectInitializer& init)
	: Super(init)
{
	m_animationState = EMinionAnimState::MAS_Idle;
}

void UMinionAnimInstance::NativeInitializeAnimation()
{
	Super::NativeInitializeAnimation();
	m_animationState = EMinionAnimState::MAS_Idle;
}

void UMinionAnimInstance::NativeUpdateAnimation(float deltaSeconds)
{
	Super::NativeUpdateAnimation(deltaSeconds);

	APawn* ownerPawn = TryGetPawnOwner();

	if (IsValid(ownerPawn))
	{
		const FVector velocity = ownerPawn->GetVelocity();
		const FVector forward = ownerPawn->GetActorForwardVector().GetSafeNormal2D();

		m_movementSpeed = velocity.Size();

		float angleBetween = FMath::FindDeltaAngle(forward.HeadingAngle(), velocity.GetSafeNormal2D().HeadingAngle());
		m_movementDirectionRelative = FVector(cos(angleBetween), sin(angleBetween), 0);
	}
}

EMinionAnimState UMinionAnimInstance::GetAnimationState()
{
	return m_animationState;
}

bool UMinionAnimInstance::IsInAnimationState(const EMinionAnimState minionStateCheck)
{
	return (m_animationState == minionStateCheck);
}

void UMinionAnimInstance::ChangeAnimationStateTo(EMinionAnimState newState)
{
	m_animationState = newState;
}

void UMinionAnimInstance::BPChangeAnimationStateTo(EMinionAnimState newState)
{
	m_animationState = newState;
	OnAnimationStateChanged.Broadcast(newState);
}

void UMinionAnimInstance::PlaySpecificAnimationByInt(int32 animationToPlay)
{
	m_specificAnimationIndex = animationToPlay;
	ChangeAnimationStateTo(EMinionAnimState::MAS_Specific);
}