You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.0 KiB
Lua
45 lines
1.0 KiB
Lua
-- Sequence
|
|
--
|
|
|
|
local bret = require 'behavior3.behavior_ret'
|
|
|
|
local M = {
|
|
name = 'Sequence',
|
|
type = 'Composite',
|
|
desc = '顺序执行',
|
|
doc = [[
|
|
+ 一直往下执行,有子节点返回成功则返回成功,若全部节点返回失败则返回失败
|
|
+ 子节点是或的关系
|
|
]]
|
|
}
|
|
|
|
function M.run(node, env)
|
|
local last_idx, last_ret = node:resume(env)
|
|
if last_idx then
|
|
-- print("last", last_idx, last_ret)
|
|
if last_ret == bret.FAIL or bret.RUNNING then
|
|
return last_ret
|
|
elseif last_ret == bret.SUCCESS then
|
|
last_idx = last_idx + 1
|
|
else
|
|
error('wrong ret')
|
|
end
|
|
else
|
|
last_idx = 1
|
|
end
|
|
|
|
for i = last_idx, #node.children do
|
|
local child = node.children[i]
|
|
local r = child:run(env)
|
|
if r == bret.RUNNING then
|
|
return node:yield(env, i)
|
|
end
|
|
if r == bret.FAIL then
|
|
return r
|
|
end
|
|
end
|
|
return bret.SUCCESS
|
|
end
|
|
|
|
return M
|