Add/Get name for nodes in behaviour tree
This commit is contained in:
@@ -15,6 +15,7 @@ struct BzBTNode {
|
|||||||
BzBTNode *next;
|
BzBTNode *next;
|
||||||
|
|
||||||
BzBTNodeType type;
|
BzBTNodeType type;
|
||||||
|
const char *name;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
i32 n;
|
i32 n;
|
||||||
@@ -24,10 +25,8 @@ struct BzBTNode {
|
|||||||
} delay;
|
} delay;
|
||||||
struct {
|
struct {
|
||||||
BzBTActionFn fn;
|
BzBTActionFn fn;
|
||||||
const char *name;
|
|
||||||
} action;
|
} action;
|
||||||
} as;
|
} as;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BzBTNodeState {
|
struct BzBTNodeState {
|
||||||
@@ -167,14 +166,19 @@ BzBTNode *bzBTDecorDelay(BzObjectPool *nodePool, BzBTNode *parent, f32 ms) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
BzBTNode *bzBTAction(BzObjectPool *nodePool, BzBTNode *parent, BzBTActionFn fn,
|
BzBTNode *bzBTAction(BzObjectPool *nodePool, BzBTNode *parent, BzBTActionFn fn) {
|
||||||
const char *name) {
|
|
||||||
BzBTNode *node = bzBTNodeMake(nodePool, parent, BZ_BT_ACTION);
|
BzBTNode *node = bzBTNodeMake(nodePool, parent, BZ_BT_ACTION);
|
||||||
node->as.action.fn = fn;
|
node->as.action.fn = fn;
|
||||||
node->as.action.name = name;
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bzBTNodeSetName(BzBTNode *node, const char *name) {
|
||||||
|
node->name = name;
|
||||||
|
}
|
||||||
|
const char *bzBTNodeGetName(const BzBTNode *node) {
|
||||||
|
return node->name;
|
||||||
|
}
|
||||||
|
|
||||||
i32 bzBTDecorGetRepeat(const BzBTNode *node) {
|
i32 bzBTDecorGetRepeat(const BzBTNode *node) {
|
||||||
BZ_ASSERT(node->type == BZ_BT_DECOR_REPEAT);
|
BZ_ASSERT(node->type == BZ_BT_DECOR_REPEAT);
|
||||||
return node->as.repeat.n;
|
return node->as.repeat.n;
|
||||||
@@ -188,10 +192,6 @@ BzBTActionFn bzBTActionGetFn(const BzBTNode *node) {
|
|||||||
BZ_ASSERT(node->type == BZ_BT_ACTION);
|
BZ_ASSERT(node->type == BZ_BT_ACTION);
|
||||||
return node->as.action.fn;
|
return node->as.action.fn;
|
||||||
}
|
}
|
||||||
const char *bzBTActionGetName(const BzBTNode *node) {
|
|
||||||
BZ_ASSERT(node->type == BZ_BT_ACTION);
|
|
||||||
return node->as.action.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
BzBTNodeType bzBTGetNodeType(const BzBTNode *node) {
|
BzBTNodeType bzBTGetNodeType(const BzBTNode *node) {
|
||||||
return node->type;
|
return node->type;
|
||||||
|
|||||||
@@ -72,16 +72,17 @@ BzBTNode *bzBTDecorUntilFail(BzObjectPool *nodePool, BzBTNode *parent);
|
|||||||
BzBTNode *bzBTDecorRepeat(BzObjectPool *nodePool, BzBTNode *parent, i32 n);
|
BzBTNode *bzBTDecorRepeat(BzObjectPool *nodePool, BzBTNode *parent, i32 n);
|
||||||
BzBTNode *bzBTDecorDelay(BzObjectPool *nodePool, BzBTNode *parent, f32 ms);
|
BzBTNode *bzBTDecorDelay(BzObjectPool *nodePool, BzBTNode *parent, f32 ms);
|
||||||
|
|
||||||
BzBTNode *bzBTAction(BzObjectPool *nodePool, BzBTNode *parent, BzBTActionFn fn,
|
BzBTNode *bzBTAction(BzObjectPool *nodePool, BzBTNode *parent, BzBTActionFn fn);
|
||||||
const char *name);
|
|
||||||
|
|
||||||
// Reflection data
|
// Reflection data
|
||||||
|
|
||||||
|
void bzBTNodeSetName(BzBTNode *node, const char *name);
|
||||||
|
const char *bzBTNodeGetName(const BzBTNode *node);
|
||||||
|
|
||||||
i32 bzBTDecorGetRepeat(const BzBTNode *node);
|
i32 bzBTDecorGetRepeat(const BzBTNode *node);
|
||||||
f32 bzBTDecorGetDelay(const BzBTNode *node);
|
f32 bzBTDecorGetDelay(const BzBTNode *node);
|
||||||
|
|
||||||
BzBTActionFn bzBTActionGetFn(const BzBTNode *node);
|
BzBTActionFn bzBTActionGetFn(const BzBTNode *node);
|
||||||
const char *bzBTActionGetName(const BzBTNode *node);
|
|
||||||
|
|
||||||
BzBTNodeType bzBTGetNodeType(const BzBTNode *node);
|
BzBTNodeType bzBTGetNodeType(const BzBTNode *node);
|
||||||
BzBTNode *bzBTNodeChild(const BzBTNode *node);
|
BzBTNode *bzBTNodeChild(const BzBTNode *node);
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ bool init(int *game) {
|
|||||||
BzBTNode *seq = bzBTCompSequence(nodePool, node, false);
|
BzBTNode *seq = bzBTCompSequence(nodePool, node, false);
|
||||||
|
|
||||||
bzBTDecorDelay(nodePool, seq, 1.0f);
|
bzBTDecorDelay(nodePool, seq, 1.0f);
|
||||||
bzBTAction(nodePool, seq, printAction, "printAction");
|
node = bzBTAction(nodePool, seq, printAction);
|
||||||
|
bzBTNodeSetName(node,"printAction");
|
||||||
|
|
||||||
agentState = bzBTCreateState(&(BzBTStateDesc) {
|
agentState = bzBTCreateState(&(BzBTStateDesc) {
|
||||||
.root = printBT,
|
.root = printBT,
|
||||||
@@ -76,7 +77,7 @@ void igRenderBTNode(const BzBTNode *node, const BzBTNodeState *state, bool sameL
|
|||||||
break;
|
break;
|
||||||
case BZ_BT_ACTION:
|
case BZ_BT_ACTION:
|
||||||
snprintf(extraInfo, sizeof(extraInfo), " (%s:%p)",
|
snprintf(extraInfo, sizeof(extraInfo), " (%s:%p)",
|
||||||
bzBTActionGetName(node),
|
bzBTNodeGetName(node) ? bzBTNodeGetName(node) : "?",
|
||||||
bzBTActionGetFn(node));
|
bzBTActionGetFn(node));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user