37#include <memory_resource>
42 template<CVec3 Vec3Type>
87 template<
class Key,
class T>
119 template<CVec3 Vec3Type>
122 template<CVec3 Vec3Type>
183 using CurveAttenuationCacheArray = std::pmr::vector<CurveAttenuationCache>;
201 mAttenuationCache.emplace(
handle,
206 mDirectionAttenuationCache.emplace(
handle,
214 return mAttenuationCache.erase(
source) + mDirectionAttenuationCache.erase(
source);
230 auto it = mAttenuationCache.find(
source);
231 if (
it == mAttenuationCache.end())
235 if (
cache != std::ranges::end(
it->second))
236 return cache->AttenuationValue;
243 auto it = mDirectionAttenuationCache.find(
source);
244 if (
it == mDirectionAttenuationCache.end())
247 return it->second.AttenuationValue;
257 auto it = mAttenuationCache.find(
source);
258 if (
it == mAttenuationCache.end())
269 auto it = mDirectionAttenuationCache.find(
source);
270 if (
it == mDirectionAttenuationCache.end())
275 it->second.AttenuationValue = ProcessAngleAttenuationImpl(
directionDot,
it->second.Cone);
280 template<CVec3 Vec3Type>
332 (
listener.Orientation.ToQuat().Conjugated() *
source.Orientation.ToQuat()).ToBasis();
372 if (
cone.InnerAngle >= JPL_TWO_PI)
378 return ProcessAngleAttenuationImpl(std::cos(
azimuth),
cone);
381 template<CVec3 Vec3Type>
386 if (
cone.InnerAngle >= JPL_TWO_PI)
399 return ProcessAngleAttenuationImpl(
dot,
cone);
#define JPL_ASSERT(inExpression,...)
Main assert macro, usage: JPL_ASSERT(condition, message) or JPL_ASSERT(condition)
Definition ErrorReporting.h:76
Definition DirectPathService.h:84
JPL_INLINE bool ReleaseEffectData(DirectEffectHandle source)
Definition DirectPathService.h:212
JPL_INLINE float GetDistanceAttenuation(DirectEffectHandle source, const AttenuationCurveRef &curve) const
Definition DirectPathService.h:228
DirectPathService(const DirectPathService &)=delete
DirectPathService & operator=(const DirectPathService &)=delete
static JPL_INLINE float ProcessAngleAttenuation(const Vec3Type &position, const Position< Vec3Type > &referencePoint, AttenuationCone cone)
Definition DirectPathService.h:382
static JPL_INLINE DirectPathResult< Vec3Type > ProcessDirectPath(const Position< Vec3Type > &source, const Position< Vec3Type > &listener)
Definition DirectPathService.h:281
JPL_INLINE AttenuationCurveRef AssignAttenuationCurve(DirectEffectHandle source, AttenuationCurveRef attenuationFunction)
Definition DirectPathService.h:217
JPL_INLINE float GetDirectionAttenuation(DirectEffectHandle source) const
Definition DirectPathService.h:241
JPL_INLINE bool EvaluateDirection(DirectEffectHandle source, float directionDot)
Definition DirectPathService.h:267
JPL_INLINE DirectEffectHandle InitializeDirrectEffect(const DirectEffectInitParameters &initParameters)
Definition DirectPathService.h:198
DirectPathService()=default
static JPL_INLINE float EvaluateDistance(float distance, const AttenuationCurveRef &attenuationCurve)
Definition DirectPathService.h:250
JPL_INLINE constexpr bool IsNearlyZero(T value, T errorTolerance=JPL_FLOAT_EPS_V< T >) noexcept
Definition Math.h:146
JPL_INLINE constexpr bool IsNearlyEqual(T a, T b, T tolerance=JPL_FLOAT_EPS_V< T >) noexcept
Definition Math.h:152
Definition AcousticMaterial.h:36
JPL_INLINE auto GetX(const Vec3Type &v) noexcept
Definition Vec3Traits.h:35
std::shared_ptr< AttenuationFunction > AttenuationCurveRef
Definition DirectPathService.h:58
JPL_INLINE auto GetZ(const Vec3Type &v) noexcept
Definition Vec3Traits.h:37
std::pmr::memory_resource * GetDefaultMemoryResource() noexcept
Definition Memory.h:42
JPL_INLINE simd min(const simd &a, const simd &b) noexcept
Element-wise min.
Definition SIMD.h:1813
Definition DirectPathService.h:53
float OuterAngle
Definition DirectPathService.h:55
float InnerAngle
Definition DirectPathService.h:54
Orthonormal basis (column-major)
Definition MinimalBasis.h:35
Definition DirectPathService.h:68
float AttenuationValue
Definition DirectPathService.h:70
AttenuationCone Cone
Definition DirectPathService.h:69
Definition DirectPathService.h:62
float AttenuationValue
Definition DirectPathService.h:64
AttenuationCurveRef Curve
Definition DirectPathService.h:63
Definition DirectPathService.h:77
JPL::AttenuationCone AttenuationCone
Definition DirectPathService.h:79
AttenuationCurveRef BaseCurve
Definition DirectPathService.h:78
Definition DirectPathService.h:44
float DirectionDot
Definition DirectPathService.h:46
float InvDirectionDot
Definition DirectPathService.h:47
float Distance
Definition DirectPathService.h:45
JPL::Position< Vec3Type > Position
Definition DirectPathService.h:49
Definition DirectPathService.h:73
static constexpr IDType New() noexcept
Definition IDType.h:44
Location and orientation in one place.
Definition Position.h:80