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