init
This commit is contained in:
64
Plugins/Dialog/IPresentationScriptExecutor.md
Normal file
64
Plugins/Dialog/IPresentationScriptExecutor.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# IPresentationScriptExecutor
|
||||
|
||||
## 基本信息
|
||||
- **类型**: UINTERFACE + C++ 接口
|
||||
- **父类**: UInterface
|
||||
- **源文件**: Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h
|
||||
- **模块**: Dialog
|
||||
|
||||
## 功能概述
|
||||
对话表现系统的协调器接口。方法:ExecutePresentationScript(运行脚本)、PlugStrategyIn/UnplugStrategy(按名称管理策略注册表)。所有方法均为 BlueprintNativeEvent。
|
||||
|
||||
## 设计用意
|
||||
门面/协调器模式。将"执行什么"(FDialogPresentationScriptData)与"谁执行"(策略插件)分离。作为接口与框架无关——可与任何 UI 系统配合使用。UDialogPresentationSubsystem 在脚本查找后调用 ExecutePresentationScript。
|
||||
|
||||
## 职责范围
|
||||
编排对话脚本执行。管理策略插件注册表。由 UDialogPresentationSubsystem::ShowDialog 调用。不存储对话数据,也不解析 JSON。
|
||||
|
||||
## 项目内依赖
|
||||
| 依赖项 | 关系 | 源文件 |
|
||||
|--------|------|--------|
|
||||
| FDialogPresentationScriptData | 前向声明(参数) | Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h:26 |
|
||||
| IPresentationStrategyPlugin | 前向声明(参数) | Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h:28 |
|
||||
|
||||
## 对外接口
|
||||
UInterface / C++ 接口,供蓝图或 C++ 类实现。作为对话表现系统的协调器/门面,负责编排脚本执行和管理策略插件注册表。所有方法均为 BlueprintNativeEvent(可蓝图重写)。
|
||||
|
||||
三个方法:
|
||||
- **ExecutePresentationScript** (BlueprintNativeEvent, BlueprintCallable): 接收 `const FDialogPresentationScriptData& ScriptStruct`(无返回值)。
|
||||
- 由 `UDialogPresentationSubsystem::ShowDialog` 调用。
|
||||
- 实现者应解析 ScriptStruct 中的脚本数据,按顺序执行命令,将每条命令通过 CommandName 路由到已注册的 IPresentationStrategyPlugin。
|
||||
|
||||
- **PlugStrategyIn** (BlueprintNativeEvent, BlueprintCallable): 接收 `FName StrategyName` 和 `const TScriptInterface<IPresentationStrategyPlugin>& NewStrategy`。
|
||||
- 按名称注册一个策略插件。后续执行脚本时根据 CommandName 查找对应策略并调用其 PerformCommand。
|
||||
|
||||
- **UnplugStrategy** (BlueprintNativeEvent, BlueprintCallable): 接收 `FName StrategyName`。
|
||||
- 按名称注销一个策略插件。
|
||||
|
||||
典型实现者:UI Widget(如 WBP_TestUI),它既是显示层也是执行协调器。
|
||||
|
||||
## 使用方法
|
||||
在蓝图中实现此接口。典型调用链:
|
||||
```cpp
|
||||
// Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp:8-17
|
||||
void UDialogPresentationSubsystem::ShowDialog(const TScriptInterface<IPresentationScriptExecutor> Executor, const FName StructID)
|
||||
{
|
||||
UObject* ExecutorObject = Executor.GetObject();
|
||||
if (!ExecutorObject)
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("ShowDialog failed: Executor does not implement IPresentationScriptExecutor interface."));
|
||||
return;
|
||||
}
|
||||
IPresentationScriptExecutor::Execute_ExecutePresentationScript(ExecutorObject, GetDialogPresentationScriptData(StructID));
|
||||
}
|
||||
```
|
||||
子系统查找脚本数据、注入 ScriptID 后,通过 `Execute_ExecutePresentationScript` 静态方法调用蓝图实现的接口函数。
|
||||
|
||||
## 用例
|
||||
| 文件 | 行号 | 用途 |
|
||||
|------|------|------|
|
||||
| Plugins/Dialog/Source/Dialog/Public/PresentationScriptExecutor.h | 19-31 | 接口定义:UInterface 包装类 + C++ 接口类含三个方法声明 |
|
||||
| Plugins/Dialog/Source/Dialog/Public/DialogPresentationSubsystem.h | 32 | UDialogPresentationSubsystem::ShowDialog 以此接口的 TScriptInterface 为参数 |
|
||||
| Plugins/Dialog/Source/Dialog/Private/DialogPresentationSubsystem.cpp | 8-17 | ShowDialog 实现:先校验接口,再调用 Execute_ExecutePresentationScript |
|
||||
| Plugins/Dialog/Source/Dialog/Private/PresentationScriptExecutor.cpp | 6 | 接口默认实现占位文件 |
|
||||
| Document/Content/Blueprints/WBP_TestUI.md | 10 | WBP_TestUI(蓝图 Widget)实现此接口,接收并执行脚本
|
||||
Reference in New Issue
Block a user