Beispiel #1
0
void CView::CreateAudioListener()
{
	if (m_pAudioListener == NULL)
	{
		SEntitySpawnParams oEntitySpawnParams;
		oEntitySpawnParams.sName  = "SoundListener";
		oEntitySpawnParams.pClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass("SoundListener");
		m_pAudioListener = gEnv->pEntitySystem->SpawnEntity(oEntitySpawnParams, true);

		if (m_pAudioListener != NULL)
		{
			m_pAudioListener->SetFlagsExtended(m_pAudioListener->GetFlagsExtended() | ENTITY_FLAG_EXTENDED_AUDIO_LISTENER);
			gEnv->pEntitySystem->AddEntityEventListener(m_pAudioListener->GetId(), ENTITY_EVENT_DONE, this);
			CryFixedStringT<64> sTemp;
			sTemp.Format("SoundListener(%d)", static_cast<int>(m_pAudioListener->GetId()));
			m_pAudioListener->SetName(sTemp.c_str());

			IEntityAudioProxyPtr pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(m_pAudioListener->CreateProxy(ENTITY_PROXY_AUDIO));
			CRY_ASSERT(pIEntityAudioProxy.get());
		}
		else
		{
			CryFatalError("<Sound>: audio listener creation failed in CView ctor!");
		}
	}
}
Beispiel #2
0
void CView::CreateAudioListener()
{
	if (m_pAudioListener == nullptr)
	{
		SEntitySpawnParams oEntitySpawnParams;
		oEntitySpawnParams.sName  = "AudioListener";
		oEntitySpawnParams.pClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass("AudioListener");
		m_pAudioListener          = gEnv->pEntitySystem->SpawnEntity(oEntitySpawnParams, true);

		if (m_pAudioListener != nullptr)
		{
			// We don't want the audio listener to serialize as the entity gets completely removed and recreated during save/load!
			m_pAudioListener->SetFlags(m_pAudioListener->GetFlags() | (ENTITY_FLAG_TRIGGER_AREAS | ENTITY_FLAG_NO_SAVE));
			m_pAudioListener->SetFlagsExtended(m_pAudioListener->GetFlagsExtended() | ENTITY_FLAG_EXTENDED_AUDIO_LISTENER);
			gEnv->pEntitySystem->AddEntityEventListener(m_pAudioListener->GetId(), ENTITY_EVENT_DONE, this);
			CryFixedStringT<64> sTemp;
			sTemp.Format("AudioListener(%d)", static_cast<int>(m_pAudioListener->GetId()));
			m_pAudioListener->SetName(sTemp.c_str());

			IEntityAudioProxyPtr pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(m_pAudioListener->CreateProxy(ENTITY_PROXY_AUDIO));
			CRY_ASSERT(pIEntityAudioProxy.get());
		}
		else
		{
			CryFatalError("<Audio>: Audio listener creation failed in CView::CreateAudioListener!");
		}
	}
	else
	{
		m_pAudioListener->SetFlagsExtended(m_pAudioListener->GetFlagsExtended() | ENTITY_FLAG_EXTENDED_AUDIO_LISTENER);
		m_pAudioListener->InvalidateTM(ENTITY_XFORM_POS);
	}
}
Beispiel #3
0
	void SetOnProxy(IEntity* const pEntity, float const fValue)
	{
		IEntityAudioProxyPtr const pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(pEntity->CreateProxy(ENTITY_PROXY_AUDIO));
		
		if (pIEntityAudioProxy != NPTR)
		{
			pIEntityAudioProxy->SetRtpcValue(m_nRtpcID, fValue);
		}
	}
	void SetStateOnProxy(IEntity* const pEntity, uint32 const nStateIdx)
	{
		IEntityAudioProxyPtr const pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(pEntity->CreateProxy(ENTITY_PROXY_AUDIO));

		if (pIEntityAudioProxy != nullptr)
		{
			pIEntityAudioProxy->SetSwitchState(m_nSwitchID, m_aSwitchStates[nStateIdx]);
		}
	}
