mirror of
https://github.com/isledecomp/isle.git
synced 2025-02-16 19:50:15 -05:00
implement most of MxBackgroundAudioManager (#232)
* implement most of MxBackgroundAudioManager * Match OpenMusic to 100%, style fixes --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
50fe5f9c83
commit
681ab9c026
6 changed files with 85 additions and 10 deletions
|
@ -11,6 +11,9 @@
|
|||
// 0x100f4588
|
||||
MxAtomId *g_nocdSourceName = NULL;
|
||||
|
||||
// 0x100f456c
|
||||
MxAtomId *g_jukeboxScript = NULL;
|
||||
|
||||
// 0x101020e8
|
||||
void (*g_omniUserMessage)(const char *,int);
|
||||
|
||||
|
@ -26,10 +29,11 @@ LegoOmni::~LegoOmni()
|
|||
Destroy();
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1005b560 STUB
|
||||
// OFFSET: LEGO1 0x1005b560
|
||||
void LegoOmni::CreateBackgroundAudio()
|
||||
{
|
||||
// TODO
|
||||
if (m_bkgAudioManager)
|
||||
m_bkgAudioManager->Create(*g_jukeboxScript, 100);
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1005af10 STUB
|
||||
|
@ -308,9 +312,10 @@ MxResult LegoOmni::Start(MxDSAction* action)
|
|||
return result;
|
||||
}
|
||||
|
||||
void LegoOmni::DeleteObject(MxDSAction &ds)
|
||||
MxResult LegoOmni::DeleteObject(MxDSAction &ds)
|
||||
{
|
||||
// FIXME: Stub
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
MxBool LegoOmni::DoesEntityExist(MxDSAction &ds)
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18
|
||||
virtual void Destroy() override; // vtable+1c
|
||||
virtual MxResult Start(MxDSAction* action) override;
|
||||
virtual void DeleteObject(MxDSAction &ds) override;
|
||||
virtual MxResult DeleteObject(MxDSAction &ds) override;
|
||||
virtual MxBool DoesEntityExist(MxDSAction &ds) override;
|
||||
virtual void vtable0x2c() override;
|
||||
virtual int vtable0x30(char*, int, MxCore*) override;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#include "mxbackgroundaudiomanager.h"
|
||||
|
||||
#include "mxomni.h"
|
||||
#include "mxstreamer.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150)
|
||||
|
||||
|
@ -20,14 +22,29 @@ MxBackgroundAudioManager::MxBackgroundAudioManager()
|
|||
// OFFSET: LEGO1 0x1007ec20
|
||||
MxBackgroundAudioManager::~MxBackgroundAudioManager()
|
||||
{
|
||||
// TODO
|
||||
TickleManager()->UnregisterClient(this);
|
||||
NotificationManager()->Unregister(this);
|
||||
DestroyMusic();
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1007f470
|
||||
void MxBackgroundAudioManager::Stop()
|
||||
{
|
||||
// TODO
|
||||
if (m_action2.GetObjectId() != -1)
|
||||
DeleteObject(m_action2);
|
||||
|
||||
m_unk138 = 0;
|
||||
m_action2.SetAtomId(MxAtomId());
|
||||
m_action2.SetObjectId(-1);
|
||||
|
||||
if (m_action1.GetObjectId() != -1)
|
||||
DeleteObject(m_action1);
|
||||
|
||||
m_unka0 = 0;
|
||||
m_action1.SetAtomId(MxAtomId());
|
||||
m_unk148 = 0;
|
||||
m_action1.SetObjectId(-1);
|
||||
m_unk13c = 0;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1007f5f0
|
||||
|
@ -47,3 +64,45 @@ void MxBackgroundAudioManager::Init()
|
|||
this->m_unka0 = 0;
|
||||
this->m_unk13c = 0;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1007ece0
|
||||
MxResult MxBackgroundAudioManager::Create(MxAtomId &p_script, MxU32 p_frequencyMS)
|
||||
{
|
||||
MxResult result = OpenMusic(p_script);
|
||||
|
||||
if (result == SUCCESS) {
|
||||
TickleManager()->RegisterClient(this, p_frequencyMS);
|
||||
m_musicEnabled = TRUE;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1007ed20
|
||||
MxResult MxBackgroundAudioManager::OpenMusic(MxAtomId &p_script)
|
||||
{
|
||||
if (m_script.GetInternal())
|
||||
DestroyMusic();
|
||||
|
||||
MxResult result = FAILURE;
|
||||
|
||||
if (Streamer()->Open(p_script.GetInternal(), 0)) {
|
||||
m_script = p_script;
|
||||
result = SUCCESS;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x1007ed70
|
||||
void MxBackgroundAudioManager::DestroyMusic()
|
||||
{
|
||||
if (m_script.GetInternal()) {
|
||||
MxDSAction ds;
|
||||
ds.SetAtomId(m_script);
|
||||
ds.SetUnknown24(-2);
|
||||
DeleteObject(ds);
|
||||
Streamer()->Close(m_script.GetInternal());
|
||||
m_musicEnabled = FALSE;
|
||||
}
|
||||
}
|
|
@ -28,10 +28,13 @@ public:
|
|||
}
|
||||
|
||||
__declspec(dllexport) void Enable(unsigned char p);
|
||||
virtual MxResult Create(MxAtomId &p_script, MxU32 p_frequencyMS);
|
||||
|
||||
void Stop();
|
||||
private:
|
||||
void Init();
|
||||
MxResult OpenMusic(MxAtomId &p_script);
|
||||
void DestroyMusic();
|
||||
|
||||
MxBool m_musicEnabled; // 0x8
|
||||
MxDSAction m_action1; // 0xc
|
||||
|
@ -42,7 +45,7 @@ private:
|
|||
MxS32 m_unk140;
|
||||
MxS32 m_unk144;
|
||||
MxS16 m_unk148;
|
||||
MxAtomId m_unk14c;
|
||||
MxAtomId m_script;
|
||||
};
|
||||
|
||||
#endif // MXBACKGROUNDAUDIOMANAGER_H
|
||||
|
|
|
@ -68,9 +68,10 @@ MxResult MxOmni::Start(MxDSAction* p_dsAction)
|
|||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b00c0 STUB
|
||||
void MxOmni::DeleteObject(MxDSAction &p_dsAction)
|
||||
MxResult MxOmni::DeleteObject(MxDSAction &p_dsAction)
|
||||
{
|
||||
// TODO
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100b09a0
|
||||
|
@ -231,7 +232,7 @@ MxResult MxOmni::Create(MxOmniCreateParam &p)
|
|||
}
|
||||
|
||||
if (p.CreateFlags().CreateStreamer()) {
|
||||
if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS)
|
||||
if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS)
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -402,3 +403,9 @@ MxEventManager* EventManager()
|
|||
{
|
||||
return MxOmni::GetInstance()->GetEventManager();
|
||||
}
|
||||
|
||||
// OFFSET: LEGO1 0x100acf70
|
||||
MxResult DeleteObject(MxDSAction &p_dsAction)
|
||||
{
|
||||
return MxOmni::GetInstance()->DeleteObject(p_dsAction);
|
||||
}
|
|
@ -42,7 +42,7 @@ public:
|
|||
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18
|
||||
virtual void Destroy(); // vtable+1c
|
||||
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20
|
||||
virtual void DeleteObject(MxDSAction &p_dsAction); // vtable+24
|
||||
virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24
|
||||
virtual MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28
|
||||
virtual void vtable0x2c(); // vtable+2c
|
||||
virtual int vtable0x30(char*, int, MxCore*); // vtable+30
|
||||
|
@ -95,6 +95,7 @@ __declspec(dllexport) MxMusicManager * MusicManager();
|
|||
__declspec(dllexport) MxEventManager * EventManager();
|
||||
__declspec(dllexport) MxNotificationManager * NotificationManager();
|
||||
|
||||
MxResult DeleteObject(MxDSAction &p_dsAction);
|
||||
MxVideoManager *MVideoManager();
|
||||
MxAtomIdCounterSet *AtomIdCounterSet();
|
||||
MxObjectFactory *ObjectFactory();
|
||||
|
|
Loading…
Reference in a new issue