enum { BT_LEAF = 0, BT_SEQUENCE, BT_PRIORITY, BT_PARALLEL, BT_DYNGUARD, BT_INVERT, BT_MAXTYPE,}; void btcancel(BehaviorNode*, BehaviorState*, void*);void *btstatefor(BehaviorNode*, BehaviorState*); struct BehaviorNode { unsigned char id; unsigned char type; short ref; BehaviorNode *guard; void (*end)(void*); char name[16];}; typedef struct BehaviorNodeState BehaviorNodeState;struct BehaviorNodeState { int status;}; typedef struct BehaviorLeaf BehaviorLeaf;struct BehaviorLeaf { BehaviorNode node; BehaviorAction action; void *ctx;}; typedef struct BehaviorLeafState BehaviorLeafState;struct BehaviorLeafState { BehaviorNodeState node;}; typedef struct BehaviorBranch BehaviorBranch;struct BehaviorBranch { BehaviorNode node; int childcount; BehaviorNode **children;}; typedef struct BehaviorBranchState BehaviorBranchState;struct BehaviorBranchState { BehaviorNodeState node; int childcurrent;}; typedef struct BehaviorParallel BehaviorParallel;struct BehaviorParallel { BehaviorBranch branch; int S; int F;}; /* unused currently *//*typedef struct BehaviorRepeat BehaviorRepeat;struct BehaviorRepeat { BehaviorBranch; int cur; int max;};*/ typedef struct BehaviorState BehaviorState;struct BehaviorState { Behavior *behavior; union { /* BT_LEAF */ BehaviorLeafState leaf; /* BT_SEQUENCE, BT_PRIORITY, BT_PARALLEL * BT_DYNGUARD, BT_INVERT */ BehaviorBranchState branch; } states[];}; typedef struct Behavior Behavior;struct Behavior { BehaviorNode *root; unsigned char nstates;};
enum {
BT_LEAF = 0,
BT_SEQUENCE,
BT_PRIORITY,
BT_PARALLEL,
BT_DYNGUARD,
BT_INVERT,
BT_MAXTYPE,
};
void btcancel(BehaviorNode*, BehaviorState*, void*);
void *btstatefor(BehaviorNode*, BehaviorState*);
struct BehaviorNode {
unsigned char id;
unsigned char type;
short ref;
BehaviorNode *guard;
void (*end)(void*);
char name[16];
};
typedef struct BehaviorNodeState BehaviorNodeState;
struct BehaviorNodeState {
int status;
};
typedef struct BehaviorLeaf BehaviorLeaf;
struct BehaviorLeaf {
BehaviorNode node;
BehaviorAction action;
void *ctx;
};
typedef struct BehaviorLeafState BehaviorLeafState;
struct BehaviorLeafState {
BehaviorNodeState node;
};
typedef struct BehaviorBranch BehaviorBranch;
struct BehaviorBranch {
BehaviorNode node;
int childcount;
BehaviorNode **children;
};
typedef struct BehaviorBranchState BehaviorBranchState;
struct BehaviorBranchState {
BehaviorNodeState node;
int childcurrent;
};
typedef struct BehaviorParallel BehaviorParallel;
struct BehaviorParallel {
BehaviorBranch branch;
int S;
int F;
};
/* unused currently */
/*
typedef struct BehaviorRepeat BehaviorRepeat;
struct BehaviorRepeat {
BehaviorBranch;
int cur;
int max;
};
*/
typedef struct BehaviorState BehaviorState;
struct BehaviorState {
Behavior *behavior;
union {
/* BT_LEAF */
BehaviorLeafState leaf;
/* BT_SEQUENCE, BT_PRIORITY, BT_PARALLEL
* BT_DYNGUARD, BT_INVERT */
BehaviorBranchState branch;
} states[];
};
typedef struct Behavior Behavior;
struct Behavior {
BehaviorNode *root;
unsigned char nstates;
};