// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "SurvivalStatsWidget.generated.h" class UProgressBar; class USurvivalStatsComponent; /** * Les trois jauges de survie : vie, faim, soif. * * Aucun Tick : le widget s'abonne a OnStatsChanged, qui ne se declenche * qu'une fois par seconde ou lors d'une consommation. */ UCLASS(Abstract) class EMBERWILD_API USurvivalStatsWidget : public UUserWidget { GENERATED_BODY() public: virtual void NativeConstruct() override; virtual void NativeDestruct() override; UFUNCTION(BlueprintCallable, Category = "Survie") void Refresh(); /** (Re)branche sur les stats du pawn possede. Voir UInventoryWidget. */ void BindToOwningPawn(); protected: /** A nommer exactement "HealthBar", "HungerBar" et "ThirstBar". */ UPROPERTY(meta = (BindWidget)) TObjectPtr HealthBar; UPROPERTY(meta = (BindWidget)) TObjectPtr HungerBar; UPROPERTY(meta = (BindWidget)) TObjectPtr ThirstBar; /** En dessous de ce ratio, la barre passe en couleur d'alerte. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Survie", meta = (ClampMin = "0", ClampMax = "1")) float CriticalThreshold = 0.2f; /** Couleur d'alerte, commune aux trois jauges. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Survie") FLinearColor CriticalColor = FLinearColor(0.9f, 0.1f, 0.1f, 1.f); private: UFUNCTION() void HandleStatsChanged(); USurvivalStatsComponent* ResolveStats() const; /** Applique le remplissage et la couleur d'une barre. */ void ApplyBar(UProgressBar* Bar, float Percent, const FLinearColor& BaseColor) const; TWeakObjectPtr BoundStats; /** * Couleurs d'origine relevees au NativeConstruct. * * On les capture depuis les widgets eux-memes plutot que de les redeclarer * en C++ : la palette reste entierement dans le Designer, et le code ne * fait que basculer vers l'alerte puis revenir. */ FLinearColor HealthBaseColor = FLinearColor::White; FLinearColor HungerBaseColor = FLinearColor::White; FLinearColor ThirstBaseColor = FLinearColor::White; };