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