(Feat) Add Storage Chests + Item Details Panel
Coffres : AStorageContainer, un UInventoryComponent configure en conteneur, affiche comme panneau de WBP_InventoryScreen plutot que dans un ecran a lui. Deplacement unifie par UInventoryComponent::TransferSlot / TransferAllTo. Panneau de detail : UItemDetailsWidget, pose DANS WBP_Inventory a droite de la grille. Icone, nom, separation, description, barre d'usure. Il recoit un couple (inventaire, index) et s'abonne a OnInventoryChanged, donc une charge consommee sous le curseur se voit. Une case ne connait plus sa grille : elle diffuse OnHoverChanged. La barre rapide s'y abonne aussi et relaie par le PlayerController, seul a posseder a la fois le HUD et l'ecran. Le panneau efface la case qu'on QUITTE et non lui-meme, sinon passer de la barre a la grille viderait ce qui vient d'etre affiche. L'ecran allume et eteint le panneau (SetItemDetailsEnabled) : WBP_Inventory etant instancie deux fois en mode coffre, une case a cocher par instance serait un bug qui attend qu'on oublie de la decocher. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,15 @@ class UHorizontalBox;
|
||||
class UInventoryComponent;
|
||||
class UInventorySlotWidget;
|
||||
|
||||
/**
|
||||
* Le curseur entre ou sort d'une case de la barre rapide.
|
||||
*
|
||||
* La barre n'affiche rien elle-meme : le panneau de detail vit dans l'ecran
|
||||
* d'inventaire, qu'elle ne connait pas. C'est le PlayerController qui tient les
|
||||
* deux widgets et qui fait le pont -- il est deja le proprietaire du HUD.
|
||||
*/
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnHotbarSlotHovered, UInventoryComponent*, Inventory, int32, SlotIndex, bool, bHovered);
|
||||
|
||||
/**
|
||||
* Barre rapide en bas de l'ecran, affichee en permanence.
|
||||
*
|
||||
@@ -34,6 +43,19 @@ public:
|
||||
/** (Re)branche sur l'inventaire du pawn possede. Voir UInventoryWidget. */
|
||||
void BindToOwningPawn();
|
||||
|
||||
/**
|
||||
* Destination du clic droit pour les cases de la barre.
|
||||
*
|
||||
* La barre reste affichee et cliquable par-dessus l'ecran de coffre : sans
|
||||
* ca, le clic droit marcherait dans la grille et pas dans la barre, ce qui
|
||||
* passerait pour un bug. Le controller lui pousse le coffre a l'ouverture
|
||||
* et nullptr a la fermeture.
|
||||
*/
|
||||
void SetQuickTransferTarget(UInventoryComponent* InTarget);
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category = "Inventory")
|
||||
FOnHotbarSlotHovered OnSlotHovered;
|
||||
|
||||
protected:
|
||||
/** A nommer exactement "SlotContainer" dans le Widget Blueprint. */
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
@@ -54,12 +76,19 @@ private:
|
||||
UFUNCTION()
|
||||
void HandleSelectionChanged(int32 NewIndex);
|
||||
|
||||
/** Abonne aux cases : relaie le survol vers l'exterieur. */
|
||||
UFUNCTION()
|
||||
void HandleSlotHovered(int32 SlotIndex, bool bHovered);
|
||||
|
||||
void RebuildSlots(int32 DesiredCount);
|
||||
|
||||
UInventoryComponent* ResolveInventory() const;
|
||||
|
||||
TWeakObjectPtr<UInventoryComponent> BoundInventory;
|
||||
|
||||
/** Destination du clic droit, recopiee sur chaque case creee. */
|
||||
TWeakObjectPtr<UInventoryComponent> QuickTransferTarget;
|
||||
|
||||
/** UPROPERTY obligatoire : sans ca le GC collecterait les cases. */
|
||||
UPROPERTY(Transient)
|
||||
TArray<TObjectPtr<UInventorySlotWidget>> SlotWidgets;
|
||||
|
||||
Reference in New Issue
Block a user