From 4e8b61dea0d28ebb2ff8bfc6a3ee769588998aa3 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 2 Jun 2016 19:12:37 -0700 Subject: [PATCH] Limit collision injectors count to 3 --- interface/src/avatar/AvatarManager.cpp | 12 +++++++++++- interface/src/avatar/AvatarManager.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 567602cd34..72deb6340a 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -337,7 +337,17 @@ void AvatarManager::handleCollisionEvents(const CollisionEvents& collisionEvents // but most avatars are roughly the same size, so let's not be so fancy yet. const float AVATAR_STRETCH_FACTOR = 1.0f; - AudioInjector::playSound(collisionSound, energyFactorOfFull, AVATAR_STRETCH_FACTOR, myAvatar->getPosition()); + + _collisionInjectors.remove_if([](QPointer& injector) { + return !injector || injector->isFinished(); + }); + + static const int MAX_INJECTOR_COUNT = 3; + if (_collisionInjectors.size() < MAX_INJECTOR_COUNT) { + auto injector = AudioInjector::playSound(collisionSound, energyFactorOfFull, AVATAR_STRETCH_FACTOR, + myAvatar->getPosition()); + _collisionInjectors.emplace_back(injector); + } myAvatar->collisionWithEntity(collision); return; } diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 1cd295d69f..9be186301d 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -25,6 +25,7 @@ #include "AvatarMotionState.h" class MyAvatar; +class AudioInjector; class AvatarManager : public AvatarHashMap { Q_OBJECT @@ -94,6 +95,8 @@ private: bool _shouldShowReceiveStats = false; + std::list> _collisionInjectors; + SetOfAvatarMotionStates _motionStatesThatMightUpdate; SetOfMotionStates _motionStatesToAddToPhysics; VectorOfMotionStates _motionStatesToRemoveFromPhysics;