1e5f40e633
P-016: 将EffectManager的ShowNarrative/HideNarrative/ShowPickupNotification 从日志占位改为真实CreateWidget+AddToViewport+淡入淡出生命周期。 - 新增UPickupNotificationWidget C++基类(对称NarrativeTextWidget) - EffectManager新增SetWidgetClasses注入接口与Widget弱引用缓存 - PerformCleanup补齐Narrative/Pickup Widget兜底淡出移除 - ASystemDriver新增两个TSubclassOf配置点,BeginPlay注入给EffectManager - Widget Class未注入时回退日志占位,保证Effect流程不卡 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
// ChildHood Project - 拾取通知 UI 基类
|
||
// 对应技术方案: docs/technical/交互系统-技术方案.md 第7节(WBP_PickupNotification)
|
||
// 职责:拾取/获得物品时的通知弹窗("找到了 XXX"),带淡入淡出
|
||
// 注意:执行案 §跨系统交互规定拾取通知归物品系统控制,本基类为交互系统 ShowPickupNotification
|
||
// Action 提供表现能力,v0.1 暂由 EffectManager 日志占位或本 Widget 简化显示,物品系统
|
||
// 接通后(P-013 后续)再正式启用。
|
||
|
||
#pragma once
|
||
|
||
#include "CoreMinimal.h"
|
||
#include "Blueprint/UserWidget.h"
|
||
#include "PickupNotificationWidget.generated.h"
|
||
|
||
class UTextBlock;
|
||
|
||
/**
|
||
* UPickupNotificationWidget
|
||
*
|
||
* 拾取通知 UI 的 C++ 基类。蓝图子类(WBP_PickupNotification)继承此类,
|
||
* 在 UMG 编辑器中布局可视组件,并确保组件名与 BindWidget 匹配。
|
||
*
|
||
* 绑定要求:
|
||
* - TextBlock 名为 "PickupTextBlock" — 显示拾取通知文字(如 "找到了 旧橡皮!")
|
||
* - WidgetAnimation 名为 "FadeInAnim" — 淡入动画(0.2s)
|
||
* - WidgetAnimation 名为 "FadeOutAnim" — 淡出动画(0.2s)
|
||
*
|
||
* 布局要求:
|
||
* - Anchors: 右下角或屏幕中下,与 NarrativeText 错位
|
||
* - Border: 半透明背景,圆角
|
||
* - TextBlock: 白色文字,居中
|
||
*/
|
||
UCLASS(Abstract, Blueprintable)
|
||
class UPickupNotificationWidget : public UUserWidget
|
||
{
|
||
GENERATED_BODY()
|
||
|
||
public:
|
||
|
||
/** 设置通知文本内容 */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
|
||
void SetPickupText(const FString& Text);
|
||
|
||
/** 显示通知(播放淡入动画) */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
|
||
void Show();
|
||
|
||
/** 隐藏通知(播放淡出动画) */
|
||
UFUNCTION(BlueprintCallable, Category = "Interaction|Pickup")
|
||
void Hide();
|
||
|
||
protected:
|
||
|
||
/** 通知文字 TextBlock,蓝图子类必须有一个同名 TextBlock */
|
||
UPROPERTY(meta = (BindWidget))
|
||
UTextBlock* PickupTextBlock;
|
||
|
||
/** 淡入动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
|
||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||
UWidgetAnimation* FadeInAnim;
|
||
|
||
/** 淡出动画(0.2s),蓝图子类必须有同名 WidgetAnimation */
|
||
UPROPERTY(meta = (BindWidgetAnim), Transient)
|
||
UWidgetAnimation* FadeOutAnim;
|
||
|
||
/** 是否正在显示中 */
|
||
bool bIsVisible = false;
|
||
|
||
virtual void NativeOnInitialized() override;
|
||
};
|