bool COrderAssist::Update() { if ( !GetTargetEntity() || !GetTargetEntity()->IsAlive() ) return true; return BaseClass::Update(); }
bool COrderHeal::Update() { CBaseEntity *pTarget = GetTargetEntity(); if ( !pTarget || pTarget->m_iHealth >= pTarget->m_iMaxHealth ) return true; return false; }
bool COrderHeal::UpdateOnEvent( COrderEvent_Base *pEvent ) { if ( pEvent->GetType() == ORDER_EVENT_PLAYER_KILLED ) { COrderEvent_PlayerKilled *pKilled = (COrderEvent_PlayerKilled*)pEvent; if ( pKilled->m_pPlayer == GetTargetEntity() ) return true; } return BaseClass::UpdateOnEvent( pEvent ); }
bool COrderAssist::UpdateOnEvent( COrderEvent_Base *pEvent ) { if ( !GetTargetEntity() ) return true; switch( pEvent->GetType() ) { // If our boy dies, then he doesn't care about assistance anymore. case ORDER_EVENT_PLAYER_KILLED: { COrderEvent_PlayerKilled *pKilled = (COrderEvent_PlayerKilled*)pEvent; if ( pKilled->m_pPlayer == GetTargetEntity() ) return true; } break; // Did we damage one of the enemies? case ORDER_EVENT_PLAYER_DAMAGED: { COrderEvent_PlayerDamaged *pPlayerDamaged = (COrderEvent_PlayerDamaged*)pEvent; if ( pPlayerDamaged->m_TakeDamageInfo.GetInflictor() == GetOwner() ) { for ( int i=0; i < NUM_ASSIST_ENEMIES; i++ ) { if ( pPlayerDamaged->m_pPlayerDamaged == m_Enemies[i].Get() ) { // Reset the timer on the guy we're defending, in case we killed his // attacker really quickly. // CBaseTFPlayer *pPlayer = (CBaseTFPlayer*)GetTargetEntity(); // pPlayer->m_flLastTimeDamagedByEnemy = 0; return true; } } } } break; } return BaseClass::UpdateOnEvent( pEvent ); }
//----------------------------------------------------------------------------- // Purpose: An event for this order's target has arrived. Return true if this order should be removed. //----------------------------------------------------------------------------- bool COrder::UpdateOnEvent( COrderEvent_Base *pEvent ) { // Default behavior is to get rid of the order if the object we're referencing // gets destroyed. if ( pEvent->GetType() == ORDER_EVENT_OBJECT_DESTROYED ) { COrderEvent_ObjectDestroyed *pObjDestroyed = (COrderEvent_ObjectDestroyed*)pEvent; if ( pObjDestroyed->m_pObject == GetTargetEntity() ) return true; } return false; }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Purpose: for updates on the order. Return true if the order should be removed. //----------------------------------------------------------------------------- bool COrder::Update( void ) { // Orders with no targets & no owners don't go away on their own if ( !GetOwner() ) return false; // Has it timed out? if( gpGlobals->curtime > m_flDieTime ) return true; // Check to make sure we're still within the correct distance if ( m_flDistanceToRemove ) { CBaseEntity *pTarget = GetTargetEntity(); if ( pTarget ) { // Have the player and the target moved away from each other? if ( (m_hOwningPlayer->GetAbsOrigin() - pTarget->GetAbsOrigin()).Length() > (m_flDistanceToRemove * 1.25) ) return true; } } return false; }
// // Make player 'orbit camera' rotate to face this point // void CClientCamera::SetOrbitTarget ( const CVector& vecPosition ) { if ( m_pCamera ) { CClientEntity* pCameraTarget = GetTargetEntity ( ); if ( pCameraTarget != nullptr ) { CVector vecTargetPosition; pCameraTarget->GetPosition ( vecTargetPosition ); if ( pCameraTarget->GetType () == CCLIENTPLAYER ) vecTargetPosition.fZ += 0.6f; CVector vecDirection = vecPosition - vecTargetPosition; vecDirection.Normalize (); float fAngleHorz = -atan2 ( vecDirection.fX, vecDirection.fY ) - PI / 2; float fAngleVert = asin ( vecDirection.fZ ); CCam* pCam = m_pCamera->GetCam ( m_pCamera->GetActiveCam () ); pCam->SetDirection ( fAngleHorz, fAngleVert ); } } }