Plasma Engine  2.0
Loading...
Searching...
No Matches
AudioTriggerComponent.h
1#pragma once
2
3#include <AudioSystemPlugin/AudioSystemPluginDLL.h>
4
5#include <AudioSystemPlugin/Components/AudioSystemComponent.h>
6#include <AudioSystemPlugin/Core/AudioSystemData.h>
7
9
10constexpr plUInt32 k_MaxOcclusionRaysCount = 32;
11
12class PL_AUDIOSYSTEMPLUGIN_DLL plAudioTriggerComponentManager : public plComponentManager<class plAudioTriggerComponent, plBlockStorageType::FreeList>
13{
14public:
16
17 void Initialize() override;
18 void Deinitialize() override;
19
20private:
21 friend class plAudioTriggerComponent;
22
23
24 struct ObstructionOcclusionValue
25 {
27 float m_fTarget;
28
30 float m_fValue;
31
33 [[nodiscard]] float GetValue() const;
34
39 void SetTarget(float fTarget, bool bReset = false);
40
45 void Update(float fSmoothFactor = -1.0f);
46
49 void Reset(float fInitialValue = 0.0f);
50 };
51
52 struct ObstructionOcclusionState
53 {
55 plAudioTriggerComponent* m_pComponent{nullptr};
56
57 plUInt8 m_uiNextRayIndex{0};
58
59 ObstructionOcclusionValue m_ObstructionValue;
60 ObstructionOcclusionValue m_OcclusionValue;
61
63 };
64
65 plUInt32 AddObstructionOcclusionState(plAudioTriggerComponent* pComponent);
66 void RemoveObstructionOcclusionState(plUInt32 uiIndex);
67 [[nodiscard]] const ObstructionOcclusionState& GetObstructionOcclusionState(plUInt32 uiIndex) const { return m_ObstructionOcclusionStates[uiIndex]; }
68
69 void ShootOcclusionRays(ObstructionOcclusionState& state, plVec3 listenerPos, plUInt32 uiNumRays, const plPhysicsWorldModuleInterface* pPhysicsWorldModule);
70 void CastRay(ObstructionOcclusionState& state, plVec3 sourcePos, plVec3 direction, plUInt8 collisionLayer, const plPhysicsWorldModuleInterface* pPhysicsWorldModule, plUInt32 rayIndex);
71 void ProcessOcclusion(const plWorldModule::UpdateContext& context);
72 void Update(const plWorldModule::UpdateContext& context);
73
74 plDynamicArray<ObstructionOcclusionState> m_ObstructionOcclusionStates;
75};
76
86{
88
89 // plComponent
90
91public:
92 void Initialize() override;
93 void OnActivated() override;
94 void OnSimulationStarted() override;
95 void OnDeactivated() override;
96 void Deinitialize() override;
97 void SerializeComponent(plWorldWriter& stream) const override;
98 void DeserializeComponent(plWorldReader& stream) override;
99
100 // plAudioSystemComponent
101
102private:
103 void plAudioSystemComponentIsAbstract() override {}
104
105 // plAudioTriggerComponent
106
107public:
109 ~plAudioTriggerComponent() override;
110
113 void SetOcclusionCollisionLayer(plUInt8 uiCollisionLayer);
114
116 [[nodiscard]] plUInt8 GetOcclusionCollisionLayer() const { return m_uiOcclusionCollisionLayer; }
117
125 void SetPlayTrigger(plString sName);
126
128 [[nodiscard]] const plString& GetPlayTrigger() const;
129
134 void SetStopTrigger(plString sName);
135
137 [[nodiscard]] const plString& GetStopTrigger() const;
138
141 [[nodiscard]] const plEnum<plAudioSystemTriggerState>& GetState() const;
142
145 [[nodiscard]] bool IsLoading() const;
146
149 [[nodiscard]] bool IsReady() const;
150
153 [[nodiscard]] bool IsStarting() const;
154
157 [[nodiscard]] bool IsPlaying() const;
158
162 [[nodiscard]] bool IsStopping() const;
163
166 [[nodiscard]] bool IsStopped() const;
167
170 [[nodiscard]] bool IsUnloading() const;
171
176 void Play(bool bSync = false);
177
181 void Stop(bool bSync = false);
182
183private:
184 void LoadPlayTrigger(bool bSync);
185 void LoadStopTrigger(bool bSync, bool bDeinit);
186 void UnloadPlayTrigger(bool bSync, bool bDeinit = false);
187 void UnloadStopTrigger(bool bSync, bool bDeinit = false);
188
189 void UpdateOcclusion();
190 void Update();
191
192 void StopInternal(bool bSync = false, bool bDeinit = false);
193
195
196 plAudioSystemDataID m_uiPlayEventId = 0;
197 plAudioSystemDataID m_uiStopEventId = 0;
198
199 plString m_sPlayTrigger;
200 plString m_sStopTrigger;
201
203 plUInt8 m_uiOcclusionCollisionLayer;
204 plUInt32 m_uiObstructionOcclusionStateIndex;
205
206 bool m_bLoadOnInit;
207 bool m_bPlayOnActivate;
208
209 bool m_bPlayTriggerLoaded{false};
210 bool m_bStopTriggerLoaded{false};
211
212 bool m_bHasPlayedOnActivate{false};
213
214 bool m_bCanPlay{false};
215};
Base class for audio system components that depends on an audio proxy component.
Definition AudioSystemComponent.h:46
Audio System Component that triggers an audio event.
Definition AudioTriggerComponent.h:86
plUInt8 GetOcclusionCollisionLayer() const
Gets the current occlusion collision layer.
Definition AudioTriggerComponent.h:116
Definition AudioTriggerComponent.h:13
Definition ComponentManager.h:88
Definition DynamicArray.h:81
Definition PhysicsWorldModule.h:109
Wraps a C-style array, which has a fixed size at compile-time, with a more convenient interface.
Definition StaticArray.h:13
A world encapsulates a scene graph of game objects and various component managers and their component...
Definition World.h:22
virtual void OnSimulationStarted()
This method is called at the start of the next world update when the world is simulated....
Definition WorldModule.h:105
virtual void Initialize()
This method is called after the constructor. A derived type can override this method to do initializa...
Definition WorldModule.h:98
virtual void Deinitialize()
This method is called before the destructor. A derived type can override this method to do deinitiali...
Definition WorldModule.h:101
Reads a world description from a stream. Allows to instantiate that world multiple times in different...
Definition WorldReader.h:47
Stores an entire plWorld in a stream.
Definition WorldWriter.h:13
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Definition WorldModule.h:33