//---------------------------------------
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;
}
Пример #4
0
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);
		}
	}
}