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

-- 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