79 lines
2.8 KiB
C++
79 lines
2.8 KiB
C++
// 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();
|
||
};
|