void CVehicleSeatActionSound::StopTrigger()
{
	if (m_pSeat)
		m_pSeat->ChangedNetworkState(CVehicle::ASPECT_SEAT_ACTION);

	if (m_nAudioControlIDStop != INVALID_AUDIO_CONTROL_ID)
	{
		ExecuteTrigger(m_nAudioControlIDStop);
	}
	else if(m_nAudioControlIDStart != INVALID_AUDIO_CONTROL_ID)
	{
		IEntityAudioProxyPtr pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(m_pVehicle->GetEntity()->CreateProxy(ENTITY_PROXY_AUDIO));
		assert(pIEntityAudioProxy.get());
		pIEntityAudioProxy->StopTrigger(m_nAudioControlIDStart);
	}

	m_enabled = false;
}
Beispiel #6
0
void CBoidObject::ExecuteTrigger(int nIndex)
{
	if ((nIndex >= 0) && (nIndex < (int)m_flock->m_bc.audio.size()))
	{
		const TAudioControlID id = m_flock->m_bc.audio[nIndex];
		if (id != INVALID_AUDIO_CONTROL_ID)
		{
			IEntity* pEntity = gEnv->pEntitySystem->GetEntity(m_entity);
			if (pEntity)
			{
				IEntityAudioProxyPtr audioProxy = crycomponent_cast<IEntityAudioProxyPtr>(pEntity->CreateProxy(ENTITY_PROXY_AUDIO));

				if (audioProxy.get())
				{
					audioProxy->ExecuteTrigger(id, eLSM_None);
				}
			}
		}
	}
}
void CVehicleSeatActionSound::ExecuteTrigger(const TAudioControlID& controlID)
{
	if (controlID == INVALID_AUDIO_CONTROL_ID)
		return;

	if (m_pSeat)
		m_pSeat->ChangedNetworkState(CVehicle::ASPECT_SEAT_ACTION);

	IEntityAudioProxyPtr pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(m_pVehicle->GetEntity()->CreateProxy(ENTITY_PROXY_AUDIO));
	assert(pIEntityAudioProxy.get());

	pIEntityAudioProxy->ExecuteTrigger(controlID, eLSM_None);

	// Report the AI system about the vehicle movement sound.
	if (!gEnv->bMultiplayer && gEnv->pAISystem)
	{
		Vec3 pos = m_pHelper->GetVehicleSpaceTranslation();
		SAIStimulus stim(AISTIM_SOUND, AISOUND_MOVEMENT_LOUD, m_pVehicle->GetEntityId(), 0, pos, ZERO, 200.0f);
		gEnv->pAISystem->RegisterStimulus(stim);
	}

	m_enabled = true;
}
Beispiel #8
0
void CMFXEffect::Execute(SMFXRunTimeEffectParams& params)
{
	FUNCTION_PROFILER(gEnv->pSystem, PROFILE_ACTION);

	// TEMP Code: testing footsteps; can this stay here???
	IEntity *pEnt = NULL;

	if (m_effectParams.libName == "footstep_player")
	{
		if (params.audioProxyEntityId != 0)
		{
			pEnt = gEnv->pEntitySystem->GetEntity(params.audioProxyEntityId);

			if (pEnt != NULL)
			{
				IEntityAudioProxyPtr pIEntityAudioProxy = crycomponent_cast<IEntityAudioProxyPtr>(pEnt->CreateProxy(ENTITY_PROXY_AUDIO));

				TAudioControlID nFootstepTriggerID = INVALID_AUDIO_CONTROL_ID;
				gEnv->pAudioSystem->GetAudioTriggerID(m_effectParams.libName, nFootstepTriggerID);

				TAudioControlID nFirstPersonSwitchID		= INVALID_AUDIO_CONTROL_ID;
				TAudioSwitchStateID nFirstPersonStateID	= INVALID_AUDIO_SWITCH_STATE_ID;
				gEnv->pAudioSystem->GetAudioSwitchID("1stOr3rdP", nFirstPersonSwitchID);
				gEnv->pAudioSystem->GetAudioSwitchStateID(nFirstPersonSwitchID, params.playSoundFP ? "1stP" : "3rdP", nFirstPersonStateID);

				TAudioControlID nSurfaceSwitchID		= INVALID_AUDIO_CONTROL_ID;
				TAudioSwitchStateID nSurfaceStateID	= INVALID_AUDIO_SWITCH_STATE_ID;
				gEnv->pAudioSystem->GetAudioSwitchID("SurfaceType", nSurfaceSwitchID);
				gEnv->pAudioSystem->GetAudioSwitchStateID(nSurfaceSwitchID, m_effectParams.name, nSurfaceStateID);

				TAudioControlID nSpeedRtpcId = INVALID_AUDIO_CONTROL_ID;
				gEnv->pAudioSystem->GetAudioRtpcID("character_speed", nSpeedRtpcId);

				float fSpeed = 0.0f;

				for (int i=0; i < params.MAX_SOUND_PARAMS; ++i)
				{
					const char* soundParamName = params.soundParams[i].paramName;
					
					if ((soundParamName != NULL) && (soundParamName[0] != '\0') && (_stricmp(soundParamName, "speed") == 0))
					{
						float const fValue = params.soundParams[i].paramValue;
						CRY_ASSERT(NumberValid(fValue));

						fSpeed = fValue;
						break;
					}
				} 

				pIEntityAudioProxy->SetSwitchState(nFirstPersonSwitchID, nFirstPersonStateID);
				pIEntityAudioProxy->SetSwitchState(nSurfaceSwitchID, nSurfaceStateID);
				pIEntityAudioProxy->SetRtpcValue(nSpeedRtpcId, fSpeed);
				pIEntityAudioProxy->ExecuteTrigger(nFootstepTriggerID, eLSM_None);
			}
		}
	}
	else if ((m_effectParams.libName == "bulletimpacts") && ((params.playflags & MFX_PLAY_SOUND) != 0))
	{
		TAudioControlID nAudioTriggerID = INVALID_AUDIO_CONTROL_ID;
		gEnv->pAudioSystem->GetAudioTriggerID(m_effectParams.name, nAudioTriggerID);

		if (nAudioTriggerID != INVALID_AUDIO_CONTROL_ID)
		{
			IAudioProxy* const pIAudioProxy = gEnv->pAudioSystem->GetFreeAudioProxy();

			if (pIAudioProxy != NULL)
			{
				pIAudioProxy->Initialize("Projectile");
				pIAudioProxy->SetPosition(params.pos);
				pIAudioProxy->SetObstructionCalcType(eAOOCT_SINGLE_RAY);
				pIAudioProxy->SetCurrentEnvironments();
				pIAudioProxy->ExecuteTrigger(nAudioTriggerID, eLSM_None);
				pIAudioProxy->Release();
			}
		}
	}
	else if ((m_effectParams.libName == "collisions") && ((params.playflags & MFX_PLAY_SOUND) != 0))
	{
		TAudioControlID nAudioTriggerID = INVALID_AUDIO_CONTROL_ID;
		gEnv->pAudioSystem->GetAudioTriggerID(m_effectParams.name, nAudioTriggerID);

		if (nAudioTriggerID != INVALID_AUDIO_CONTROL_ID)
		{
			IAudioProxy* const pIAudioProxy = gEnv->pAudioSystem->GetFreeAudioProxy();

			if (pIAudioProxy != NULL)
			{
				pIAudioProxy->Initialize("Collision");
				pIAudioProxy->SetPosition(params.pos);
				pIAudioProxy->SetObstructionCalcType(eAOOCT_SINGLE_RAY);
				pIAudioProxy->SetCurrentEnvironments();
				pIAudioProxy->ExecuteTrigger(nAudioTriggerID, eLSM_None);
				pIAudioProxy->Release();
			}
		}
	}

	std::vector<IMFXEffectPtr>::iterator iter = m_effects.begin();
	std::vector<IMFXEffectPtr>::iterator iterEnd = m_effects.end();
	while (iter != iterEnd)
	{
		IMFXEffectPtr& cur = *iter;
		if (cur)
		{
			if (cur->CanExecute(params))
				cur->Execute(params);
		}
		++iter;
	}
}