boiii-scripts/shared/ai/systems/behavior_tree_utility.gsc
2023-04-13 17:30:38 +02:00

72 lines
2.8 KiB
Plaintext

#namespace BehaviorTreeNetwork;
// ------------- BehaviorTreeScript ----------- //
function RegisterBehaviorTreeScriptAPIInternal( functionName, functionPtr )
{
if ( !IsDefined( level._BehaviorTreeScriptFunctions ) )
{
level._BehaviorTreeScriptFunctions = [];
}
// SUMEET TODO - remove the need of ToLower and have the functionNames defined in .gsh
functionName = ToLower( functionName );
Assert( IsDefined( functionName ) && IsDefined( functionPtr ), "BT - (RegisterBehaviorTreeScriptAPI) No functionPtr defined or no functionName defined for BehaviorTreeScript." );
Assert( !IsDefined( level._BehaviorTreeScriptFunctions[functionName] ), "BT - (RegisterBehaviorTreeScriptAPI) functionName is already defined for BehaviorTreeScript." );
level._BehaviorTreeScriptFunctions[functionName] = functionPtr;
}
// ------------- BehaviorTreeAction ----------- //
function RegisterBehaviorTreeActionInternal( actionName, startFuncPtr, updateFuncPtr, terminateFuncPtr )
{
if ( !IsDefined( level._BehaviorTreeActions ) )
{
level._BehaviorTreeActions = [];
}
actionName = ToLower( actionName );
Assert( IsString( actionName ), "BT - actionName for RegisterBehaviorTreeActionInternal is not a string." );
Assert( !IsDefined(level._BehaviorTreeActions[actionName]), "BT - (RegisterBehaviorTreeActionInternal) actionName " + actionName + " is already registered." );
level._BehaviorTreeActions[actionName] = array();
// BHTN_ACTION_START
if( IsDefined( startFuncPtr ) )
{
Assert( IsFunctionPtr( startFuncPtr ), "BT - BehaviorTreeAction startFuncPtr must be of type functionPtr." );
level._BehaviorTreeActions[actionName]["bhtn_action_start"] = startFuncPtr;
}
// BHTN_ACTION_UPDATE
if( IsDefined( updateFuncPtr ) )
{
Assert( IsFunctionPtr( updateFuncPtr ), "BT - BehaviorTreeAction updateFuncPtr must be of type functionPtr." );
level._BehaviorTreeActions[actionName]["bhtn_action_update"] = updateFuncPtr;
}
// BHTN_ACTION_TERMINATE
if( IsDefined( terminateFuncPtr ) )
{
Assert( IsFunctionPtr( terminateFuncPtr ), "BT - BehaviorTreeAction terminateFuncPtr must be of type functionPtr." );
level._BehaviorTreeActions[actionName]["bhtn_action_terminate"] = terminateFuncPtr;
}
}
// ------------- utility----------- //
#namespace BehaviorTreeNetworkUtility;
function RegisterBehaviorTreeScriptAPI( functionName, functionPtr )
{
BehaviorTreeNetwork::RegisterBehaviorTreeScriptAPIInternal( functionName, functionPtr );
}
function RegisterBehaviorTreeAction( actionName, startFuncPtr, updateFuncPtr, terminateFuncPtr )
{
BehaviorTreeNetwork::RegisterBehaviorTreeActionInternal( actionName, startFuncPtr, updateFuncPtr, terminateFuncPtr );
}