Files
ChildHood/Source/ChildHood/Collection/CollectionNotifWidget.h
T

79 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ChildHood Project - 收集通知 UI 基类
// 对应技术方案: docs/technical/收集系统-技术方案.md 第3节(UCollectionNotifWidget)+ 第7节(美术资源)
// 职责:单条收集通知的三段生命周期(淡入→停留→淡出→移除)
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "CollectionNotifWidget.generated.h"
class UTextBlock;
class UCollectionNotifWidget;
/** 收集通知单条完成事件 — 淡出移除后广播,HUDComponent 据此从 ActiveNotifications 清理 */
DECLARE_DELEGATE_OneParam(FOnCollectionNotifFinished, UCollectionNotifWidget*);
/**
* UCollectionNotifWidget — 收集通知 UI 单条实例(执行案第二节「收集通知 UI」)。
*
* 三段生命周期:淡入(0.2s) → 停留(2.0s) → 淡出(0.3s) → 广播 OnFinished + RemoveFromParent。
* 文字浅金色 #F0D060(与拾取通知白色区分)。
*
* 绑定要求(蓝图 WBP_CollectionNotification 继承本类):
* - TextBlock 名 "NotifTextBlock" — 通知文字
* - WidgetAnimation 名 "FadeInAnim" — 淡入动画
* - WidgetAnimation 名 "FadeOutAnim" — 淡出动画
*/
UCLASS(Abstract, Blueprintable)
class UCollectionNotifWidget : public UUserWidget
{
GENERATED_BODY()
public:
/** 初始化通知:设置文字/颜色,启动淡入→停留→淡出三段时序 */
UFUNCTION(BlueprintCallable, Category = "Collection|Notification")
void InitializeNotif(const FString& Text, FLinearColor TextColor,
float InFadeInDuration, float InStayDuration, float InFadeOutDuration);
/** 通知完成事件(淡出移除后广播)— HUDComponent 绑定后清理 ActiveNotifications */
FOnCollectionNotifFinished OnFinished;
protected:
/** 通知文字 TextBlock,蓝图子类必须有同名 TextBlock */
UPROPERTY(meta = (BindWidget))
UTextBlock* NotifTextBlock;
/** 淡入动画,蓝图子类必须有同名 WidgetAnimation */
UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* FadeInAnim;
/** 淡出动画,蓝图子类必须有同名 WidgetAnimation */
UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* FadeOutAnim;
/** 停留计时器(淡入结束后启动,到时触发淡出)*/
FTimerHandle StayTimerHandle;
/** 淡出计时器(淡出开始后启动,到时移除 Widget)*/
FTimerHandle FadeOutTimerHandle;
/** 淡出时长(缓存,供淡出计时器用)*/
float CachedFadeOutDuration = 0.3f;
virtual void NativeOnInitialized() override;
/** Widget 销毁时清理计时器:lambda 捕获裸 this,销毁后 fire 会野指针 */
virtual void NativeDestruct() override;
private:
/** 停留结束 → 播放淡出动画 */
void StartFadeOut();
/** 淡出时长到 → 广播 OnFinished + RemoveFromParent */
void OnFadeOutComplete();
};