diff --git a/CMakeLists.txt b/CMakeLists.txt index 3645e122..d0392e94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,6 +117,7 @@ add_library(lego1 SHARED LEGO1/mxdsparallelaction.cpp LEGO1/mxdsselectaction.cpp LEGO1/mxdsserialaction.cpp + LEGO1/mxdsstreamingaction.cpp LEGO1/mxdssound.cpp LEGO1/mxdssource.cpp LEGO1/mxdsstill.cpp diff --git a/LEGO1/mxdsstreamingaction.cpp b/LEGO1/mxdsstreamingaction.cpp new file mode 100644 index 00000000..e04bb56b --- /dev/null +++ b/LEGO1/mxdsstreamingaction.cpp @@ -0,0 +1,70 @@ +#include "mxdsstreamingaction.h" + +DECOMP_SIZE_ASSERT(MxDSStreamingAction, 0xb4) + +// OFFSET: LEGO1 0x100cd010 +MxDSStreamingAction::MxDSStreamingAction(MxDSAction &p_dsAction, MxU32 p_offset) +{ + Init(); + + MxDSAction::operator=(p_dsAction); + this->m_unk94 = p_offset; + this->m_bufferOffset = p_offset; +} + +// OFFSET: LEGO1 0x100cd0d0 +MxDSStreamingAction::MxDSStreamingAction(MxDSStreamingAction &p_dsStreamingAction) +{ + Init(); + CopyFrom(p_dsStreamingAction); +} + +// OFFSET: LEGO1 0x100cd150 +MxDSStreamingAction::~MxDSStreamingAction() +{ + // TODO: Implement MxDSBuffer + if (this->m_unka0) + delete this->m_unka0; + if (this->m_unka4) + delete this->m_unka4; + if (this->m_internalAction) + delete this->m_internalAction; +} + +// OFFSET: LEGO1 0x100cd220 +MxDSStreamingAction *MxDSStreamingAction::CopyFrom(MxDSStreamingAction &p_dsStreamingAction) +{ + MxDSAction::operator=(p_dsStreamingAction); + this->m_unk94 = p_dsStreamingAction.m_unk94; + this->m_bufferOffset = p_dsStreamingAction.m_bufferOffset; + this->m_unk9c = p_dsStreamingAction.m_unk9c; + this->m_unka0 = NULL; + this->m_unka4 = NULL; + this->m_unkac = p_dsStreamingAction.m_unkac; + this->m_unka8 = p_dsStreamingAction.m_unka8; + SetInternalAction(p_dsStreamingAction.m_internalAction ? p_dsStreamingAction.m_internalAction->Clone() : NULL); + + return this; +} + +// OFFSET: LEGO1 0x100cd1e0 +MxResult MxDSStreamingAction::Init() +{ + this->m_unk94 = 0; + this->m_bufferOffset = 0; + this->m_unk9c = 0; + this->m_unka0 = NULL; + this->m_unka4 = NULL; + this->m_unka8 = 0; + this->m_unkac = 2; + this->m_internalAction = NULL; + return SUCCESS; +} + +// OFFSET: LEGO1 0x100cd2a0 +void MxDSStreamingAction::SetInternalAction(MxDSAction *p_dsAction) +{ + if (this->m_internalAction) + delete this->m_internalAction; + this->m_internalAction = p_dsAction; +} \ No newline at end of file diff --git a/LEGO1/mxdsstreamingaction.h b/LEGO1/mxdsstreamingaction.h new file mode 100644 index 00000000..89a03c5b --- /dev/null +++ b/LEGO1/mxdsstreamingaction.h @@ -0,0 +1,33 @@ +#ifndef MXDSSTREAMINGACTION_H +#define MXDSSTREAMINGACTION_H + +#include "mxdsaction.h" + +class MxDSBuffer; + +// VTABLE 0x100dd088 +// SIZE 0xb4 +class MxDSStreamingAction : public MxDSAction +{ +public: + MxDSStreamingAction(MxDSAction &p_dsAction, MxU32 p_offset); + MxDSStreamingAction(MxDSStreamingAction &p_dsStreamingAction); + virtual ~MxDSStreamingAction(); + + MxDSStreamingAction *CopyFrom(MxDSStreamingAction &p_dsStreamingAction); + + MxResult Init(); + void SetInternalAction(MxDSAction *p_dsAction); + +private: + MxU32 m_unk94; + MxU32 m_bufferOffset; + MxS32 m_unk9c; + MxDSBuffer *m_unka0; + MxDSBuffer *m_unka4; + undefined4 m_unka8; + undefined2 m_unkac; + MxDSAction *m_internalAction; +}; + +#endif // MXDSSTREAMINGACTION_H