예제 #1
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);
		}
	}
예제 #2
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;
	}
}