Files
Unreal_EmberWild/Source/EmberWild/Public/AnimNotify_ItemAction.h
T

55 lines
2.5 KiB
C++

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