# luabt **Repository Path**: xiyoo0812/luabt ## Basic Information - **Project Name**: luabt - **Description**: 基于lua的AI行为树框架 - **Primary Language**: Lua - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2020-07-20 - **Last Updated**: 2023-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lua 行为树 ## 依赖 * [lua](https://github.com/xiyoo0812/lua.git)5.2以上 * [luaoop](https://github.com/xiyoo0812/luaoop.git) ## 支持节点类型 * Failed:总是返回FAIL * Invert:反转执行结果 * Succeed: 总是返回成功 * Random:随机选择子节点执行 * Repeat:重复执行子节点,需要注意的是每次重复会跳帧 * Select:顺序执行,遇到成功返回 * Sequence:顺序执行,遇到失败返回 * WSelect:顺序执行,遇到成功返回,子节点按权重先排序 * WSequence:顺序执行,遇到失败返回,子节点按权重先排序 * Condition:条件节点,根据条件执行子节点 * Parallel:并行节点,根据设置的成功和失败条件返回 ## 实现原理 * 节点状态 ``` luabt = { -- Node Status WAITING = 0, --等待,中间状态,展开子节点返回 SUCCESS = 1, --成功 FAIL = 2, --失败 RUNNING = 3, --运行 } ``` * 每次tick从root节点一次展开执行,遇到FAIL或者全部SUCCESS则reset * 遇到RUNNING,本次tick结束,下一次从RUNNING继续执行 * 支持中断机制,中断达成后,回到中断节点继续执行 ## 扩展节点 * 修饰节点Succeed, Failed, Invert:子节点从框架节点继承,同时实现on_execute接口 ``` function SucceedNode:on_execute(tree) return SUCCESS end ``` * 条件节点Condition:子节点从框架节点继承,同时实现on_check接口 ``` function ConditionNode:on_check(tree) return true end ``` * 循环节点Repeat:子节点从框架节点继承,同时实现on_check接口控制循环 ``` function RepeatNode:on_check(tree) return true end ``` * 普通节点Node:子节点从框架Node节点继承,同时实现run接口 ``` function Flee:run(tree) tree.robot.hp = tree.robot.hp + 2 print(tree.robot.hp, "Flee.....") return SUCCESS end ``` * 中断节点:任意节点可以成为中断节点,只需要实现on_interrupt接口 ``` function BtNode:on_interrupt(tree) return true end ``` * 组合节点:直接使用系统提供的组合节点 ## Example 备注: 需要先下载luaoop ``` lua example/example.lua ```