4fc4a39aa6
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
2.3 KiB
C++
70 lines
2.3 KiB
C++
// ChildHood Project - 收集完成提示 UI 基类
|
||
// 对应技术方案: docs/technical/收集系统-技术方案.md 第3节(UCollectionCompleteWidget)+ 第7节
|
||
// 职责:全部收集完成时的屏幕中央提示(淡入→停留→淡出→移除)
|
||
|
||
#pragma once
|
||
|
||
#include "CoreMinimal.h"
|
||
#include "Blueprint/UserWidget.h"
|
||
#include "CollectionCompleteWidget.generated.h"
|
||
|
||
class UTextBlock;
|
||
|
||
/**
|
||
* UCollectionCompleteWidget — 全部收集完成中心提示(执行案第四节「全部收集完成表现」)。
|
||
*
|
||
* 屏幕正中央弹出「杂物全部收集完成!」白色大字,显示 2.0s 后淡出移除。
|
||
* 三段时序:淡入 → 停留(DisplayDuration) → 淡出 → RemoveFromParent。
|
||
*
|
||
* 绑定要求(蓝图 WBP_CollectionComplete 继承本类):
|
||
* - TextBlock 名 "CompleteTextBlock" — 完成文字
|
||
* - WidgetAnimation 名 "FadeInAnim" — 淡入动画
|
||
* - WidgetAnimation 名 "FadeOutAnim" — 淡出动画
|
||
*
|
||
* 布局要求:Anchors Center,白色大字,屏幕正中。
|
||
*/
|
||
UCLASS(Abstract, Blueprintable)
|
||
class UCollectionCompleteWidget : public UUserWidget
|
||
{
|
||
GENERATED_BODY()
|
||
|
||
public:
|
||
|
||
/** 显示完成提示:设置文字,启动淡入→停留→淡出时序 */
|
||
UFUNCTION(BlueprintCallable, Category = "Collection|Complete")
|
||
void ShowComplete(const FString& Text, float DisplayDuration, float InFadeOutDuration);
|
||
|
||
protected:
|
||
|
||
/** 完成文字 TextBlock,蓝图子类必须有同名 TextBlock */
|
||
UPROPERTY(meta = (BindWidget))
|
||
UTextBlock* CompleteTextBlock;
|
||
|
||
/** 淡入动画,蓝图子类必须有同名 WidgetAnimation */
|
||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||
UWidgetAnimation* FadeInAnim;
|
||
|
||
/** 淡出动画,蓝图子类必须有同名 WidgetAnimation */
|
||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||
UWidgetAnimation* FadeOutAnim;
|
||
|
||
/** 停留计时器(淡入结束后启动,到时触发淡出)*/
|
||
FTimerHandle StayTimerHandle;
|
||
|
||
/** 淡出计时器(淡出开始后启动,到时移除 Widget)*/
|
||
FTimerHandle FadeOutTimerHandle;
|
||
|
||
/** 淡出时长(缓存)*/
|
||
float CachedFadeOutDuration = 0.5f;
|
||
|
||
virtual void NativeOnInitialized() override;
|
||
|
||
private:
|
||
|
||
/** 停留结束 → 播放淡出动画 */
|
||
void StartFadeOut();
|
||
|
||
/** 淡出时长到 → RemoveFromParent */
|
||
void OnFadeOutComplete();
|
||
};
|