74 lines
2.4 KiB
C++
74 lines
2.4 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Blueprint/UserWidget.h"
|
|
#include "CraftingRecipeSlotWidget.generated.h"
|
|
|
|
class UCraftingRecipeDataAsset;
|
|
class UCraftingWidget;
|
|
class UImage;
|
|
class UTextBlock;
|
|
|
|
/**
|
|
* Une case de la grille de craft : l'icone d'une recette, cliquable.
|
|
*
|
|
* Passive comme la case d'inventaire : elle n'interroge jamais le composant de
|
|
* fabrication, c'est la page parente qui lui pousse son etat. Elle ne gere que
|
|
* son propre clic, parce que c'est elle qui recoit l'evenement souris.
|
|
*/
|
|
UCLASS(Abstract)
|
|
class EMBERWILD_API UCraftingRecipeSlotWidget : public UUserWidget
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
/** Appele une fois a la creation : dit a la case quelle recette elle represente. */
|
|
void InitSlot(UCraftingRecipeDataAsset* InRecipe, UCraftingWidget* InOwningGrid);
|
|
|
|
/** Affiche ou masque le cadre de selection. */
|
|
UFUNCTION(BlueprintCallable, Category = "Crafting")
|
|
void SetSelected(bool bSelected);
|
|
|
|
/**
|
|
* Assombrit la case quand les ressources manquent.
|
|
* La recette reste visible et cliquable : le joueur doit pouvoir consulter
|
|
* ce qui lui manque, sinon il ne sait pas quoi aller chercher.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Crafting")
|
|
void SetCraftable(bool bCraftable);
|
|
|
|
UCraftingRecipeDataAsset* GetRecipe() const { return Recipe; }
|
|
|
|
protected:
|
|
virtual FReply NativeOnMouseButtonDown(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) override;
|
|
|
|
/** A nommer exactement "RecipeIcon" dans le Widget Blueprint. */
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UImage> RecipeIcon;
|
|
|
|
/** Facultatif : le nom sous l'icone, si tu veux une grille legendee. */
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UTextBlock> RecipeNameText;
|
|
|
|
/** Facultatif : cadre affiche quand la case est selectionnee. */
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UWidget> SelectionBorder;
|
|
|
|
/** Teinte de l'icone quand la recette est realisable. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Crafting")
|
|
FLinearColor CraftableTint = FLinearColor::White;
|
|
|
|
/** Teinte quand il manque des ressources. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Crafting")
|
|
FLinearColor UncraftableTint = FLinearColor(0.3f, 0.3f, 0.3f, 1.f);
|
|
|
|
private:
|
|
UPROPERTY(Transient)
|
|
TObjectPtr<UCraftingRecipeDataAsset> Recipe;
|
|
|
|
/** La page parente, a prevenir du clic. */
|
|
TWeakObjectPtr<UCraftingWidget> OwningGrid;
|
|
};
|