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!"); } } }
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); } }
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; }
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; }
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; } }