behavior3行为树
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

30 lines
1016 B

  1. -module(limiter).
  2. -include("eBhv3.hrl").
  3. -export([open/2, tick/2, close/2]).
  4. -spec open(bt_node(), bt_state()) -> bt_state().
  5. open(#{id := ID} = _BTNode, BTState) ->
  6. blackboard:set(i, 0, ID, BTState).
  7. -spec tick(bt_node(), bt_state()) -> {bt_status(), bt_state()}.
  8. tick(#{id := ID, children := [ChildID], properties := #{max_loop := MaxLoop}} = _BTNode, BTState) ->
  9. case blackboard:get(i, ID, BTState) of
  10. I when I < MaxLoop ->
  11. case base_node:execute(ChildID, BTState) of
  12. {BTStatus, BTState1} when BTStatus =:= ?BT_SUCCESS orelse BTStatus =:= ?BT_FAILURE ->
  13. BTState2 = blackboard:set(i, I + 1, ID, BTState1),
  14. {BTStatus, BTState2};
  15. {BTStatus, BTState1} ->
  16. {BTStatus, BTState1}
  17. end;
  18. _I ->
  19. {?BT_FAILURE, BTState}
  20. end;
  21. tick(_BTNode, BTState) ->
  22. {?BT_ERROR, BTState}.
  23. -spec close(bt_node(), bt_state()) -> bt_state().
  24. close(#{id := ID} = _BTNode, BTState) ->
  25. blackboard:remove(i, ID, BTState).