void CWaterPuddle::ZapEnemiesOnPuddle(int ownTeam, EntityId shooterId, EntityId weaponId, float damage, int hitTypeId, IParticleEffect* hitEffect) { IGameVolumes::VolumeInfo volumeInfo; if (!GetVolumeInfoForEntity(GetEntityId(), &volumeInfo)) return; IEntity* pEntity = GetEntity(); Matrix34 worldTM = pEntity->GetWorldTM(); float waterLevel = worldTM.GetTranslation().z + volumeInfo.volumeHeight * 0.5f; CActorManager* pActorManager = CActorManager::GetActorManager(); const int numberOfActors = pActorManager->GetNumActors(); for(int i = 0; i < numberOfActors; i++) { SActorData actorData; pActorManager->GetNthActorData(i, actorData); bool isActorAlive = (actorData.health > 0.0f); bool isActorEnemy = (actorData.teamId != ownTeam); bool isActorInsidevolume = IsActorInsideVolume(worldTM, volumeInfo, actorData.entityId); if (isActorAlive && isActorEnemy && isActorInsidevolume) ApplyHit(actorData, shooterId, weaponId, damage, hitTypeId, waterLevel, hitEffect); } }
//--------------------------------------- TAudioSignalID CAreaAnnouncer::BuildAnnouncement(const EntityId clientId) { const int k_areaCount = m_areaList.size(); if (k_areaCount > 0) { IActorSystem* pActorSystem = gEnv->pGame->GetIGameFramework()->GetIActorSystem(); if (CActor* pClientActor = static_cast<CActor*>(pActorSystem->GetActor(clientId))) { int actorCount[k_maxAnnouncementAreas]; memset(&actorCount, 0, sizeof(actorCount)); CActorManager * pActorManager = CActorManager::GetActorManager(); pActorManager->PrepareForIteration(); const int kNumActors = pActorManager->GetNumActors(); const int kPlayerTeamId = g_pGame->GetGameRules()->GetTeam(clientId); for (int i = 0; i < kNumActors; i++) { SActorData actorData; pActorManager->GetNthActorData(i, actorData); if(actorData.teamId != kPlayerTeamId && actorData.health > 0 && actorData.spectatorMode == CActor::eASM_None) { for (int areaIndex = 0; areaIndex < k_areaCount; areaIndex++) { IEntity* pEntity = gEnv->pEntitySystem->GetEntity(m_areaList[areaIndex].m_areaProxyId); if(pEntity) { IEntityAreaProxy *pArea = (IEntityAreaProxy*)pEntity->GetProxy(ENTITY_PROXY_AREA); if(pArea && pArea->CalcPointWithin(INVALID_ENTITYID, actorData.position, true)) { actorCount[areaIndex]++; break; } } } } } return GenerateAnnouncement(&actorCount[0], k_areaCount, clientId); } } return INVALID_AUDIOSIGNAL_ID; }
void CLocalPlayerComponent::Revive() { if(gEnv->bMultiplayer) { // Reset NotYetSpawned filter. IActionFilter* pNYSFilter = g_pGameActions->FilterNotYetSpawned(); if(pNYSFilter && pNYSFilter->Enabled()) { pNYSFilter->Enable(false); } // For Modes where we can swap teams per round, refresh everyone else's cloak colour on revive. CGameRules *pGameRules = g_pGame->GetGameRules(); if( pGameRules->GetGameMode()==eGM_Gladiator ) { IActorSystem* pActorSys = g_pGame->GetIGameFramework()->GetIActorSystem(); CActorManager* pActorManager = CActorManager::GetActorManager(); pActorManager->PrepareForIteration(); const int kNumActors = pActorManager->GetNumActors(); for(int i=0; i<kNumActors; i++) { SActorData actorData; pActorManager->GetNthActorData(i, actorData); if(CActor* pActor = static_cast<CActor*>(pActorSys->GetActor(actorData.entityId))) { if(pActor->IsCloaked()) { pActor->SetCloakLayer(false); pActor->SetCloakLayer(true); } } } } } m_bIsInFreeFallDeath = false; m_playedMidHealthSound = false; }
void CGameRulesRSSpawning::GetEnemyTeamCentre( SUsefulSpawnData& spawnData, Vec3 * pOutCentre ) { //This is now a blueprint for switching over the other functions to use the CActorManager. // They are not being switched over now because there are more significant changes in MPTrunk // that further changes would conflict with - Rich S int idx = 0; EntityId enemyPlayerId = 0; float fNumEnemies = 0.0f; Vec3 pureAveragePosition(0.0f, 0.0f, 0.0f); CActorManager * pActorManager = CActorManager::GetActorManager(); pActorManager->PrepareForIteration(); const int kNumActors = pActorManager->GetNumActors(); for(int i = 0; i < kNumActors; i++) { SActorData actorData; pActorManager->GetNthActorData(i, actorData); if(actorData.teamId == spawnData.enemyTeamId && actorData.spectatorMode == CActor::eASM_None) { fNumEnemies += 1.0f; float fInvNumEnemies = __fres(fNumEnemies); float fCurrentPositionWeighting = 1.0f - fInvNumEnemies; //This is slightly more computationally expensive than adding them all up, but // avoids the potential for some float precision problems pureAveragePosition = (pureAveragePosition * fCurrentPositionWeighting) + (fInvNumEnemies * actorData.position); } } *pOutCentre = pureAveragePosition; }
void CJaw::SvActivateMissileCountermeasures(EntityId shooterId, const Vec3 &pos, const Vec3 &dir) { if(gEnv->bServer) { float fov = sinf(DEG2RAD(60.0f)); CActorManager * pActorManager = CActorManager::GetActorManager(); pActorManager->PrepareForIteration(); const int kNumActors = pActorManager->GetNumActorsIncludingLocalPlayer(); const int kShooterTeam = g_pGame->GetGameRules()->GetTeam(shooterId); const float fZOffset = 1.5f; const float kPlayerRadius = 0.5f; IActorSystem * pActorSystem = g_pGame->GetIGameFramework()->GetIActorSystem(); for(int i = 0; i < kNumActors; i++) { SActorData actorData; pActorManager->GetNthActorData(i, actorData); } } }
void CNetworkManager::Process() { // Get our file transfer manager CFileTransferManager * pFileTransferManager = g_pClient->GetFileTransfer(); // If our file transfer class exists process it if(pFileTransferManager) pFileTransferManager->Process(); // Have we joined a server and not joined a game yet? if(m_bJoinedServer && !m_bJoinedGame) { // Get our local player CLocalPlayer * pLocalPlayer = g_pClient->GetLocalPlayer(); // Is the file transfer list empty? if(pFileTransferManager->IsComplete() && pLocalPlayer->IsConnectFinished()) { // Flag ourselves as joined a game m_bJoinedGame = true; // Respawn the local player pLocalPlayer->Respawn(); } } if(!m_pNetClient) return; // Process the net client m_pNetClient->Process(); // Are we connected to a server? if(m_pNetClient->IsConnected()) { // If our streamer exists, process it CStreamer * pStreamer = g_pClient->GetStreamer(); if(pStreamer) pStreamer->Pulse(); // Is our script timer manager exists, process it CScriptTimerManager * pScriptTimerManager = g_pClient->GetClientScriptManager()->GetScriptTimerManager(); if(pScriptTimerManager) pScriptTimerManager->Pulse(); // If our player manager exists process it CPlayerManager * pPlayerManager = g_pClient->GetPlayerManager(); if(pPlayerManager) pPlayerManager->Pulse(); // If our vehicle manager exists process it CVehicleManager * pVehicleManager = g_pClient->GetVehicleManager(); if(pVehicleManager) pVehicleManager->Pulse(); // If our checkpoint manager exists process it CCheckpointManager * pCheckpointManager = g_pClient->GetCheckpointManager(); if(pCheckpointManager) pCheckpointManager->Pulse(); // If our object manager exists process it CObjectManager * pObjectManager = g_pClient->GetObjectManager(); if(pObjectManager) pObjectManager->Process(); // Process the audio manager CAudioManager * pAudioManager = g_pClient->GetAudioManager(); if(pAudioManager) pAudioManager->Process(); // Process the actor manager CActorManager * pActorManager = g_pClient->GetActorManager(); if(pActorManager) pActorManager->Process(); } }