#include "SingletonManager.h" #include "Misc/AronaConfig.h" #include "Singleton/CallRateLimiterManager.h" #include "Singleton/MidiSequencer.h" #include "Singleton/MixerList.h" #include "Singleton/PluginHostList.h" #include "Singleton/PortAudioAPI.h" #include "UI/Widget/WindowManager.h" #define REGISTER_MANAGER(ManagerClass) RegisterManager(&ManagerClass::Get()); void FSingletonManager::Init() { REGISTER_MANAGER(FCallRateLimiterManager) REGISTER_MANAGER(FAronaConfig) REGISTER_MANAGER(FMixerList) REGISTER_MANAGER(FPortAudioAPI) REGISTER_MANAGER(FPluginHostList) REGISTER_MANAGER(FMidiSequencer) REGISTER_MANAGER(FWindowManager) for (ISingleton* Manager : Managers) { Manager->PostInit(); } } void FSingletonManager::Release() { for (int32 i = Managers.Num() - 1; i >= 0; --i) { ISingleton* SingletonImpl = Managers[i]; SingletonImpl->BeginRelease(); } for (int32 i = Managers.Num() - 1; i >= 0; --i) { ISingleton* SingletonImpl = Managers[i]; SingletonImpl->Release(); } Managers.Reset(); } void FSingletonManager::RegisterManager(ISingleton* Manager) { Manager->Init(); Managers.Add(Manager); UE_LOG(SingletonLog, Log, TEXT("%s Registered"), *Manager->GetName().ToString()); } FSingletonManager::FSingletonManager() { }