1#pragma once
2
3#include <container/seadPtrArray.h>
4
5#include "Library/Area/IUseAreaObj.h"
6#include "Library/Audio/IAudioSystemPause.h"
7#include "Library/HostIO/HioNode.h"
8
9namespace aal {
10class AudioFrameProcessMgr;
11class IAudioFrameProcess;
12} // namespace aal
13
14namespace al {
15class SeDirector;
16class BgmDirector;
17class AudioMic;
18class AudioEventController;
19class AudioRequest;
20class AudioRequestKeeperSyncedBgm;
21struct AudioSystemInfo;
22class AreaObjDirector;
23class AudioDuckingDirector;
24class AudioEffectController;
25struct AudioDirectorInitInfo;
26class PlayerHolder;
27
28class AudioDirector : public IUseAreaObj, public HioNode, public IAudioSystemPause {
29public:
30 struct PauseSystemEntry {
31 const char* name;
32 bool _8;
33 bool _9;
34 };
35
36 AudioDirector();
37 void init(const AudioDirectorInitInfo& info);
38 void init3D(const AudioDirectorInitInfo& info);
39 void initAfterInitPlacement();
40 void initMic(AudioMic* mic);
41 void setDependentModule(AudioDirector* director);
42 void updatePre();
43 void updatePost();
44 void startFinalizeUnsafeModuleInParallelThread();
45 void updateFinalizeUnsafeModuleInParallelThread();
46 bool isFinalizedUnsafeModuleInParallelThread();
47 void finalize();
48 bool isSystemPauseNow() const;
49 void setPlayerHolder(const PlayerHolder* player_holder);
50 void addAudiioFrameProccess(aal::IAudioFrameProcess* process);
51 void removeAudiioFrameProccess(aal::IAudioFrameProcess* process);
52 void* getAudioMaximizer() const; // unknown return type
53 bool isPpausedSystem(const char* name) const;
54
55 void pauseSystem(bool, const char*, bool, f32, bool, bool, bool) override;
56 AreaObjDirector* getAreaObjDirector() const override;
57
58 void setIsSafeFinalizingInParallelThread(bool isSafe) {
59 mIsSafeFinalizingInParallelThread = isSafe;
60 }
61
62private:
63 SeDirector* mSeDirector;
64 BgmDirector* mBgmDirector;
65 AudioMic* mAudioMic;
66 AudioEventController* mAudioEventController;
67 AudioRequestKeeperSyncedBgm* mAudioRequestKeeperSyncedBgm;
68 const AudioSystemInfo* mAudioSystemInfo;
69 AreaObjDirector* mAreaObjDirector;
70 AudioDuckingDirector* mAudioDuckingDirector;
71 sead::PtrArray<PauseSystemEntry>* mPauseSystemEntries;
72 bool mIsSafeFinalizingInParallelThread;
73 aal::AudioFrameProcessMgr* mAudioFrameProcessMgr;
74 AudioEffectController* mAudioEffectController;
75};
76
77} // namespace al
78