Index: source/soundmanager/ISoundManager.h =================================================================== --- source/soundmanager/ISoundManager.h +++ source/soundmanager/ISoundManager.h @@ -24,6 +24,10 @@ #include "simulation2/system/Entity.h" class CVector3D; +class ISoundItem; +class Path; +using VfsPath = Path; +class CSoundData; class ISoundManager { @@ -34,8 +38,15 @@ static void SetEnabled(bool doEnable); static void CloseGame(); + virtual ISoundItem* ItemForEntity(entity_id_t source, CSoundData* sndData) = 0; virtual void StartWorker() = 0; + virtual void ClearPlayListItems() = 0; + virtual void SetMusicEnabled(bool isEnabled) = 0; + + virtual void StartPlayList(bool doLoop) = 0; + virtual void AddPlayListItem(const VfsPath& itemPath) = 0; + virtual void IdleTask() = 0; virtual void Pause(bool pauseIt) = 0; virtual void PauseMusic(bool pauseIt) = 0; @@ -48,6 +59,8 @@ virtual void SetActionGain(float gain) = 0; virtual void SetUIGain(float gain) = 0; + virtual long GetBufferCount() = 0; + virtual long GetBufferSize() = 0; virtual void RunHardwareDetection() = 0; virtual CStr8 GetSoundCardNames() const = 0; virtual CStr8 GetOpenALVersion() const = 0; @@ -58,6 +71,9 @@ virtual void PlayAsGroup(const VfsPath& groupPath, const CVector3D& sourcePos, entity_id_t source, bool ownedSound) = 0; virtual bool InDistress() = 0; + virtual void SetDistressThroughError() = 0; + + virtual void SetAmbientItem(ISoundItem* anItem) = 0; }; extern ISoundManager* g_SoundManager; Index: source/soundmanager/SoundManager.cpp =================================================================== --- source/soundmanager/SoundManager.cpp +++ source/soundmanager/SoundManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 Wildfire Games. +/* Copyright (C) 2022 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -207,8 +207,8 @@ } void ISoundManager::CloseGame() { - if (CSoundManager* aSndMgr = (CSoundManager*)g_SoundManager) - aSndMgr->SetAmbientItem(NULL); + if (g_SoundManager) + g_SoundManager->SetAmbientItem(NULL); } void CSoundManager::al_ReportError(ALenum err, const char* caller, int line) Index: source/soundmanager/data/OggData.cpp =================================================================== --- source/soundmanager/data/OggData.cpp +++ source/soundmanager/data/OggData.cpp @@ -58,11 +58,10 @@ bool COggData::InitOggFile(const VfsPath& itemPath) { - CSoundManager* sndManager = (CSoundManager*)g_SoundManager; - if (!sndManager) + if (!g_SoundManager) return false; - int buffersToStart = sndManager->GetBufferCount(); + int buffersToStart = g_SoundManager->GetBufferCount(); if (OpenOggNonstream(g_VFS, itemPath, ogg) != INFO::OK) return false; @@ -119,11 +118,10 @@ int COggData::FetchDataIntoBuffer(int count, ALuint* buffers) { - CSoundManager* sndManager = (CSoundManager*)g_SoundManager; - if (!sndManager) + if (!g_SoundManager) return 0; - long bufferSize = sndManager->GetBufferSize(); + long bufferSize = g_SoundManager->GetBufferSize(); u8* pcmout = new u8[bufferSize + 5000]; int buffersWritten = 0; Index: source/soundmanager/items/CBufferItem.cpp =================================================================== --- source/soundmanager/items/CBufferItem.cpp +++ source/soundmanager/items/CBufferItem.cpp @@ -60,7 +60,7 @@ delete[] al_buf; } alSourcei(m_ALSource, AL_BUFFER, 0); - ((CSoundManager*)g_SoundManager)->ReleaseALSource(m_ALSource); + static_cast(g_SoundManager)->ReleaseALSource(m_ALSource); AL_CHECK; m_ALSource = 0; Index: source/soundmanager/items/CSoundBase.cpp =================================================================== --- source/soundmanager/items/CSoundBase.cpp +++ source/soundmanager/items/CSoundBase.cpp @@ -44,7 +44,7 @@ AL_CHECK; alSourcei(m_ALSource, AL_BUFFER, 0L); AL_CHECK; - ((CSoundManager*)g_SoundManager)->ReleaseALSource(m_ALSource); + static_cast(g_SoundManager)->ReleaseALSource(m_ALSource); AL_CHECK; m_ALSource = 0; } @@ -94,7 +94,7 @@ bool CSoundBase::InitOpenAL() { alGetError(); /* clear error */ - m_ALSource = ((CSoundManager*)g_SoundManager)->GetALSource( this ); + m_ALSource = static_cast(g_SoundManager)->GetALSource( this ); AL_CHECK; @@ -286,9 +286,9 @@ if (err != AL_NO_ERROR) { if (err == AL_INVALID) - ((CSoundManager*)g_SoundManager)->SetDistressThroughError(); + g_SoundManager->SetDistressThroughError(); else - ((CSoundManager*)g_SoundManager)->al_ReportError(err, __func__, __LINE__); + static_cast(g_SoundManager)->al_ReportError(err, __func__, __LINE__); } } } Index: source/soundmanager/items/CStreamItem.cpp =================================================================== --- source/soundmanager/items/CStreamItem.cpp +++ source/soundmanager/items/CStreamItem.cpp @@ -55,7 +55,7 @@ } alSourcei(m_ALSource, AL_BUFFER, 0); AL_CHECK; - ((CSoundManager*)g_SoundManager)->ReleaseALSource(m_ALSource); + static_cast(g_SoundManager)->ReleaseALSource(m_ALSource); AL_CHECK; m_ALSource = 0; } Index: source/soundmanager/scripting/JSInterface_Sound.cpp =================================================================== --- source/soundmanager/scripting/JSInterface_Sound.cpp +++ source/soundmanager/scripting/JSInterface_Sound.cpp @@ -34,50 +34,50 @@ void StartMusic() { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetMusicEnabled(true); + if (g_SoundManager) + g_SoundManager->SetMusicEnabled(true); } void StopMusic() { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetMusicEnabled(false); + if (g_SoundManager) + g_SoundManager->SetMusicEnabled(false); } void ClearPlaylist() { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->ClearPlayListItems(); + if (g_SoundManager) + g_SoundManager->ClearPlayListItems(); } void AddPlaylistItem(const std::wstring& filename) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->AddPlayListItem(VfsPath(filename)); + if (g_SoundManager) + g_SoundManager->AddPlayListItem(VfsPath(filename)); } void StartPlaylist(bool looping) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->StartPlayList(looping ); + if (g_SoundManager) + g_SoundManager->StartPlayList(looping ); } void PlayMusic(const std::wstring& filename, bool looping) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->PlayAsMusic(filename, looping); + if (g_SoundManager) + g_SoundManager->PlayAsMusic(filename, looping); } void PlayUISound(const std::wstring& filename, bool looping) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->PlayAsUI(filename, looping); + if (g_SoundManager) + g_SoundManager->PlayAsUI(filename, looping); } void PlayAmbientSound(const std::wstring& filename, bool looping) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->PlayAsAmbient(filename, looping); + if (g_SoundManager) + g_SoundManager->PlayAsAmbient(filename, looping); } bool MusicPlaying() @@ -87,32 +87,32 @@ void SetMasterGain(float gain) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetMasterGain(gain); + if (g_SoundManager) + g_SoundManager->SetMasterGain(gain); } void SetMusicGain(float gain) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetMusicGain(gain); + if (g_SoundManager) + g_SoundManager->SetMusicGain(gain); } void SetAmbientGain(float gain) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetAmbientGain(gain); + if (g_SoundManager) + g_SoundManager->SetAmbientGain(gain); } void SetActionGain(float gain) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetActionGain(gain); + if (g_SoundManager) + g_SoundManager->SetActionGain(gain); } void SetUIGain(float gain) { - if (CSoundManager* sndManager = (CSoundManager*)g_SoundManager) - sndManager->SetUIGain(gain); + if (g_SoundManager) + g_SoundManager->SetUIGain(gain); } #else Index: source/soundmanager/scripting/SoundGroup.cpp =================================================================== --- source/soundmanager/scripting/SoundGroup.cpp +++ source/soundmanager/scripting/SoundGroup.cpp @@ -214,7 +214,7 @@ if (!sndData) return; - ISoundItem* hSound = static_cast(g_SoundManager)->ItemForEntity(source, sndData); + ISoundItem* hSound = g_SoundManager->ItemForEntity(source, sndData); if (!hSound) return;