CUnit *Find(CUnitCache &cache) const { return Find(cache.begin(), cache.end()); }
bool FileFinder::Find(const char* filename){ string s(filename); return Find(s); }
CUnit *Find(CUnitCache &cache) { FillBadGood(*attacker, range, good, bad).Fill(cache); return Find(cache.begin(), cache.end()); }
CUnit *Find(const std::vector<CUnit *> &table) const { return Find(table.begin(), table.end()); }
bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimePenalty) { if (!addr.IsRoutable()) return false; bool fNew = false; int nId; CAddrInfo* pinfo = Find(addr, &nId); if (pinfo) { // periodically update nTime bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval - nTimePenalty)) pinfo->nTime = std::max((int64_t)0, addr.nTime - nTimePenalty); // add services pinfo->nServices |= addr.nServices; // do not update if no new information is present if (!addr.nTime || (pinfo->nTime && addr.nTime <= pinfo->nTime)) return false; // do not update if the entry was already in the "tried" table if (pinfo->fInTried) return false; // do not update if the max reference count is reached if (pinfo->nRefCount == ADDRMAN_NEW_BUCKETS_PER_ADDRESS) return false; // stochastic test: previous nRefCount == N: 2^N times harder to increase it int nFactor = 1; for (int n = 0; n < pinfo->nRefCount; n++) nFactor *= 2; if (nFactor > 1 && (RandomInt(nFactor) != 0)) return false; } else { pinfo = Create(addr, source, &nId); pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty); nNew++; fNew = true; } int nUBucket = pinfo->GetNewBucket(nKey, source); int nUBucketPos = pinfo->GetBucketPosition(nKey, true, nUBucket); if (vvNew[nUBucket][nUBucketPos] != nId) { bool fInsert = vvNew[nUBucket][nUBucketPos] == -1; if (!fInsert) { CAddrInfo& infoExisting = mapInfo[vvNew[nUBucket][nUBucketPos]]; if (infoExisting.IsTerrible() || (infoExisting.nRefCount > 1 && pinfo->nRefCount == 0)) { // Overwrite the existing new table entry. fInsert = true; } } if (fInsert) { ClearNew(nUBucket, nUBucketPos); pinfo->nRefCount++; vvNew[nUBucket][nUBucketPos] = nId; } else { if (pinfo->nRefCount == 0) { Delete(nId); } } } return fNew; }
CUnit *Find(std::vector<CUnit *> &table) { FillBadGood(*attacker, range, good, bad).Fill(table.begin(), table.end()); return Find(table.begin(), table.end()); }
//----------------------------------------------------------------------------- void CAI_Enemies::SetMobbedMe( CBaseEntity *pEnemy, bool bMobbedMe ) { AI_EnemyInfo_t *pMemory = Find( pEnemy ); if ( pMemory ) pMemory->bMobbedMe = bMobbedMe; }
tbool CXloader_MultiWrapper::Find(CXloader* pXloader) { std::list<CXloader*>::iterator it_Ignored; return Find(pXloader, &it_Ignored); } // Find
//----------------------------------------------------------------------------- void CAI_Enemies::SetUnforgettable( CBaseEntity *pEnemy, bool bUnforgettable ) { AI_EnemyInfo_t *pMemory = Find( pEnemy ); if ( pMemory ) pMemory->bUnforgettable = bUnforgettable; }
void CAI_Enemies::SetTimeValidEnemy( CBaseEntity *pEnemy, float flTime ) { AI_EnemyInfo_t *pMemory = Find( pEnemy ); if ( pMemory ) pMemory->timeValidEnemy = flTime; }
//------------------------------------------------------------------------------ // Purpose : Returns true if this enemy is part of my memory //------------------------------------------------------------------------------ bool CAI_Enemies::HasMemory( CBaseEntity *pEnemy ) { return ( Find( pEnemy ) != NULL ); }
//------------------------------------------------------------------------------ // Purpose : Returns true if this enemy is part of my memory //------------------------------------------------------------------------------ void CAI_Enemies::OnTookDamageFrom( CBaseEntity *pEnemy ) { AI_EnemyInfo_t *pMemory = Find( pEnemy, true ); if ( pMemory ) pMemory->timeLastReceivedDamageFrom = gpGlobals->curtime; }
bool CAI_Enemies::UpdateMemory(CAI_Network* pAINet, CBaseEntity *pEnemy, const Vector &vPosition, float reactionDelay, bool firstHand ) { if ( pEnemy == AI_UNKNOWN_ENEMY ) pEnemy = NULL; const float DIST_TRIGGER_REACQUIRE_SQ = Square(20.0 * 12.0); const float TIME_TRIGGER_REACQUIRE = 4.0; const float MIN_DIST_TIME_TRIGGER_REACQUIRE_SQ = Square(4.0 * 12.0); AI_EnemyInfo_t *pMemory = Find( pEnemy ); // ------------------------------------------- // Otherwise just update my own // ------------------------------------------- // Update enemy information if ( pMemory ) { Assert(pEnemy || pMemory->bDangerMemory == true); if ( firstHand ) pMemory->timeLastSeen = gpGlobals->curtime; pMemory->bEludedMe = false; float deltaDist = (pMemory->vLastKnownLocation - vPosition).LengthSqr(); if (deltaDist>DIST_TRIGGER_REACQUIRE_SQ || ( deltaDist>MIN_DIST_TIME_TRIGGER_REACQUIRE_SQ && ( gpGlobals->curtime - pMemory->timeLastSeen ) > TIME_TRIGGER_REACQUIRE ) ) { pMemory->timeLastReacquired = gpGlobals->curtime; } // Only update if the enemy has moved if (deltaDist>Square(12.0)) { pMemory->vLastKnownLocation = vPosition; } // Update the time at which we first saw him firsthand if ( firstHand && pMemory->timeAtFirstHand == AI_INVALID_TIME ) { pMemory->timeAtFirstHand = gpGlobals->curtime; } return false; } // If not on my list of enemies add it AI_EnemyInfo_t *pAddMemory = new AI_EnemyInfo_t; pAddMemory->vLastKnownLocation = vPosition; if ( firstHand ) { pAddMemory->timeLastReacquired = pAddMemory->timeFirstSeen = pAddMemory->timeLastSeen = pAddMemory->timeAtFirstHand = gpGlobals->curtime; } else { // Block free knowledge pAddMemory->timeLastReacquired = pAddMemory->timeFirstSeen = pAddMemory->timeLastSeen = ( gpGlobals->curtime - (m_flFreeKnowledgeDuration + 0.01) ); pAddMemory->timeAtFirstHand = AI_INVALID_TIME; } if ( reactionDelay > 0.0 ) pAddMemory->timeValidEnemy = gpGlobals->curtime + reactionDelay; pAddMemory->bEludedMe = false; // I'm either remembering a position of an enemy or just a danger position pAddMemory->hEnemy = pEnemy; pAddMemory->bDangerMemory = ( pEnemy == NULL ); if ( pEnemy ) { CAI_BaseNPC *pEnemyNPC = pEnemy->MyNPCPointer(); if ( pEnemyNPC ) pAddMemory->nFaction = pEnemyNPC->GetFaction(); } // add to the list m_Map.Insert( pEnemy, pAddMemory ); m_serial++; return true; }