// Fill out your copyright notice in the Description page of Project Settings.


#include "AnimNotify_ItemAction.h"

#include "Components/SkeletalMeshComponent.h"
#include "Engine/World.h"
#include "FpsPlayer.h"

void UAnimNotify_ItemAction::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation,
	const FAnimNotifyEventReference& EventReference)
{
	Super::Notify(MeshComp, Animation, EventReference);

	if (!MeshComp)
	{
		return;
	}

	// L'editeur d'animation joue les notifies dans sa fenetre de previsualisation,
	// sur un mesh de preview qui n'appartient a aucun pawn. Le Cast ci-dessous
	// suffirait a s'en proteger, mais le monde de preview n'est pas un monde de
	// jeu et rien de ce qui suit n'y aurait de sens : on s'arrete plus tot.
	const UWorld* World = MeshComp->GetWorld();
	if (!World || !World->IsGameWorld())
	{
		return;
	}

	// Le montage tourne sur les bras ou sur le corps, deux composants du pawn :
	// dans les deux cas le proprietaire du mesh EST le personnage.
	if (AFpsPlayer* Player = Cast<AFpsPlayer>(MeshComp->GetOwner()))
	{
		Player->TriggerHeldItemAction();
	}
}

FString UAnimNotify_ItemAction::GetNotifyName_Implementation() const
{
	// Ce qui s'affiche sur le marqueur dans la timeline du montage. Sans cette
	// surcharge le moteur y ecrirait le nom de la classe, prefixe compris.
	return TEXT("Item Action");
}
