Polish up behaviour tree, add docs

This commit is contained in:
2024-01-11 09:33:51 +01:00
parent 36d8bac7c4
commit 25a3229bb2
5 changed files with 192 additions and 37 deletions

View File

@@ -61,9 +61,9 @@ const char *bzBTNodeTypeToStr(BzBTNodeType type) {
return "SELECTOR";
case BZ_BT_COMP_SEQUENCE:
return "SEQUENCE";
case BZ_BT_COMP_P_SELECTOR:
case BZ_BT_COMP_PSELECTOR:
return "P_SELECTOR";
case BZ_BT_COMP_P_SEQUENCE:
case BZ_BT_COMP_PSEQUENCE:
return "P_SEQUENCE";
case BZ_BT_DECOR_DUMMY:
return "DUMMY";
@@ -124,17 +124,17 @@ void bzBTDestroyRoot(BzObjectPool *nodePool, BzBTNode *node) {
bzObjectPoolRelease(nodePool, node);
}
BzBTNode *bzBTCompSelector(BzObjectPool *nodePool, BzBTNode *parent, bool parallel) {
BzBTNodeType type = parallel ?
BZ_BT_COMP_P_SELECTOR :
BZ_BT_COMP_SELECTOR;
return bzBTNodeMake(nodePool, parent, type);
BzBTNode *bzBTCompSelector(BzObjectPool *nodePool, BzBTNode *parent) {
return bzBTNodeMake(nodePool, parent, BZ_BT_COMP_SELECTOR);
}
BzBTNode *bzBTCompSequence(BzObjectPool *nodePool, BzBTNode *parent, bool parallel) {
BzBTNodeType type = parallel ?
BZ_BT_COMP_P_SEQUENCE :
BZ_BT_COMP_SEQUENCE;
return bzBTNodeMake(nodePool, parent, type);
BzBTNode *bzBTCompSequence(BzObjectPool *nodePool, BzBTNode *parent) {
return bzBTNodeMake(nodePool, parent, BZ_BT_COMP_SEQUENCE);
}
BzBTNode *bzBTCompPSelector(BzObjectPool *nodePool, BzBTNode *parent) {
return bzBTNodeMake(nodePool, parent, BZ_BT_COMP_PSELECTOR);
}
BzBTNode *bzBTCompPSequence(BzObjectPool *nodePool, BzBTNode *parent) {
return bzBTNodeMake(nodePool, parent, BZ_BT_COMP_PSEQUENCE);
}
BzBTNode *bzBTDecorDummy(BzObjectPool *nodePool, BzBTNode *parent) {
@@ -220,9 +220,9 @@ BzBTNode *bzBTCompStateGetRunningChild(const BzBTNodeState *state) {
BZ_ASSERT(state->node);
BzBTNodeType type = state->node->type;
bool isComposite = type == BZ_BT_COMP_SELECTOR ||
type == BZ_BT_COMP_P_SELECTOR ||
type == BZ_BT_COMP_PSELECTOR ||
type == BZ_BT_COMP_SEQUENCE ||
type == BZ_BT_COMP_P_SEQUENCE;
type == BZ_BT_COMP_PSEQUENCE;
BZ_ASSERT(isComposite);
return state->as.composite.running;
}
@@ -384,8 +384,8 @@ static inline BzBTExecReturn bzBTExecuteComposite(const BzBTNode *node, f32 dt,
BzBTExecState *state, BzObjectPool *statePool) {
BzBTNodeState *nodeState = getNodeState(node, state);
bool isParallel = node->type == BZ_BT_COMP_P_SEQUENCE ||
node->type == BZ_BT_COMP_P_SELECTOR;
bool isParallel = node->type == BZ_BT_COMP_PSEQUENCE ||
node->type == BZ_BT_COMP_PSELECTOR;
BzBTNode *start = node->first;
if (!isParallel && nodeState)
@@ -419,12 +419,12 @@ static inline BzBTExecReturn bzBTExecuteComposite(const BzBTNode *node, f32 dt,
}
switch (node->type) {
case BZ_BT_COMP_SELECTOR:
case BZ_BT_COMP_P_SELECTOR:
case BZ_BT_COMP_PSELECTOR:
if (childReturn.status == BZ_BT_SUCCESS)
execReturn.status = BZ_BT_SUCCESS;
break;
case BZ_BT_COMP_SEQUENCE:
case BZ_BT_COMP_P_SEQUENCE:
case BZ_BT_COMP_PSEQUENCE:
if (childReturn.status == BZ_BT_FAIL)
execReturn.status = BZ_BT_FAIL;
break;
@@ -441,12 +441,12 @@ static inline BzBTExecReturn bzBTExecuteComposite(const BzBTNode *node, f32 dt,
}
switch (node->type) {
case BZ_BT_COMP_SELECTOR:
case BZ_BT_COMP_P_SELECTOR:
case BZ_BT_COMP_PSELECTOR:
if (numFailed == numChildren)
execReturn.status = BZ_BT_FAIL;
break;
case BZ_BT_COMP_SEQUENCE:
case BZ_BT_COMP_P_SEQUENCE:
case BZ_BT_COMP_PSEQUENCE:
if (numSuccessful == numChildren)
execReturn.status = BZ_BT_SUCCESS;
break;
@@ -585,8 +585,8 @@ static inline BzBTExecReturn bzBTExecuteNode(const BzBTNode *node, f32 dt,
switch (node->type) {
case BZ_BT_COMP_SELECTOR:
case BZ_BT_COMP_SEQUENCE:
case BZ_BT_COMP_P_SELECTOR:
case BZ_BT_COMP_P_SEQUENCE:
case BZ_BT_COMP_PSELECTOR:
case BZ_BT_COMP_PSEQUENCE:
execReturn = bzBTExecuteComposite(node, dt, state, statePool);
break;
case BZ_BT_DECOR_DUMMY: