1#ifndef _VAE_SPATIAL_MANAGER
2#define _VAE_SPATIAL_MANAGER
15 #define TSL_NO_EXCEPTIONS
20 #define ROBIN_HOOD_DISABLE_INTRINSICS
24#include "../../external/headeronly/robin_hood.h"
26namespace vae {
namespace core {
31 template <
typename key,
class T>
using Map =
32 robin_hood::unordered_map<key, T>;
48 VAE_INFO(
"Trying to add duplicate emitter %u", e)
116 VAE_DEBUG(
"Accessed invalid emitter %i", emitter)
129 template <
class Func>
152 i.position = { 0.f, 0.f, 0.f };
153 i.front = { 0.f, 0.f, -1.f };
154 i.up = { 0.f, 1.f, 0.f };
158 VAE_ERROR(
"Exeeded maxim amount of listeners define in StaticConfig::MaxListeners")
168 VAE_WARN(
"Accessed invalid listener %i", listener)
177 l.up = { locOr.
up.
x, locOr.
up.
y, locOr.
up.
z };
184 VAE_WARN(
"Accessed invalid listener %i", listener)
191 template <
class Callback>
199 auto& e = emitter.second;
202 if (e.autoplaying) { continue; }
204 const auto distance = glm::distance(l.
position, e.position);
205 if (distance < e.maxDist) {
206 mEmitters[emitter.first].autoplaying = true;
207 callback(e.event, e.bank, emitter.first);
Listeners & getListeners()
ListenerHandle createListener()
EmitterHandle createEmitter()
Result addEmitter(EmitterHandle e)
Result setListener(ListenerHandle listener, const LocationOrientation &locOr)
EmitterHandle createAutoEmitter(BankHandle bank, EventHandle event, float maxDist, const LocationDirection &locDir, Sample spread)
bool hasEmitter(EmitterHandle e)
robin_hood::unordered_map< key, T > Map
Result removeListener(ListenerHandle listener)
Result setEmitter(EmitterHandle emitter, const LocationDirection &locDir, Sample spread)
Result removeEmitter(EmitterHandle e)
Result forListeners(ListenerHandle handle, const Func &&func)
Map< EmitterHandle, Emitter > mEmitters
void update(VoiceManger &manager, Callback callback)
Emitter & getEmitter(EmitterHandle e)
Result init(Size emitterCount)
There is only one voice pool and VAE and it's managed here.
constexpr Size MaxListeners
How many listeners can observe 3D voices.
const char *const emitters
constexpr int _VAE_SIZE_SPATIAL_MANAGER
Listener[StaticConfig::MaxListeners] Listeners
Contains Typedefinitions and basic structures use by the public API and internally.
constexpr ListenerHandle AllListeners
Will address all listeners.
constexpr EmitterHandle InvalidEmitterHandle
unsigned int Size
How the elements are addressed in the heapbuffer.
float Sample
Default sample types used where ever possible, changing this means the engine needs to be recompiled,...
SmallHandle ListenerHandle
constexpr EventHandle InvalidEventHandle
LargeHandle EmitterHandle
constexpr ListenerHandle InvalidListenerHandle
GenericHandle EventHandle
The handle used to address events within a bank.
Result
Return Types for most engine functions.
@ ValidHandleRequired
Handle provided wasn't valid but needs to be.
@ ElementNotFound
Referenced data not found.
@ DuplicateEmitter
Trying to register emitter twice.
constexpr BankHandle InvalidBankHandle
Emitters have a position and direction vector.
Listener uses additional up vector.
Allows placement of a Sound in 3D.
BankHandle bank
Needed to identify event.
EventHandle event
Will be triggerd.
#define VAE_ERROR(msg,...)
#define VAE_WARN(msg,...)
#define VAE_INFO(msg,...)
#define VAE_DEBUG(msg,...)
#define VAE_PROFILER_SCOPE_NAMED(name)
Profiles a scope and names it.
#define VAE_PROFILER_SCOPE()
Profiles a scope.
#define VAE_PROFILER_PLOT(name, value)
Records a value.
Internal types used across VAE.
#define VAE_ASSERT(condition)
Holds all voices and starts/stops them.