(Feat) Add Cooking and Workbench
This commit is contained in:
@@ -13,6 +13,14 @@
|
||||
*/
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnInteractionFocusChanged, AActor*, NewFocus, AActor*, OldFocus);
|
||||
|
||||
/**
|
||||
* Diffuse quand le TEXTE du prompt change, ce qui n'est pas la meme chose qu'un
|
||||
* changement de cible : un feu de camp affiche un compte a rebours, et le fait
|
||||
* de balayer d'un emplacement a l'autre ne change pas l'acteur vise. S'abonner
|
||||
* uniquement a OnFocusChanged laisserait ces deux cas figes a l'ecran.
|
||||
*/
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnInteractionPromptChanged, const FText&, NewPrompt);
|
||||
|
||||
/**
|
||||
* A poser sur le pawn du joueur. Lance regulierement un trace depuis le point
|
||||
* de vue de la camera, garde en memoire l'objet IInteractable vise, et declenche
|
||||
@@ -40,14 +48,24 @@ public:
|
||||
UFUNCTION(BlueprintPure, Category = "Interaction")
|
||||
AActor* GetFocusedActor() const { return FocusedActor.Get(); }
|
||||
|
||||
/** Texte a afficher a l'ecran, vide si rien n'est vise. */
|
||||
/**
|
||||
* Texte a afficher a l'ecran, vide si rien n'est vise.
|
||||
*
|
||||
* Renvoie une valeur DEJA calculee : le prompt est reconstruit une fois par
|
||||
* trace, pas une fois par lecture. Un widget peut donc l'interroger sans
|
||||
* jamais declencher le moindre travail.
|
||||
*/
|
||||
UFUNCTION(BlueprintPure, Category = "Interaction")
|
||||
FText GetFocusedPrompt() const;
|
||||
const FText& GetFocusedPrompt() const { return CachedPrompt; }
|
||||
|
||||
/** Branche ton widget la-dessus pour afficher / cacher le prompt. */
|
||||
UPROPERTY(BlueprintAssignable, Category = "Interaction")
|
||||
FOnInteractionFocusChanged OnFocusChanged;
|
||||
|
||||
/** Le texte affiche a change. C'est a ca qu'un widget de prompt s'abonne. */
|
||||
UPROPERTY(BlueprintAssignable, Category = "Interaction")
|
||||
FOnInteractionPromptChanged OnPromptChanged;
|
||||
|
||||
protected:
|
||||
/** Portee du trace en cm. 250 = un peu plus d'un bras et demi. */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interaction", meta = (ClampMin = "1"))
|
||||
@@ -88,6 +106,9 @@ private:
|
||||
/** Point de vue reel du joueur, camera comprise. */
|
||||
bool GetViewPoint(FVector& OutLocation, FRotator& OutRotation) const;
|
||||
|
||||
/** Reconstruit CachedPrompt et diffuse uniquement si le texte a reellement change. */
|
||||
void RefreshPrompt();
|
||||
|
||||
/** Cible courante. TWeakObjectPtr : si l'objet est detruit, on ne garde pas un pointeur mort. */
|
||||
TWeakObjectPtr<AActor> FocusedActor;
|
||||
|
||||
@@ -99,5 +120,11 @@ private:
|
||||
*/
|
||||
bool bHasFocusedActor = false;
|
||||
|
||||
/**
|
||||
* Dernier texte diffuse. Le garder permet deux choses : ne reveiller l'UI
|
||||
* que sur un vrai changement, et servir GetFocusedPrompt() sans recalculer.
|
||||
*/
|
||||
FText CachedPrompt;
|
||||
|
||||
float TimeSinceLastTrace = 0.f;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user