(Feat) Add Cooking and Workbench

This commit is contained in:
2026-08-01 00:03:53 +02:00
parent 3f3ae1f5fa
commit d50ef564ba
360 changed files with 5316 additions and 67 deletions
@@ -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;
};