docs(scripting): add baseline api reference and guide
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
# NullScriptRuntime::CreateScriptInstance
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
bool CreateScriptInstance(const ScriptRuntimeContext& context) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
当前只做一个检查:
|
||||
|
||||
```cpp
|
||||
return context.component != nullptr;
|
||||
```
|
||||
|
||||
也就是说,它不创建真实实例,只是告诉上层“这个组件至少存在,可以继续走生命周期占位流程”。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [DestroyScriptInstance](DestroyScriptInstance.md)
|
||||
@@ -0,0 +1,21 @@
|
||||
# NullScriptRuntime::DestroyScriptInstance
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
void DestroyScriptInstance(const ScriptRuntimeContext& context) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
空实现,不释放额外资源。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
@@ -0,0 +1,25 @@
|
||||
# NullScriptRuntime::InvokeMethod
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
void InvokeMethod(
|
||||
const ScriptRuntimeContext& context,
|
||||
ScriptLifecycleMethod method,
|
||||
float deltaTime) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
空实现,不会真正调用任何脚本方法。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [IScriptRuntime::InvokeMethod](../IScriptRuntime/InvokeMethod.md)
|
||||
@@ -0,0 +1,57 @@
|
||||
# NullScriptRuntime
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `class`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
**描述**: `IScriptRuntime` 的空实现,用作无托管环境时的默认兜底后端。
|
||||
|
||||
## 概览
|
||||
|
||||
`NullScriptRuntime` 的作用不是执行脚本,而是让整个脚本系统在“没有真实脚本后端”的情况下仍然保持接口闭合:
|
||||
|
||||
- `ScriptEngine` 仍然可以安全持有一个运行时对象。
|
||||
- 场景和脚本组件的原生数据层仍然可以工作。
|
||||
- 测试或工具链不需要为“没有运行时时指针为空”额外兜底。
|
||||
|
||||
这是一种很典型的 Null Object 模式,在商业引擎底层模块中很常见。
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
- 运行时启停是 no-op。
|
||||
- 元数据查询总是失败,并清空输出数组。
|
||||
- 托管写字段总是返回 `true`,相当于“我接受这个请求,但没有实际后端可写”。
|
||||
- 托管读字段总是返回 `false`。
|
||||
- 同步字段是 no-op。
|
||||
- 创建实例时,只要 `context.component` 非空就返回 `true`。
|
||||
- 销毁实例和生命周期调用都是 no-op。
|
||||
|
||||
## 设计代价
|
||||
|
||||
这种兜底方案能让主流程更简单,但也意味着:
|
||||
|
||||
- “返回成功”不一定真的代表有托管实例存在。
|
||||
- 如果用户误以为自己接了真实脚本后端,问题会更偏逻辑层而不是崩溃层暴露出来。
|
||||
|
||||
因此文档必须清楚说明它是占位运行时,而不是简化版脚本解释器。
|
||||
|
||||
## 公开方法
|
||||
|
||||
| 方法 | 说明 |
|
||||
|------|------|
|
||||
| [OnRuntimeStart](OnRuntimeStart.md) | 空实现。 |
|
||||
| [OnRuntimeStop](OnRuntimeStop.md) | 空实现。 |
|
||||
| [TryGetClassFieldMetadata](TryGetClassFieldMetadata.md) | 始终失败并清空输出。 |
|
||||
| [TrySetManagedFieldValue](TrySetManagedFieldValue.md) | 始终返回 `true`。 |
|
||||
| [TryGetManagedFieldValue](TryGetManagedFieldValue.md) | 始终返回 `false`。 |
|
||||
| [SyncManagedFieldsToStorage](SyncManagedFieldsToStorage.md) | 空实现。 |
|
||||
| [CreateScriptInstance](CreateScriptInstance.md) | 仅检查组件指针是否存在。 |
|
||||
| [DestroyScriptInstance](DestroyScriptInstance.md) | 空实现。 |
|
||||
| [InvokeMethod](InvokeMethod.md) | 空实现。 |
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IScriptRuntime](../IScriptRuntime/IScriptRuntime.md)
|
||||
- [ScriptEngine](../ScriptEngine/ScriptEngine.md)
|
||||
@@ -0,0 +1,21 @@
|
||||
# NullScriptRuntime::OnRuntimeStart
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
void OnRuntimeStart(Components::Scene* scene) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
空实现,只显式忽略参数,不做任何初始化。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
@@ -0,0 +1,21 @@
|
||||
# NullScriptRuntime::OnRuntimeStop
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
void OnRuntimeStop(Components::Scene* scene) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
空实现,不清理额外状态。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
@@ -0,0 +1,23 @@
|
||||
# NullScriptRuntime::SyncManagedFieldsToStorage
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
void SyncManagedFieldsToStorage(
|
||||
const ScriptRuntimeContext& context) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
空实现,不做字段回写。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [IScriptRuntime::SyncManagedFieldsToStorage](../IScriptRuntime/SyncManagedFieldsToStorage.md)
|
||||
@@ -0,0 +1,32 @@
|
||||
# NullScriptRuntime::TryGetClassFieldMetadata
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
bool TryGetClassFieldMetadata(
|
||||
const std::string& assemblyName,
|
||||
const std::string& namespaceName,
|
||||
const std::string& className,
|
||||
std::vector<ScriptFieldMetadata>& outFields) const override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
- 忽略输入参数。
|
||||
- 先清空 `outFields`。
|
||||
- 返回 `false`。
|
||||
|
||||
## 含义
|
||||
|
||||
这明确表示当前不存在可查询的托管类元数据。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [IScriptRuntime::TryGetClassFieldMetadata](../IScriptRuntime/TryGetClassFieldMetadata.md)
|
||||
@@ -0,0 +1,27 @@
|
||||
# NullScriptRuntime::TryGetManagedFieldValue
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
bool TryGetManagedFieldValue(
|
||||
const ScriptRuntimeContext& context,
|
||||
const std::string& fieldName,
|
||||
ScriptFieldValue& outValue) const override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
- 忽略所有参数。
|
||||
- 不写 `outValue` 的有效结果。
|
||||
- 直接返回 `false`。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [TrySetManagedFieldValue](TrySetManagedFieldValue.md)
|
||||
@@ -0,0 +1,30 @@
|
||||
# NullScriptRuntime::TrySetManagedFieldValue
|
||||
|
||||
**命名空间**: `XCEngine::Scripting`
|
||||
|
||||
**类型**: `method`
|
||||
|
||||
**头文件**: `XCEngine/Scripting/NullScriptRuntime.h`
|
||||
|
||||
## 签名
|
||||
|
||||
```cpp
|
||||
bool TrySetManagedFieldValue(
|
||||
const ScriptRuntimeContext& context,
|
||||
const std::string& fieldName,
|
||||
const ScriptFieldValue& value) override;
|
||||
```
|
||||
|
||||
## 当前实现行为
|
||||
|
||||
- 忽略所有参数。
|
||||
- 直接返回 `true`。
|
||||
|
||||
## 注意事项
|
||||
|
||||
这里的成功只代表“空运行时接受了这个接口调用”,不代表真实托管实例被更新。
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [NullScriptRuntime](NullScriptRuntime.md)
|
||||
- [TryGetManagedFieldValue](TryGetManagedFieldValue.md)
|
||||
Reference in New Issue
Block a user