RavEngine
Loading...
Searching...
No Matches
AudioSnapshot.hpp
1#pragma once
2#if !RVE_SERVER
3#include "DataStructures.hpp"
4#include "AudioSource.hpp"
5#include "AudioSpace.hpp"
6
7namespace RavEngine{
8struct AudioGraphAsset;
9struct AudioMeshAsset;
10
13 vector3 worldpos;
14 quaternion worldrot;
15 };
16
19 entity_t ownerID = {INVALID_ENTITY};
20 PointSource(const decltype(data)& data, const decltype(worldpos)& wp, const decltype(worldrot)& wr, decltype(ownerID) ownerID): data(data), ownerID(ownerID), PointSourceBase{wp, wr} {}
21 bool operator==(const PointSource& other) const{
22 return data == other.data && worldpos == other.worldpos && worldrot == other.worldrot;
23 }
24 };
25
26 template<typename room_t>
28 Ref<room_t> room;
29 const vector3 worldpos;
30 TAudioSpace(const decltype(room)& room,const decltype(worldpos)& wp): room(room), worldpos(wp){}
31
32 bool IsInsideSourceArea(const vector3& pos) const{
33 return glm::distance2(pos, worldpos) < (room->sourceRadius * room->sourceRadius);
34 }
35 };
36
38
39 struct GeometryAudioSpaceData : public TAudioSpace<GeometryAudioSpace::RoomData> {
40 matrix4 invRoomTransform{ 1 };
41 GeometryAudioSpaceData(const decltype(room)& room, const decltype(worldpos)& wp, decltype(invRoomTransform) ivt) : invRoomTransform(ivt), TAudioSpace(room, wp) {}
42
43 bool IsInsideMeshArea(const vector3& pos) const{
44 return glm::distance2(pos, worldpos) < (room->meshRadius * room->meshRadius);
45 }
46 };
47
50 const matrix4 invRoomTransform{ 1 };
51 const vector3 roomHalfExts{ 0 };
53 BoxReverbationSpaceData(const decltype(room)& room, const decltype(invRoomTransform)& ivt, const decltype(roomHalfExts)& rhe, const decltype(roomProperties) rp) : room(room), invRoomTransform(ivt), roomProperties(rp), roomHalfExts(rhe){}
54 };
55
57 matrix4 worldTransform;
59 entity_t ownerID;
60 AudioMeshData(const decltype(worldTransform)& wt, const decltype(asset)& a, const decltype(ownerID) ownerID) : worldTransform(wt), asset(a), ownerID(ownerID) {}
61 };
62
66
67 Vector<SimpleAudioSpaceData> simpleAudioSpaces;
68 Vector<GeometryAudioSpaceData> geometryAudioSpaces;
70
71 Vector<AudioMeshData> audioMeshes;
72
73 vector3 listenerPos;
74 quaternion listenerRot;
75 Ref<AudioGraphAsset> listenerGraph;
76 WeakRef<World> sourceWorld;
77
78 void Clear(){
79 sources.clear();
80 ambientSources.clear();
81 simpleAudioSpaces.clear();
82 geometryAudioSpaces.clear();
83 boxAudioSpaces.clear();
84 sourceWorld.reset();
85 audioMeshes.clear();
86 dataProviders.clear();
87 }
88};
89}
90
91namespace std{
92 template<>
93 struct hash<RavEngine::AudioSnapshot::PointSource>{
94 inline size_t operator()(const RavEngine::AudioSnapshot::PointSource& obj){
95 return reinterpret_cast<size_t>(obj.data.get());
96 }
97 };
98}
99#endif
Definition concurrentqueue.h:747
GLM_FUNC_DECL T distance2(vec< L, T, Q > const &p0, vec< L, T, Q > const &p1)
Definition norm.inl:40
Definition Animation.hpp:6
Definition Types.hpp:10
Definition AudioSnapshot.hpp:56
Definition AudioSnapshot.hpp:12
Definition AudioSnapshot.hpp:17
Definition AudioSnapshot.hpp:27
Definition AudioSnapshot.hpp:11
Definition qualifier.hpp:36
Definition type_quat.hpp:20
Definition qualifier.hpp:35