CAI_LeadBehavior *CAI_LeadGoal::GetLeadBehavior() { CAI_BaseNPC *pActor = GetActor(); if ( !pActor ) return NULL; CAI_LeadBehavior *pBehavior; if ( !pActor->GetBehavior( &pBehavior ) ) { return NULL; } return pBehavior; }
void NotifyChangeTacticalConstraints() { for ( int i = 0; i < g_AI_Manager.NumAIs(); i++ ) { CAI_BaseNPC *pNpc = (g_AI_Manager.AccessAIs())[i]; if ( Affects( pNpc ) ) { CAI_StandoffBehavior *pBehavior; if ( pNpc->GetBehavior( &pBehavior ) ) { pBehavior->OnChangeTacticalConstraints(); } } } }
void InputSetAggressiveness( inputdata_t &inputdata ) { int newVal = inputdata.value.Int(); m_aggressiveness = (Aggressiveness_t)newVal; ValidateAggression(); UpdateActors(); const CUtlVector<AIHANDLE> &actors = AccessActors(); for ( int i = 0; i < actors.Count(); i++ ) { CAI_BaseNPC *pAI = actors[i]; CAI_StandoffBehavior *pBehavior; if ( !pAI->GetBehavior( &pBehavior ) ) continue; SetBehaviorParams( pBehavior); } }
//----------------------------------------------------------------------------- // Purpose: ENTITY I/O method for telling the assault behavior to cue assault // Input : &inputdata - //----------------------------------------------------------------------------- void CAI_AssaultGoal::InputBeginAssault( inputdata_t &inputdata ) { int i; for( i = 0 ; i < NumActors() ; i++ ) { CAI_BaseNPC *pActor = GetActor( i ); if( pActor ) { // Now use this actor to lookup the Behavior CAI_AssaultBehavior *pBehavior; if( pActor->GetBehavior( &pBehavior ) ) { // GOT IT! Now tell the behavior that entity i/o wants to cue the assault. pBehavior->ReceiveAssaultCue( CUE_ENTITY_INPUT ); } } } }
void CAI_StandoffBehavior::GatherConditions() { CBaseEntity *pLeader = GetPlayerLeader(); if ( pLeader && m_TimeForceCoverHint.Expired() ) { if ( m_PlayerMoveMonitor.IsMarkSet() ) { if (m_PlayerMoveMonitor.TargetMoved( pLeader ) ) { OnChangeTacticalConstraints(); m_PlayerMoveMonitor.ClearMark(); } } else { m_PlayerMoveMonitor.SetMark( pLeader, 60 ); } } if ( m_fForceNewEnemy ) { m_TimePreventForceNewEnemy.Reset(); GetOuter()->SetEnemy( NULL ); DevMsg(2, "Forcing lose enemy from standoff\n"); } BaseClass::GatherConditions(); m_fForceNewEnemy = false; ClearCondition( COND_ABANDON_TIME_EXPIRED ); bool bAbandonStandoff = false; CAI_Squad *pSquad = GetOuter()->GetSquad(); AISquadIter_t iter; if ( GetEnemy() ) { AI_EnemyInfo_t *pEnemyInfo = GetOuter()->GetEnemies()->Find( GetEnemy() ); if ( pEnemyInfo && m_params.flAbandonTimeLimit > 0 && ( ( pEnemyInfo->timeAtFirstHand != AI_INVALID_TIME && gpGlobals->curtime - pEnemyInfo->timeLastSeen > m_params.flAbandonTimeLimit ) || ( pEnemyInfo->timeAtFirstHand == AI_INVALID_TIME && gpGlobals->curtime - pEnemyInfo->timeFirstSeen > m_params.flAbandonTimeLimit * 2 ) ) ) { SetCondition( COND_ABANDON_TIME_EXPIRED ); bAbandonStandoff = true; if ( pSquad ) { for ( CAI_BaseNPC *pSquadMate = pSquad->GetFirstMember( &iter ); pSquadMate; pSquadMate = pSquad->GetNextMember( &iter ) ) { if ( pSquadMate->IsAlive() && pSquadMate != GetOuter() ) { CAI_StandoffBehavior *pSquadmateStandoff; pSquadMate->GetBehavior( &pSquadmateStandoff ); if ( pSquadmateStandoff && pSquadmateStandoff->IsActive() && pSquadmateStandoff->m_hStandoffGoal == m_hStandoffGoal && !pSquadmateStandoff->HasCondition( COND_ABANDON_TIME_EXPIRED ) ) { bAbandonStandoff = false; break; } } } } } } if ( bAbandonStandoff ) { if ( pSquad ) { for ( CAI_BaseNPC *pSquadMate = pSquad->GetFirstMember( &iter ); pSquadMate; pSquadMate = pSquad->GetNextMember( &iter ) ) { CAI_StandoffBehavior *pSquadmateStandoff; pSquadMate->GetBehavior( &pSquadmateStandoff ); if ( pSquadmateStandoff && pSquadmateStandoff->IsActive() && pSquadmateStandoff->m_hStandoffGoal == m_hStandoffGoal ) pSquadmateStandoff->SetActive( false ); } } else SetActive( false ); } else if ( GetOuter()->m_debugOverlays & OVERLAY_NPC_SELECTED_BIT ) { if( DrawBattleLines.GetInt() != 0 ) { if ( IsBehindBattleLines( GetAbsOrigin() ) ) { NDebugOverlay::Box( GetOuter()->GetAbsOrigin(), -Vector(48,48,4), Vector(48,48,4), 255,0,0,8, 0.1 ); } else { NDebugOverlay::Box( GetOuter()->GetAbsOrigin(), -Vector(48,48,4), Vector(48,48,4), 0,255,0,8, 0.1 ); } } } }