Asset Management
Loading Trees
Section titled “Loading Trees”From JSON
Section titled “From JSON”import { BehaviorTreeLoader } from '@esengine/behavior-tree';
// Load from URLconst tree = await BehaviorTreeLoader.load('assets/enemy-ai.json');
// Load from objectconst tree = BehaviorTreeLoader.fromData(jsonData);Using Asset Manager
Section titled “Using Asset Manager”import { AssetManager } from '@esengine/asset-system';
// Register loaderAssetManager.registerLoader('btree', BehaviorTreeLoader);
// Load assetconst tree = await AssetManager.load<BehaviorTreeData>('enemy-ai.btree');Subtrees
Section titled “Subtrees”Reuse behavior trees as subtrees:
// Create a reusable patrol behaviorconst patrolTree = BehaviorTreeBuilder.create('PatrolBehavior') .sequence('Patrol') .action('moveToWaypoint') .wait(2000) .action('nextWaypoint') .end() .build();
// Use as subtree in main AIconst enemyAI = BehaviorTreeBuilder.create('EnemyAI') .selector('Main') .sequence('Combat') .condition('hasTarget') .action('attack') .end() // Include patrol subtree .subtree(patrolTree) .end() .build();Asset References
Section titled “Asset References”Reference external trees by ID:
const tree = BehaviorTreeBuilder.create('MainAI') .selector('Root') .subtreeRef('combat-behavior') // References another tree .subtreeRef('patrol-behavior') .end() .build();Caching
Section titled “Caching”// Trees are cached automaticallyconst cache = BehaviorTreeLoader.getCache();
// Clear specific treecache.remove('enemy-ai');
// Clear allcache.clear();Hot Reloading
Section titled “Hot Reloading”During development:
// Enable hot reloadBehaviorTreeLoader.enableHotReload();
// Trees will automatically update when files change