55 lines
2.5 KiB
C++
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;
|
|
};
|