BVB Source Codes

CRYENGINE Show RuntimeAreaObject.cpp Source code

Return Download CRYENGINE: download RuntimeAreaObject.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "RuntimeAreaObject.h"
  5.  
  6. CRuntimeAreaObject::TAudioControlMap CRuntimeAreaObject::m_audioControls;
  7.  
  8. ///////////////////////////////////////////////////////////////////////////
  9. CRuntimeAreaObject::CRuntimeAreaObject()
  10. {
  11. }
  12.  
  13. ///////////////////////////////////////////////////////////////////////////
  14. CRuntimeAreaObject::~CRuntimeAreaObject()
  15. {
  16. }
  17.  
  18. //////////////////////////////////////////////////////////////////////////
  19. bool CRuntimeAreaObject::Init(IGameObject* pGameObject)
  20. {
  21.         SetGameObject(pGameObject);
  22.  
  23.         return true;
  24. }
  25.  
  26. //////////////////////////////////////////////////////////////////////////
  27. bool CRuntimeAreaObject::ReloadExtension(IGameObject* pGameObject, const SEntitySpawnParams& params)
  28. {
  29.         ResetGameObject();
  30.  
  31.         CRY_ASSERT_MESSAGE(false, "CRuntimeAreaObject::ReloadExtension not implemented");
  32.  
  33.         return false;
  34. }
  35.  
  36. ///////////////////////////////////////////////////////////////////////////
  37. bool CRuntimeAreaObject::NetSerialize(TSerialize ser, EEntityAspects aspect, uint8 profile, int flags)
  38. {
  39.         CRY_ASSERT_MESSAGE(false, "CRuntimeAreaObject::NetSerialize not implemented");
  40.  
  41.         return false;
  42. }
  43.  
  44. ///////////////////////////////////////////////////////////////////////////
  45. void CRuntimeAreaObject::ProcessEvent(SEntityEvent& entityEvent)
  46. {
  47.         switch (entityEvent.event)
  48.         {
  49.         case ENTITY_EVENT_ENTERAREA:
  50.                 {
  51.                         EntityId const nEntityID = static_cast<EntityId>(entityEvent.nParam[0]);
  52.  
  53.                         IEntity* const pEntity = gEnv->pEntitySystem->GetEntity(nEntityID);
  54.                         if ((pEntity != NULL) && ((pEntity->GetFlagsExtended() & ENTITY_FLAG_EXTENDED_CAN_COLLIDE_WITH_MERGED_MESHES) != 0))
  55.                         {
  56.                                 TAudioParameterMap cNewEntityParamMap;
  57.  
  58.                                 UpdateParameterValues(pEntity, cNewEntityParamMap);
  59.  
  60.                                 m_activeEntitySounds.insert(
  61.                                   std::pair<EntityId, TAudioParameterMap>(static_cast<EntityId>(nEntityID), cNewEntityParamMap));
  62.                         }
  63.  
  64.                         break;
  65.                 }
  66.         case ENTITY_EVENT_LEAVEAREA:
  67.                 {
  68.                         EntityId const nEntityID = static_cast<EntityId>(entityEvent.nParam[0]);
  69.  
  70.                         TEntitySoundsMap::iterator iFoundPair = m_activeEntitySounds.find(nEntityID);
  71.                         if (iFoundPair != m_activeEntitySounds.end())
  72.                         {
  73.                                 StopEntitySounds(iFoundPair->first, iFoundPair->second);
  74.                                 m_activeEntitySounds.erase(nEntityID);
  75.                         }
  76.  
  77.                         break;
  78.                 }
  79.         case ENTITY_EVENT_MOVEINSIDEAREA:
  80.                 {
  81.                         EntityId const nEntityID = static_cast<EntityId>(entityEvent.nParam[0]);
  82.                         TEntitySoundsMap::iterator iFoundPair = m_activeEntitySounds.find(nEntityID);
  83.  
  84.                         if (iFoundPair != m_activeEntitySounds.end())
  85.                         {
  86.                                 IEntity* const pEntity = gEnv->pEntitySystem->GetEntity(nEntityID);
  87.                                 if ((pEntity != NULL) && ((pEntity->GetFlagsExtended() & ENTITY_FLAG_EXTENDED_CAN_COLLIDE_WITH_MERGED_MESHES) != 0))
  88.                                 {
  89.                                         UpdateParameterValues(pEntity, iFoundPair->second);
  90.                                 }
  91.                         }
  92.  
  93.                         break;
  94.                 }
  95.         }
  96. }
  97.  
  98. ///////////////////////////////////////////////////////////////////////////
  99. void CRuntimeAreaObject::GetMemoryUsage(ICrySizer* pSizer) const
  100. {
  101.         pSizer->AddObject(this, sizeof(*this));
  102. }
  103.  
  104. void CRuntimeAreaObject::OnShutDown()
  105. {
  106.         // Stop all of the currently playing sounds controlled by this RuntimeAreaObject instance.
  107.         for (TEntitySoundsMap::iterator iEntityData = m_activeEntitySounds.begin(),
  108.                 iEntityDataEnd = m_activeEntitySounds.end(); iEntityData != iEntityDataEnd; ++iEntityData)
  109.         {
  110.                 StopEntitySounds(iEntityData->first, iEntityData->second);
  111.         }
  112. }
  113.  
  114. //////////////////////////////////////////////////////////////////////////
  115. void CRuntimeAreaObject::UpdateParameterValues(IEntity* const pEntity, TAudioParameterMap& paramMap)
  116. {
  117.         static float const fParamEpsilon = 0.001f;
  118.         static float const fMaxDensity = 256.0f;
  119.  
  120.         IEntityAudioComponent* const pAudioProxy = pEntity->GetOrCreateComponent<IEntityAudioComponent>();
  121.         if (pAudioProxy != NULL)
  122.         {
  123.                 ISurfaceType* aSurfaceTypes[MMRM_MAX_SURFACE_TYPES];
  124.                 memset(aSurfaceTypes, 0x0, sizeof(aSurfaceTypes));
  125.  
  126.                 float aDensities[MMRM_MAX_SURFACE_TYPES];
  127.                 memset(aDensities, 0x0, sizeof(aDensities));
  128.  
  129.                 gEnv->p3DEngine->GetIMergedMeshesManager()->QueryDensity(pEntity->GetPos(), aSurfaceTypes, aDensities);
  130.  
  131.                 for (int i = 0; i < MMRM_MAX_SURFACE_TYPES && (aSurfaceTypes[i] != NULL); ++i)
  132.                 {
  133.                         float const fNewParamValue = aDensities[i] / fMaxDensity;
  134.                         TSurfaceCRC const nSurfaceCrc = CCrc32::ComputeLowercase(aSurfaceTypes[i]->GetName());
  135.  
  136.                         TAudioParameterMap::iterator iSoundPair = paramMap.find(nSurfaceCrc);
  137.                         if (iSoundPair == paramMap.end())
  138.                         {
  139.                                 if (fNewParamValue > 0.0f)
  140.                                 {
  141.                                         // The sound for this surface is not yet playing on this entity, needs to be started.
  142.                                         TAudioControlMap::const_iterator const iAudioControls = m_audioControls.find(nSurfaceCrc);
  143.                                         if (iAudioControls != m_audioControls.end())
  144.                                         {
  145.                                                 SAudioControls const& rAudioControls = iAudioControls->second;
  146.  
  147.                                                 pAudioProxy->SetRtpcValue(rAudioControls.audioRtpcId, fNewParamValue);
  148.                                                 pAudioProxy->ExecuteTrigger(rAudioControls.audioTriggerId);
  149.  
  150.                                                 paramMap.insert(
  151.                                                   std::pair<TSurfaceCRC, SAreaSoundInfo>(
  152.                                                     nSurfaceCrc,
  153.                                                     SAreaSoundInfo(rAudioControls, fNewParamValue)));
  154.                                         }
  155.                                 }
  156.                         }
  157.                         else
  158.                         {
  159.                                 SAreaSoundInfo& oSoundInfo = iSoundPair->second;
  160.                                 if (fabs_tpl(fNewParamValue - oSoundInfo.parameter) >= fParamEpsilon)
  161.                                 {
  162.                                         oSoundInfo.parameter = fNewParamValue;
  163.                                         pAudioProxy->SetRtpcValue(oSoundInfo.audioControls.audioRtpcId, oSoundInfo.parameter);
  164.                                 }
  165.                         }
  166.                 }
  167.         }
  168. }
  169.  
  170. ///////////////////////////////////////////////////////////////////////////
  171. void CRuntimeAreaObject::StopEntitySounds(EntityId const entityId, TAudioParameterMap& paramMap)
  172. {
  173.         IEntity* const pEntity = gEnv->pEntitySystem->GetEntity(entityId);
  174.         if (pEntity != NULL)
  175.         {
  176.                 IEntityAudioComponent* const pAudioProxy = pEntity->GetOrCreateComponent<IEntityAudioComponent>();
  177.                 if (pAudioProxy != NULL)
  178.                 {
  179.                         for (TAudioParameterMap::const_iterator iSoundPair = paramMap.begin(), iSoundPairEnd = paramMap.end(); iSoundPair != iSoundPairEnd; ++iSoundPair)
  180.                         {
  181.                                 pAudioProxy->StopTrigger(iSoundPair->second.audioControls.audioTriggerId);
  182.                                 pAudioProxy->SetRtpcValue(iSoundPair->second.audioControls.audioRtpcId, 0.0f);
  183.                         }
  184.  
  185.                         paramMap.clear();
  186.                 }
  187.         }
  188. }
  189.  
downloadRuntimeAreaObject.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top