feat(interaction): 接通叙事/拾取通知Widget表现层
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>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
// ChildHood Project - 拾取通知 UI 基类 实现
|
||||
|
||||
#include "Interaction/PickupNotificationWidget.h"
|
||||
#include "Components/TextBlock.h"
|
||||
|
||||
void UPickupNotificationWidget::NativeOnInitialized()
|
||||
{
|
||||
Super::NativeOnInitialized();
|
||||
|
||||
// 初始隐藏
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
|
||||
void UPickupNotificationWidget::SetPickupText(const FString& Text)
|
||||
{
|
||||
if (PickupTextBlock)
|
||||
{
|
||||
PickupTextBlock->SetText(FText::FromString(Text));
|
||||
}
|
||||
}
|
||||
|
||||
void UPickupNotificationWidget::Show()
|
||||
{
|
||||
if (bIsVisible) return;
|
||||
bIsVisible = true;
|
||||
|
||||
SetVisibility(ESlateVisibility::HitTestInvisible);
|
||||
|
||||
if (FadeInAnim)
|
||||
{
|
||||
PlayAnimation(FadeInAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void UPickupNotificationWidget::Hide()
|
||||
{
|
||||
if (!bIsVisible) return;
|
||||
|
||||
if (FadeOutAnim)
|
||||
{
|
||||
PlayAnimation(FadeOutAnim, 0.0f, 1, EUMGSequencePlayMode::Forward, 1.0f);
|
||||
FTimerHandle TempHandle;
|
||||
if (UWorld* World = GetWorld())
|
||||
{
|
||||
World->GetTimerManager().SetTimer(TempHandle, [this]()
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}, 0.2f, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
bIsVisible = false;
|
||||
SetVisibility(ESlateVisibility::Hidden);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user