115 lines
3.6 KiB
C++
115 lines
3.6 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Blueprint/UserWidget.h"
|
|
#include "ItemDetailsWidget.generated.h"
|
|
|
|
class UImage;
|
|
class UInventoryComponent;
|
|
class UProgressBar;
|
|
class UTextBlock;
|
|
|
|
/**
|
|
* Le panneau qui decrit l'objet survole : icone, nom, description, usure.
|
|
* Rien d'autre -- volontairement.
|
|
*
|
|
* Il ne connait ni la grille ni l'ecran. On lui pousse un couple
|
|
* (inventaire, index) et il lit -- et NON une copie du FInventorySlot :
|
|
* le contenu peut changer pendant le survol (une charge consommee, un craft
|
|
* qui vide la pile), donc le panneau s'abonne a OnInventoryChanged de
|
|
* l'inventaire affiche et se relit tout seul. Jamais de Tick.
|
|
*
|
|
* Aucun texte en dur ici en dehors du format numerique de l'usure : la mise en
|
|
* page et les libelles appartiennent au Widget Blueprint.
|
|
*/
|
|
UCLASS(Abstract)
|
|
class EMBERWILD_API UItemDetailsWidget : public UUserWidget
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void NativeConstruct() override;
|
|
virtual void NativeDestruct() override;
|
|
|
|
/** Affiche la case InSlotIndex de InInventory. Index invalide = etat vide. */
|
|
void ShowSlot(UInventoryComponent* InInventory, int32 InSlotIndex);
|
|
|
|
/** Repasse en etat vide et coupe l'abonnement. */
|
|
void Clear();
|
|
|
|
/**
|
|
* Efface, mais seulement si c'est bien CETTE case qui est affichee.
|
|
*
|
|
* Le panneau est unique et trois conteneurs le nourrissent -- grille, barre
|
|
* rapide, et la grille elle-meme quand elle se rebranche. Passer de l'un a
|
|
* l'autre emet "entre dans B" PUIS "sort de A" : un effacement
|
|
* inconditionnel viderait l'affichage qui vient d'arriver.
|
|
*/
|
|
void ClearSlot(const UInventoryComponent* InInventory, int32 InSlotIndex);
|
|
|
|
protected:
|
|
/** A nommer exactement "ItemIcon" dans le Widget Blueprint. */
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UImage> ItemIcon;
|
|
|
|
/** A nommer exactement "ItemNameText". */
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UTextBlock> ItemNameText;
|
|
|
|
/** Pense a cocher "Auto Wrap Text" dessus, sinon le panneau s'elargit. */
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UTextBlock> ItemDescriptionText;
|
|
|
|
/**
|
|
* Bloc d'usure entier -- barre et texte ensemble -- replie sur tout objet
|
|
* qui n'a pas de charges multiples. Sans lui, la barre et son texte
|
|
* devraient etre replies separement et finiraient un jour desynchronises.
|
|
*/
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UWidget> UsesPanel;
|
|
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UProgressBar> UsesBar;
|
|
|
|
/** "3 / 5", pose par-dessus la barre. */
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UTextBlock> UsesText;
|
|
|
|
/**
|
|
* Le conteneur qui empile tout le panneau -- a renommer "ContentRoot", ce
|
|
* n'est pas un widget de plus.
|
|
*
|
|
* Il est masque en bloc quand rien n'est survole. Sans lui, la barre de
|
|
* separation resterait seule a l'ecran : c'est une decoration du Blueprint,
|
|
* le C++ n'a aucune raison de la connaitre individuellement.
|
|
*/
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UWidget> ContentRoot;
|
|
|
|
private:
|
|
UFUNCTION()
|
|
void HandleInventoryChanged();
|
|
|
|
/** Relit la case et repeint tout le panneau. */
|
|
void Refresh();
|
|
|
|
/**
|
|
* Etat vide : plus rien a l'ecran.
|
|
*
|
|
* Le panneau n'a pas de fond, donc vide il est simplement invisible -- et sa
|
|
* largeur est tenue par le Size Box du Blueprint, pas par son contenu. C'est
|
|
* ce qui empeche la grille de sauter lateralement quand le curseur quitte
|
|
* une case.
|
|
*/
|
|
void ClearDisplay();
|
|
|
|
/** (Re)branche OnInventoryChanged. Un seul abonnement a la fois. */
|
|
void BindInventory(UInventoryComponent* InInventory);
|
|
|
|
TWeakObjectPtr<UInventoryComponent> BoundInventory;
|
|
|
|
int32 SlotIndex = INDEX_NONE;
|
|
};
|