CBotFollowLastEnemy::CBotFollowLastEnemy(CBot *pBot, edict_t *pEnemy, Vector vLastSee) { Vector vVelocity = Vector(0, 0, 0); CClient *pClient = CClients::Get(pEnemy); CFindPathTask *pFindPath = new CFindPathTask(vLastSee, LOOK_LAST_ENEMY); if (CClassInterface::GetVelocity(pEnemy, &vVelocity)) { if (pClient && (vVelocity == Vector(0, 0, 0))) vVelocity = pClient->GetVelocity(); } else if (pClient) vVelocity = pClient->GetVelocity(); pFindPath->SetCompleteInterrupt(CONDITION_SEE_CUR_ENEMY); AddTask(pFindPath); /*if ( pBot->isTF2() ) { int playerclass = ((CBotTF2*)pBot)->getClass(); if ( ( playerclass == TF_CLASS_SOLDIER ) || (playerclass == TF_CLASS_DEMOMAN) ) AddTask(new CBotTF2ShootLastEnemyPosition(vLastSee,pEnemy,vVelocity)); }*/ AddTask(new CFindLastEnemy(vLastSee, vVelocity)); ////////////// pFindPath->SetNoInterruptions(); }
CGotoHideSpotSched::CGotoHideSpotSched(CBot *pBot, edict_t *pEdict, bool bIsGrenade) { // run at flank while shooting CFindPathTask *pHideGoalPoint = new CFindPathTask(pEdict); pBot->SetCoverFrom(pEdict); AddTask(new CFindGoodHideSpot(pEdict)); AddTask(pHideGoalPoint); //if ( bIsGrenade ) //AddTask(new CDODWaitForGrenadeTask(pEdict)); // don't need to hide if the player we're hiding from died while we're running away pHideGoalPoint->FailIfTaskEdictDead(); pHideGoalPoint->SetLookTask(LOOK_WAYPOINT); // no interrupts, should be a quick waypoint path anyway pHideGoalPoint->SetNoInterruptions(); // get vector from good hide spot task pHideGoalPoint->GetPassedVector(); pHideGoalPoint->DontGoToEdict(); if (bIsGrenade) { pHideGoalPoint->SetRange(BLAST_RADIUS + 100.0f); pHideGoalPoint->CompleteOutOfRangeFromEdict(); } }
CGotoHideSpotSched::CGotoHideSpotSched(CBot *pBot, Vector vOrigin, IBotTaskInterrupt *interrupt) { // run at flank while shooting CFindPathTask *pHideGoalPoint = new CFindPathTask(); pBot->SetCoverFrom(NULL); AddTask(new CFindGoodHideSpot(vOrigin)); AddTask(pHideGoalPoint); // no interrupts, should be a quick waypoint path anyway pHideGoalPoint->SetNoInterruptions(); pHideGoalPoint->SetInterruptFunction(interrupt); // get vector from good hide spot task pHideGoalPoint->GetPassedVector(); }