* refactor(behavior-tree)!: 迁移到 Runtime 执行器架构 * fix(behavior-tree): 修复LogAction中的ReDoS安全漏洞 * feat(behavior-tree): 完善行为树核心功能并修复类型错误
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { TaskStatus, NodeType } from '../../Types/TaskStatus';
|
|
import { INodeExecutor, NodeExecutionContext } from '../NodeExecutor';
|
|
import { NodeExecutorMetadata } from '../NodeMetadata';
|
|
|
|
/**
|
|
* 总是失败装饰器执行器
|
|
*
|
|
* 无论子节点结果如何都返回失败
|
|
*/
|
|
@NodeExecutorMetadata({
|
|
implementationType: 'AlwaysFail',
|
|
nodeType: NodeType.Decorator,
|
|
displayName: '总是失败',
|
|
description: '无论子节点结果如何都返回失败',
|
|
category: 'Decorator'
|
|
})
|
|
export class AlwaysFailExecutor implements INodeExecutor {
|
|
execute(context: NodeExecutionContext): TaskStatus {
|
|
const { nodeData } = context;
|
|
|
|
if (!nodeData.children || nodeData.children.length === 0) {
|
|
return TaskStatus.Failure;
|
|
}
|
|
|
|
const childId = nodeData.children[0]!;
|
|
const status = context.executeChild(childId);
|
|
|
|
if (status === TaskStatus.Running) {
|
|
return TaskStatus.Running;
|
|
}
|
|
|
|
return TaskStatus.Failure;
|
|
}
|
|
|
|
reset(context: NodeExecutionContext): void {
|
|
if (context.nodeData.children && context.nodeData.children.length > 0) {
|
|
context.runtime.resetNodeState(context.nodeData.children[0]!);
|
|
}
|
|
}
|
|
}
|