Add chase/evade behaviour
This commit is contained in:
47
game/main.c
47
game/main.c
@@ -259,25 +259,52 @@ bool init(void *userData) {
|
||||
});
|
||||
game->pools.btNode = bzObjectPoolCreate(&(BzObjectPoolDesc) {
|
||||
.objectSize = bzBTGetNodeSize(),
|
||||
.objectsPerPage = 64
|
||||
.objectsPerPage = 40
|
||||
});
|
||||
game->pools.btNodeState = bzObjectPoolCreate(&(BzObjectPoolDesc) {
|
||||
.objectSize = bzBTGetNodeStateSize(),
|
||||
.objectsPerPage = 1024,
|
||||
});
|
||||
BzObjectPool *nodePool = game->pools.btNode;
|
||||
// moveTo
|
||||
// unit (aggressive)
|
||||
{
|
||||
BzBTNode *root = NULL;
|
||||
BzBTNode *node = NULL;
|
||||
root = bzBTMakeRoot(nodePool);
|
||||
game->BTs.moveTo = root;
|
||||
game->BTs.unit = root;
|
||||
|
||||
// Just a single action for now
|
||||
BzBTNode *seq = bzBTCompSequence(nodePool, root);
|
||||
node = bzBTAction(nodePool, seq, (BzBTActionFn) aiMoveTo);
|
||||
BzBTNode *sel = bzBTCompSelector(nodePool, root);
|
||||
BzBTNode *attackSeq = bzBTCompSequence(nodePool, sel);
|
||||
{
|
||||
node = bzBTAction(nodePool, attackSeq, (BzBTActionFn) aiIsEnemyNearby);
|
||||
bzBTNodeSetName(node, "isEnemyNearby");
|
||||
|
||||
node = bzBTAction(nodePool, attackSeq, (BzBTActionFn) aiAttackEnemy);
|
||||
bzBTNodeSetName(node, "attackEnemy");
|
||||
}
|
||||
node = bzBTAction(nodePool, sel, (BzBTActionFn) aiMoveTo);
|
||||
bzBTNodeSetName(node, "moveTo");
|
||||
bzBTDecorDelay(nodePool, seq, 6.0f);
|
||||
bzBTDecorDelay(nodePool, sel, 2.0f);
|
||||
}
|
||||
// Unit (evasive)
|
||||
{
|
||||
BzBTNode *root = NULL;
|
||||
BzBTNode *node = NULL;
|
||||
root = bzBTMakeRoot(nodePool);
|
||||
game->BTs.unitEvasive = root;
|
||||
|
||||
BzBTNode *sel = bzBTCompSelector(nodePool, root);
|
||||
BzBTNode *evadeSeq = bzBTCompSequence(nodePool, sel);
|
||||
{
|
||||
node = bzBTAction(nodePool, evadeSeq, (BzBTActionFn) aiIsEnemyNearby);
|
||||
bzBTNodeSetName(node, "isEnemyNearby");
|
||||
|
||||
node = bzBTAction(nodePool, evadeSeq, (BzBTActionFn) aiEvadeEnemy);
|
||||
bzBTNodeSetName(node, "evadeEnemy");
|
||||
}
|
||||
node = bzBTAction(nodePool, sel, (BzBTActionFn) aiMoveTo);
|
||||
bzBTNodeSetName(node, "moveTo");
|
||||
bzBTDecorDelay(nodePool, sel, 2.0f);
|
||||
}
|
||||
// evade
|
||||
BzBTNode *evade = NULL;
|
||||
@@ -290,18 +317,16 @@ bool init(void *userData) {
|
||||
node = bzBTAction(nodePool, evadeSeq, (BzBTActionFn) aiIsEnemyNearby);
|
||||
bzBTNodeSetName(node, "enemyNearby");
|
||||
|
||||
node = bzBTAction(nodePool, evadeSeq, (BzBTActionFn) aiEvadeTarget);
|
||||
node = bzBTAction(nodePool, evadeSeq, (BzBTActionFn) aiEvadeEnemy);
|
||||
bzBTNodeSetName(node, "evadeTarget");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// worker harvest
|
||||
{
|
||||
BzBTNode *root = NULL;
|
||||
BzBTNode *node = NULL;
|
||||
root = bzBTMakeRoot(nodePool);
|
||||
game->BTs.workerHarvest = root;
|
||||
game->BTs.worker = root;
|
||||
|
||||
BzBTNode *pSel = bzBTCompPSelector(nodePool, root);
|
||||
bzBTSubTree(evade, pSel);
|
||||
|
||||
Reference in New Issue
Block a user