mirror of
https://github.com/isledecomp/isle-portable.git
synced 2025-05-09 04:32:22 -04: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
|
// 0x100f4588
|
||||||
MxAtomId *g_nocdSourceName = NULL;
|
MxAtomId *g_nocdSourceName = NULL;
|
||||||
|
|
||||||
|
// 0x100f456c
|
||||||
|
MxAtomId *g_jukeboxScript = NULL;
|
||||||
|
|
||||||
// 0x101020e8
|
// 0x101020e8
|
||||||
void (*g_omniUserMessage)(const char *,int);
|
void (*g_omniUserMessage)(const char *,int);
|
||||||
|
|
||||||
|
@ -26,10 +29,11 @@ LegoOmni::~LegoOmni()
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1005b560 STUB
|
// OFFSET: LEGO1 0x1005b560
|
||||||
void LegoOmni::CreateBackgroundAudio()
|
void LegoOmni::CreateBackgroundAudio()
|
||||||
{
|
{
|
||||||
// TODO
|
if (m_bkgAudioManager)
|
||||||
|
m_bkgAudioManager->Create(*g_jukeboxScript, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1005af10 STUB
|
// OFFSET: LEGO1 0x1005af10 STUB
|
||||||
|
@ -308,9 +312,10 @@ MxResult LegoOmni::Start(MxDSAction* action)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LegoOmni::DeleteObject(MxDSAction &ds)
|
MxResult LegoOmni::DeleteObject(MxDSAction &ds)
|
||||||
{
|
{
|
||||||
// FIXME: Stub
|
// FIXME: Stub
|
||||||
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
MxBool LegoOmni::DoesEntityExist(MxDSAction &ds)
|
MxBool LegoOmni::DoesEntityExist(MxDSAction &ds)
|
||||||
|
|
|
@ -57,7 +57,7 @@ public:
|
||||||
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18
|
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18
|
||||||
virtual void Destroy() override; // vtable+1c
|
virtual void Destroy() override; // vtable+1c
|
||||||
virtual MxResult Start(MxDSAction* action) override;
|
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 MxBool DoesEntityExist(MxDSAction &ds) override;
|
||||||
virtual void vtable0x2c() override;
|
virtual void vtable0x2c() override;
|
||||||
virtual int vtable0x30(char*, int, MxCore*) override;
|
virtual int vtable0x30(char*, int, MxCore*) override;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#include "mxbackgroundaudiomanager.h"
|
#include "mxbackgroundaudiomanager.h"
|
||||||
|
|
||||||
#include "mxomni.h"
|
#include "mxomni.h"
|
||||||
|
#include "mxstreamer.h"
|
||||||
|
#include "mxticklemanager.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150)
|
DECOMP_SIZE_ASSERT(MxBackgroundAudioManager, 0x150)
|
||||||
|
|
||||||
|
@ -20,14 +22,29 @@ MxBackgroundAudioManager::MxBackgroundAudioManager()
|
||||||
// OFFSET: LEGO1 0x1007ec20
|
// OFFSET: LEGO1 0x1007ec20
|
||||||
MxBackgroundAudioManager::~MxBackgroundAudioManager()
|
MxBackgroundAudioManager::~MxBackgroundAudioManager()
|
||||||
{
|
{
|
||||||
// TODO
|
TickleManager()->UnregisterClient(this);
|
||||||
NotificationManager()->Unregister(this);
|
NotificationManager()->Unregister(this);
|
||||||
|
DestroyMusic();
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x1007f470
|
// OFFSET: LEGO1 0x1007f470
|
||||||
void MxBackgroundAudioManager::Stop()
|
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
|
// OFFSET: LEGO1 0x1007f5f0
|
||||||
|
@ -47,3 +64,45 @@ void MxBackgroundAudioManager::Init()
|
||||||
this->m_unka0 = 0;
|
this->m_unka0 = 0;
|
||||||
this->m_unk13c = 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);
|
__declspec(dllexport) void Enable(unsigned char p);
|
||||||
|
virtual MxResult Create(MxAtomId &p_script, MxU32 p_frequencyMS);
|
||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
MxResult OpenMusic(MxAtomId &p_script);
|
||||||
|
void DestroyMusic();
|
||||||
|
|
||||||
MxBool m_musicEnabled; // 0x8
|
MxBool m_musicEnabled; // 0x8
|
||||||
MxDSAction m_action1; // 0xc
|
MxDSAction m_action1; // 0xc
|
||||||
|
@ -42,7 +45,7 @@ private:
|
||||||
MxS32 m_unk140;
|
MxS32 m_unk140;
|
||||||
MxS32 m_unk144;
|
MxS32 m_unk144;
|
||||||
MxS16 m_unk148;
|
MxS16 m_unk148;
|
||||||
MxAtomId m_unk14c;
|
MxAtomId m_script;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXBACKGROUNDAUDIOMANAGER_H
|
#endif // MXBACKGROUNDAUDIOMANAGER_H
|
||||||
|
|
|
@ -68,9 +68,10 @@ MxResult MxOmni::Start(MxDSAction* p_dsAction)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100b00c0 STUB
|
// OFFSET: LEGO1 0x100b00c0 STUB
|
||||||
void MxOmni::DeleteObject(MxDSAction &p_dsAction)
|
MxResult MxOmni::DeleteObject(MxDSAction &p_dsAction)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100b09a0
|
// OFFSET: LEGO1 0x100b09a0
|
||||||
|
@ -231,7 +232,7 @@ MxResult MxOmni::Create(MxOmniCreateParam &p)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.CreateFlags().CreateStreamer()) {
|
if (p.CreateFlags().CreateStreamer()) {
|
||||||
if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS)
|
if (!(m_streamer = new MxStreamer()) || m_streamer->Create() != SUCCESS)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,3 +403,9 @@ MxEventManager* EventManager()
|
||||||
{
|
{
|
||||||
return MxOmni::GetInstance()->GetEventManager();
|
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 MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18
|
||||||
virtual void Destroy(); // vtable+1c
|
virtual void Destroy(); // vtable+1c
|
||||||
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20
|
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 MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28
|
||||||
virtual void vtable0x2c(); // vtable+2c
|
virtual void vtable0x2c(); // vtable+2c
|
||||||
virtual int vtable0x30(char*, int, MxCore*); // vtable+30
|
virtual int vtable0x30(char*, int, MxCore*); // vtable+30
|
||||||
|
@ -95,6 +95,7 @@ __declspec(dllexport) MxMusicManager * MusicManager();
|
||||||
__declspec(dllexport) MxEventManager * EventManager();
|
__declspec(dllexport) MxEventManager * EventManager();
|
||||||
__declspec(dllexport) MxNotificationManager * NotificationManager();
|
__declspec(dllexport) MxNotificationManager * NotificationManager();
|
||||||
|
|
||||||
|
MxResult DeleteObject(MxDSAction &p_dsAction);
|
||||||
MxVideoManager *MVideoManager();
|
MxVideoManager *MVideoManager();
|
||||||
MxAtomIdCounterSet *AtomIdCounterSet();
|
MxAtomIdCounterSet *AtomIdCounterSet();
|
||||||
MxObjectFactory *ObjectFactory();
|
MxObjectFactory *ObjectFactory();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue