// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Animation/AnimNotifies/AnimNotify.h" #include "AnimNotify_ItemAction.generated.h" /** * Declenche l'effet de l'objet en main a l'instant precis ou le geste frappe. * * ------------------------------------------------------------------ * Pourquoi un notify plutot que le clic * ------------------------------------------------------------------ * * Le clic gauche et le COUP sont deux choses distinctes, separees par le temps * que met le bras a descendre. Faire partir le trace de recolte sur l'appui * donne une hache qui abat l'arbre avant de l'avoir touche : le joueur voit le * resultat, puis l'animation qui aurait du le produire. C'est le meme * decalage qu'un bruit de pas joue au debut de la foulee. * * L'instant de l'impact n'est pas une valeur qu'on puisse ecrire en C++ : il * appartient a l'ANIMATION, il change d'un montage a l'autre, et il rebouge a * chaque fois qu'on retouche la courbe. Un delai en secondes sur le DataAsset * serait a re-regler a la main a chaque nouvelle animation livree -- et faux * des qu'on toucherait au Play Rate. Le marqueur, lui, suit le montage. * * ------------------------------------------------------------------ * Reseau : ce notify ne tombe QUE chez le joueur local * ------------------------------------------------------------------ * * Le montage d'usage est joue sur les BRAS, qui sont en OnlyOwnerSee et * n'existent visuellement que chez le proprietaire du pawn * (UHeldItemComponent::PlayLocalArmsMontage). Le notify part donc sur une * seule machine, exactement comme le clic qu'il remplace, et le routage vers * le serveur reste celui d'avant : AFpsPlayer::TriggerHeldItemAction envoie la * RPC, le serveur fait autorite. * * Corollaire a ne pas oublier le jour ou un montage d'usage sera joue aussi sur * le CORPS (visible des autres joueurs) : ce montage-la tournerait sur les * quatre machines, et sans la garde IsLocallyControlled() de * TriggerHeldItemAction chaque coup de hache partirait en quatre exemplaires. */ UCLASS(const, hidecategories = Object, collapsecategories, meta = (DisplayName = "Item Action")) class EMBERWILD_API UAnimNotify_ItemAction : public UAnimNotify { GENERATED_BODY() public: virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override; virtual FString GetNotifyName_Implementation() const override; };