behavior3行为树
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 

39 行
1.5 KiB

-module(max_time).
%%--------------------------------------------------------------------
%% include
%%--------------------------------------------------------------------
-include("behavior3.hrl").
%%--------------------------------------------------------------------
%% export API
%%--------------------------------------------------------------------
-export([open/2, tick/2, close/2]).
%%--------------------------------------------------------------------
%% API functions
%%--------------------------------------------------------------------
-spec open(bt_node(), bt_state()) -> bt_state().
open(#{id := ID} = _BTNode, BTState) ->
blackboard:set(start_time, erlang:system_time(millisecond), ID, BTState).
-spec tick(bt_node(), bt_state()) -> {bt_status(), bt_state()}.
tick(#{id := ID, children := [ChildID] , properties := #{max_time := MaxTime}} = _BTNode, BTState) ->
StartTime = blackboard:get(start_time, ID, BTState),
{BTStatus, BTState1} = base_node:execute(ChildID, BTState),
case MaxTime > erlang:system_time(millisecond) - StartTime of
true ->
{BTStatus, BTState1};
false ->
{?BT_FAILURE, BTState}
end;
tick(_BTNode, BTState) ->
{?BT_ERROR, BTState}.
-spec close(bt_node(), bt_state()) -> bt_state().
close(#{id := ID} = _BTNode, BTState) ->
blackboard:remove(start_time, ID, BTState).
%%--------------------------------------------------------------------
%% Internal functions
%%--------------------------------------------------------------------