implement MxDiskStreamController::VTable0x28

This commit is contained in:
Misha 2023-12-22 09:44:25 -05:00
parent 9aaeae7a6f
commit 9a84962596
No known key found for this signature in database
GPG Key ID: 8441D12AEF33FED8
2 changed files with 30 additions and 13 deletions

View File

@ -88,11 +88,29 @@ void MxDiskStreamController::FUN_100c7980()
} }
} }
// STUB: LEGO1 0x100c7ac0 // FUNCTION: LEGO1 0x100c7ac0
MxDSStreamingAction* MxDiskStreamController::VTable0x28() MxDSStreamingAction* MxDiskStreamController::VTable0x28()
{ {
// TODO MxAutoLocker lock(&this->m_criticalSection);
return NULL; MxDSStreamingAction* result = NULL;
MxU32 filesize = m_provider->GetFileSize();
if(m_unk0x3c.size() != 0)
{
MxDSStreamingAction* oldAction = (MxDSStreamingAction*) m_unk0x3c.front();
m_unk0x3c.pop_front();
MxDSStreamingAction* action = new MxDSStreamingAction(*oldAction);
result = action;
if(action)
{
oldAction->SetUnknown94(action->GetBufferOffset() + filesize);
oldAction->SetBufferOffset(action->GetBufferOffset() + filesize);
m_unk0x3c.push_back(action);
}
}
return result;
} }
// FUNCTION: LEGO1 0x100c7c00 // FUNCTION: LEGO1 0x100c7c00
@ -102,21 +120,17 @@ MxResult MxDiskStreamController::VTable0x30(MxDSAction* p_action)
MxResult result = MxStreamController::VTable0x30(p_action); MxResult result = MxStreamController::VTable0x30(p_action);
MxDSStreamingAction* item; MxDSStreamingAction* item;
while(TRUE) while (TRUE) {
{ item = (MxDSStreamingAction*) m_list0x90.Find(p_action, TRUE);
item = (MxDSStreamingAction*)m_list0x90.Find(p_action, TRUE); if (item == NULL) {
if (item == NULL)
{
break; break;
} }
FUN_100c7cb0(item); FUN_100c7cb0(item);
} }
while(TRUE) while (TRUE) {
{ item = (MxDSStreamingAction*) m_list0x64.Find(p_action, TRUE);
item = (MxDSStreamingAction*)m_list0x64.Find(p_action, TRUE); if (item == NULL) {
if (item == NULL)
{
break; break;
} }
FUN_100c7cb0(item); FUN_100c7cb0(item);

View File

@ -35,7 +35,10 @@ class MxDSStreamingAction : public MxDSAction {
inline MxDSBuffer* GetUnknowna0() { return m_unk0xa0; } inline MxDSBuffer* GetUnknowna0() { return m_unk0xa0; }
inline MxDSBuffer* GetUnknowna4() { return m_unk0xa4; } inline MxDSBuffer* GetUnknowna4() { return m_unk0xa4; }
inline MxDSAction* GetInternalAction() { return m_internalAction; } inline MxDSAction* GetInternalAction() { return m_internalAction; }
inline MxU32 GetBufferOffset() { return m_bufferOffset; }
inline void SetUnknown94(MxU32 p_unk0x94) { m_unk0x94 = p_unk0x94; }
inline void SetUnknowna0(MxDSBuffer* p_unk0xa0) { m_unk0xa0 = p_unk0xa0; } inline void SetUnknowna0(MxDSBuffer* p_unk0xa0) { m_unk0xa0 = p_unk0xa0; }
inline void SetBufferOffset(MxU32 p_bufferOffset) { m_bufferOffset = p_bufferOffset; }
private: private:
MxU32 m_unk0x94; MxU32 m_unk0x94;