// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "HotbarWidget.generated.h" class UHorizontalBox; class UInventoryComponent; class UInventorySlotWidget; /** * Barre rapide en bas de l'ecran, affichee en permanence. * * Elle ne possede aucune donnee : elle montre les N premiers slots de * l'inventaire. Deplacer un objet de la grille vers la barre, c'est * simplement le deplacer vers un slot d'index bas -- le glisser-deposer * existant s'en occupe deja sans aucun code supplementaire. */ UCLASS(Abstract) class SURVIVAL_PROJET_API UHotbarWidget : public UUserWidget { GENERATED_BODY() public: virtual void NativeConstruct() override; virtual void NativeDestruct() override; /** Remet a jour contenu et selection. */ UFUNCTION(BlueprintCallable, Category = "Inventaire") void Refresh(); /** (Re)branche sur l'inventaire du pawn possede. Voir UInventoryWidget. */ void BindToOwningPawn(); protected: /** A nommer exactement "SlotContainer" dans le Widget Blueprint. */ UPROPERTY(meta = (BindWidget)) TObjectPtr SlotContainer; /** Le meme WBP_InventorySlot que la grille : une seule apparence a maintenir. */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Inventaire") TSubclassOf SlotWidgetClass; /** Espacement entre les cases. */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Inventaire", meta = (ClampMin = "0")) float SlotPadding = 4.f; private: UFUNCTION() void HandleInventoryChanged(); UFUNCTION() void HandleSelectionChanged(int32 NewIndex); void RebuildSlots(int32 DesiredCount); UInventoryComponent* ResolveInventory() const; TWeakObjectPtr BoundInventory; /** UPROPERTY obligatoire : sans ca le GC collecterait les cases. */ UPROPERTY(Transient) TArray> SlotWidgets; };