(Feat) Add Animation Fps Charater
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "InteractionPromptWidget.generated.h"
|
||||
|
||||
class UInteractionComponent;
|
||||
class UTextBlock;
|
||||
|
||||
/**
|
||||
* Affiche "Appuyez sur E pour Ramasser Objet" quand le joueur vise quelque
|
||||
* chose d'interactif, et se cache sinon.
|
||||
*
|
||||
* La classe est Abstract : on ne l'instancie jamais directement, on cree un
|
||||
* Widget Blueprint (WBP_InteractionPrompt) qui en herite. Le C++ porte la
|
||||
* logique, le Blueprint porte la mise en page. C'est la separation standard
|
||||
* en UMG, l'equivalent d'un prefab d'UI avec son script en Unity.
|
||||
*
|
||||
* Le widget ne fait AUCUN travail par frame : il s'abonne au delegue
|
||||
* OnPromptChanged du composant d'interaction et ne se met a jour que lorsque
|
||||
* le texte change reellement.
|
||||
*
|
||||
* OnPromptChanged et pas OnFocusChanged : le texte peut bouger sans que la
|
||||
* cible change -- un feu de camp qui egrene son compte a rebours, ou le regard
|
||||
* qui glisse d'un emplacement du grill a l'autre sur le meme acteur.
|
||||
*/
|
||||
UCLASS(Abstract)
|
||||
class EMBERWILD_API UInteractionPromptWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
virtual void NativeConstruct() override;
|
||||
virtual void NativeDestruct() override;
|
||||
|
||||
/** (Re)branche sur le composant d'interaction du pawn possede. */
|
||||
void BindToOwningPawn();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* meta = (BindWidget) : Unreal relie automatiquement ce pointeur au widget
|
||||
* nomme exactement "PromptText" dans le Widget Blueprint enfant. Si tu
|
||||
* oublies de le creer ou que tu le renommes, le Blueprint refuse de
|
||||
* compiler avec un message clair -- pas de crash silencieux au runtime.
|
||||
*/
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UTextBlock> PromptText;
|
||||
|
||||
/**
|
||||
* Texte affiche. {0} sera remplace par la touche, {1} par l'action.
|
||||
* Editable dans le Widget Blueprint pour ajuster la formulation.
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction")
|
||||
FText PromptFormat;
|
||||
|
||||
UInteractionPromptWidget(const FObjectInitializer& ObjectInitializer);
|
||||
|
||||
private:
|
||||
/** Appele par le composant d'interaction a chaque changement du texte affiche. */
|
||||
UFUNCTION()
|
||||
void HandlePromptChanged(const FText& NewPrompt);
|
||||
|
||||
/** Recalcule le texte et la visibilite. */
|
||||
void Refresh();
|
||||
|
||||
/** Nom lisible de la touche actuellement mappee sur l'action Interagir. */
|
||||
FText GetInteractKeyDisplayName() const;
|
||||
|
||||
/** Le composant auquel on est abonne, pour pouvoir se desabonner proprement. */
|
||||
TWeakObjectPtr<UInteractionComponent> BoundComponent;
|
||||
};
|
||||
Reference in New Issue
Block a user