haxis/Source/UnrealProject/Creatures/MinionAnimInstance.cpp

61 lines
1.6 KiB
C++

// 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);
}