(Feat) Add Craft Systeme

This commit is contained in:
2026-07-30 23:08:33 +02:00
parent 9b5ad7c8a4
commit 3f3ae1f5fa
57 changed files with 2276 additions and 127 deletions
@@ -3,6 +3,9 @@
#pragma once
#include "CoreMinimal.h"
// ESlateVisibility n'est que declare en avant par le moteur : il faut le type
// complet pour en stocker une valeur par defaut.
#include "Components/SlateWrapperTypes.h"
#include "GameFramework/PlayerController.h"
#include "FpsPlayerController.generated.h"
@@ -11,7 +14,7 @@ class UHotbarWidget;
class UInputAction;
class UInventoryComponent;
class UInteractionPromptWidget;
class UInventoryWidget;
class UInventoryScreenWidget;
class UPauseMenuWidget;
class UScreenFadeComponent;
class USettingsMenuWidget;
@@ -32,10 +35,17 @@ class SURVIVAL_PROJET_API AFpsPlayerController : public APlayerController
public:
AFpsPlayerController();
/** Ouvre ou ferme l'inventaire. */
/** Ouvre ou ferme l'ecran, toujours sur l'onglet Inventaire. */
UFUNCTION(BlueprintCallable, Category = "UI")
void ToggleInventory();
/**
* Ouvre l'ecran directement sur l'onglet Fabrication.
* Depuis l'onglet Inventaire elle bascule, depuis l'onglet Fabrication elle referme.
*/
UFUNCTION(BlueprintCallable, Category = "UI")
void ToggleCrafting();
UFUNCTION(BlueprintPure, Category = "UI")
bool IsInventoryOpen() const { return bInventoryOpen; }
@@ -99,6 +109,14 @@ protected:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input")
TObjectPtr<UInputAction> ToggleInventoryAction;
/**
* Ouverture directe sur l'onglet Fabrication, valeur Digital (bool).
* Sur le controller comme ToggleInventoryAction : elle doit repondre alors
* meme que l'input du pawn est coupe, ecran ouvert.
*/
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input")
TObjectPtr<UInputAction> ToggleCraftingAction;
/**
* Jette l'objet survole, valeur Digital (bool). Ctrl enfonce = un seul
* exemplaire au lieu de la pile entiere.
@@ -146,9 +164,13 @@ protected:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
TSubclassOf<UInteractionPromptWidget> InteractionPromptClass;
/** Ton WBP_Inventory. */
/**
* Ton WBP_InventoryScreen : l'ecran a onglets qui contient la grille
* d'inventaire ET la page de fabrication. Ce n'est plus WBP_Inventory
* directement, celui-ci est devenu une page a l'interieur.
*/
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
TSubclassOf<UInventoryWidget> InventoryClass;
TSubclassOf<UInventoryScreenWidget> InventoryScreenClass;
/** Ton WBP_Hotbar, affiche en permanence. */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
@@ -201,7 +223,7 @@ protected:
TObjectPtr<UInteractionPromptWidget> InteractionPrompt;
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI")
TObjectPtr<UInventoryWidget> InventoryWidget;
TObjectPtr<UInventoryScreenWidget> InventoryScreen;
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI")
TObjectPtr<UHotbarWidget> Hotbar;
@@ -246,6 +268,26 @@ private:
UFUNCTION()
void HandleSettingsCloseRequested();
/**
* Point d'entree unique de l'ouverture et de la fermeture de l'ecran.
*
* Tab et la touche de fabrication passent tous les deux par ici : le mode
* d'input, la souris et la barre rapide sont ainsi decides a un seul endroit.
* Deux chemins separes finiraient par diverger.
*/
void SetInventoryScreenOpen(bool bOpen, bool bShowCraftingTab);
/** L'ecran a change d'onglet : la barre rapide n'a rien a faire sous la page de craft. */
UFUNCTION()
void HandleInventoryTabChanged(bool bInventoryTabActive);
/**
* Etat unique de la barre rapide : visible partout, sauf par-dessus l'onglet
* Fabrication. Passer par une seule fonction evite les cas ou la fermeture
* de l'ecran laisserait la barre cachee.
*/
void UpdateHotbarVisibility();
/** Jette la pile survolee dans la grille, si l'inventaire est ouvert. */
void DropHoveredItem();
@@ -266,6 +308,17 @@ private:
bool bInventoryOpen = false;
/** Onglet Fabrication affiche. N'a de sens que si bInventoryOpen est vrai. */
bool bCraftingTabActive = false;
/**
* Visibilite d'origine de la barre rapide, relevee a sa creation.
* On la restaure telle quelle plutot que de forcer Visible : le Blueprint a
* peut-etre choisi SelfHitTestInvisible, et l'ecraser changerait
* silencieusement son comportement au clic.
*/
ESlateVisibility HotbarDefaultVisibility = ESlateVisibility::Visible;
bool bPauseMenuOpen = false;
/**