99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
|
|
/**
|
|||
|
|
* Behavior Tree Unified Plugin
|
|||
|
|
* 行为树统一插件
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import type { IScene, ServiceContainer } from '@esengine/ecs-framework';
|
|||
|
|
import { ComponentRegistry, Core } from '@esengine/ecs-framework';
|
|||
|
|
import type {
|
|||
|
|
IPluginLoader,
|
|||
|
|
IRuntimeModuleLoader,
|
|||
|
|
PluginDescriptor,
|
|||
|
|
SystemContext
|
|||
|
|
} from '@esengine/editor-runtime';
|
|||
|
|
|
|||
|
|
// Runtime imports
|
|||
|
|
import { BehaviorTreeRuntimeComponent } from '../execution/BehaviorTreeRuntimeComponent';
|
|||
|
|
import { BehaviorTreeExecutionSystem } from '../execution/BehaviorTreeExecutionSystem';
|
|||
|
|
import { BehaviorTreeAssetManager } from '../execution/BehaviorTreeAssetManager';
|
|||
|
|
import { GlobalBlackboardService } from '../Services/GlobalBlackboardService';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 插件描述符
|
|||
|
|
*/
|
|||
|
|
export const descriptor: PluginDescriptor = {
|
|||
|
|
id: '@esengine/behavior-tree',
|
|||
|
|
name: 'Behavior Tree System',
|
|||
|
|
version: '1.0.0',
|
|||
|
|
description: 'AI 行为树系统,支持可视化编辑和运行时执行',
|
|||
|
|
category: 'ai',
|
|||
|
|
enabledByDefault: true,
|
|||
|
|
canContainContent: false,
|
|||
|
|
isEnginePlugin: false,
|
|||
|
|
modules: [
|
|||
|
|
{
|
|||
|
|
name: 'BehaviorTreeRuntime',
|
|||
|
|
type: 'runtime',
|
|||
|
|
loadingPhase: 'default',
|
|||
|
|
entry: './src/index.ts'
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: 'BehaviorTreeEditor',
|
|||
|
|
type: 'editor',
|
|||
|
|
loadingPhase: 'default',
|
|||
|
|
entry: './src/editor/index.ts'
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
dependencies: [
|
|||
|
|
{ id: '@esengine/core', version: '>=1.0.0' }
|
|||
|
|
],
|
|||
|
|
icon: 'GitBranch'
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Behavior Tree Runtime Module
|
|||
|
|
* 行为树运行时模块
|
|||
|
|
*/
|
|||
|
|
export class BehaviorTreeRuntimeModule implements IRuntimeModuleLoader {
|
|||
|
|
registerComponents(registry: typeof ComponentRegistry): void {
|
|||
|
|
registry.register(BehaviorTreeRuntimeComponent);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
registerServices(services: ServiceContainer): void {
|
|||
|
|
if (!services.isRegistered(GlobalBlackboardService)) {
|
|||
|
|
services.registerSingleton(GlobalBlackboardService);
|
|||
|
|
}
|
|||
|
|
if (!services.isRegistered(BehaviorTreeAssetManager)) {
|
|||
|
|
services.registerSingleton(BehaviorTreeAssetManager);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
createSystems(scene: IScene, context: SystemContext): void {
|
|||
|
|
const behaviorTreeSystem = new BehaviorTreeExecutionSystem(Core);
|
|||
|
|
|
|||
|
|
// 编辑器模式下默认禁用
|
|||
|
|
if (context.isEditor) {
|
|||
|
|
behaviorTreeSystem.enabled = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
scene.addSystem(behaviorTreeSystem);
|
|||
|
|
|
|||
|
|
// 保存引用
|
|||
|
|
context.behaviorTreeSystem = behaviorTreeSystem;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Behavior Tree Plugin Loader
|
|||
|
|
* 行为树插件加载器
|
|||
|
|
*
|
|||
|
|
* 注意:editorModule 在 ./index.ts 中通过 createBehaviorTreePlugin() 设置
|
|||
|
|
*/
|
|||
|
|
export const BehaviorTreePlugin: IPluginLoader = {
|
|||
|
|
descriptor,
|
|||
|
|
runtimeModule: new BehaviorTreeRuntimeModule(),
|
|||
|
|
// editorModule 将在 index.ts 中设置
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
export default BehaviorTreePlugin;
|