mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-24 00:44:21 +00:00
Beta matching MxDSObject/MxDSAction (#878)
* Beta matching MxDSObject/MxDSAction * MxDSAction copy constructor * A bit more refactor --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
@@ -19,18 +19,20 @@
|
||||
DECOMP_SIZE_ASSERT(MxDSObject, 0x2c);
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf6a0
|
||||
// FUNCTION: BETA10 0x101478c0
|
||||
MxDSObject::MxDSObject()
|
||||
{
|
||||
this->SetType(e_object);
|
||||
this->m_sourceName = NULL;
|
||||
this->m_unk0x14 = 0;
|
||||
this->m_objectName = NULL;
|
||||
this->m_unk0x24 = -1;
|
||||
this->m_objectId = -1;
|
||||
this->m_unk0x28 = 0;
|
||||
m_type = e_object;
|
||||
m_sourceName = NULL;
|
||||
m_unk0x14 = 0;
|
||||
m_objectName = NULL;
|
||||
m_objectId = -1;
|
||||
m_unk0x24 = -1;
|
||||
m_unk0x28 = NULL;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf7e0
|
||||
// FUNCTION: BETA10 0x1014798e
|
||||
MxDSObject::~MxDSObject()
|
||||
{
|
||||
delete[] m_objectName;
|
||||
@@ -38,120 +40,147 @@ MxDSObject::~MxDSObject()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf870
|
||||
// FUNCTION: BETA10 0x10147a45
|
||||
void MxDSObject::CopyFrom(MxDSObject& p_dsObject)
|
||||
{
|
||||
this->SetSourceName(p_dsObject.m_sourceName);
|
||||
this->m_unk0x14 = p_dsObject.m_unk0x14;
|
||||
this->SetObjectName(p_dsObject.m_objectName);
|
||||
this->m_objectId = p_dsObject.m_objectId;
|
||||
this->m_unk0x24 = p_dsObject.m_unk0x24;
|
||||
this->m_atomId = p_dsObject.m_atomId;
|
||||
this->m_unk0x28 = p_dsObject.m_unk0x28;
|
||||
SetSourceName(p_dsObject.m_sourceName);
|
||||
m_unk0x14 = p_dsObject.m_unk0x14;
|
||||
SetObjectName(p_dsObject.m_objectName);
|
||||
m_objectId = p_dsObject.m_objectId;
|
||||
m_unk0x24 = p_dsObject.m_unk0x24;
|
||||
m_atomId = p_dsObject.m_atomId;
|
||||
m_unk0x28 = p_dsObject.m_unk0x28;
|
||||
}
|
||||
|
||||
// FUNCTION: BETA10 0x10147abf
|
||||
MxDSObject::MxDSObject(MxDSObject& p_dsObject)
|
||||
{
|
||||
CopyFrom(p_dsObject);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf8c0
|
||||
// FUNCTION: BETA10 0x10147b57
|
||||
MxDSObject& MxDSObject::operator=(MxDSObject& p_dsObject)
|
||||
{
|
||||
if (this == &p_dsObject) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
this->CopyFrom(p_dsObject);
|
||||
CopyFrom(p_dsObject);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf8e0
|
||||
// FUNCTION: BETA10 0x10147b92
|
||||
void MxDSObject::SetObjectName(const char* p_objectName)
|
||||
{
|
||||
if (p_objectName != this->m_objectName) {
|
||||
delete[] this->m_objectName;
|
||||
if (p_objectName == m_objectName) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (p_objectName) {
|
||||
this->m_objectName = new char[strlen(p_objectName) + 1];
|
||||
delete[] m_objectName;
|
||||
|
||||
if (this->m_objectName) {
|
||||
strcpy(this->m_objectName, p_objectName);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this->m_objectName = NULL;
|
||||
if (p_objectName) {
|
||||
m_objectName = new char[strlen(p_objectName) + 1];
|
||||
|
||||
if (m_objectName) {
|
||||
strcpy(m_objectName, p_objectName);
|
||||
}
|
||||
}
|
||||
else {
|
||||
m_objectName = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf950
|
||||
// FUNCTION: BETA10 0x10147c2e
|
||||
void MxDSObject::SetSourceName(const char* p_sourceName)
|
||||
{
|
||||
if (p_sourceName != this->m_sourceName) {
|
||||
delete[] this->m_sourceName;
|
||||
if (p_sourceName == m_sourceName) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (p_sourceName) {
|
||||
this->m_sourceName = new char[strlen(p_sourceName) + 1];
|
||||
delete[] m_sourceName;
|
||||
|
||||
if (this->m_sourceName) {
|
||||
strcpy(this->m_sourceName, p_sourceName);
|
||||
}
|
||||
}
|
||||
else {
|
||||
this->m_sourceName = NULL;
|
||||
if (p_sourceName) {
|
||||
m_sourceName = new char[strlen(p_sourceName) + 1];
|
||||
|
||||
if (m_sourceName) {
|
||||
strcpy(m_sourceName, p_sourceName);
|
||||
}
|
||||
}
|
||||
else {
|
||||
m_sourceName = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf9c0
|
||||
// FUNCTION: BETA10 0x10147cca
|
||||
undefined4 MxDSObject::VTable0x14()
|
||||
{
|
||||
// DECOMP: Rendered as 8 + 2 in beta. Maybe a sizeof() call?
|
||||
return 10;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bf9d0
|
||||
// FUNCTION: BETA10 0x10147cee
|
||||
MxU32 MxDSObject::GetSizeOnDisk()
|
||||
{
|
||||
MxU32 sizeOnDisk;
|
||||
MxU32 sizeOnDisk = 0;
|
||||
|
||||
if (this->m_sourceName) {
|
||||
sizeOnDisk = strlen(this->m_sourceName) + 3;
|
||||
}
|
||||
else {
|
||||
sizeOnDisk = 3;
|
||||
}
|
||||
sizeOnDisk += 2;
|
||||
|
||||
sizeOnDisk += 4;
|
||||
|
||||
if (this->m_objectName) {
|
||||
sizeOnDisk += strlen(this->m_objectName) + 1;
|
||||
if (m_sourceName) {
|
||||
sizeOnDisk += strlen(m_sourceName) + 1;
|
||||
}
|
||||
else {
|
||||
sizeOnDisk++;
|
||||
}
|
||||
|
||||
sizeOnDisk += 4;
|
||||
this->m_sizeOnDisk = sizeOnDisk;
|
||||
sizeOnDisk += sizeof(m_unk0x14);
|
||||
|
||||
if (m_objectName) {
|
||||
sizeOnDisk += strlen(m_objectName) + 1;
|
||||
}
|
||||
else {
|
||||
sizeOnDisk++;
|
||||
}
|
||||
|
||||
sizeOnDisk += sizeof(m_objectId);
|
||||
|
||||
m_sizeOnDisk = sizeOnDisk;
|
||||
return sizeOnDisk;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bfa20
|
||||
// FUNCTION: BETA10 0x10147d73
|
||||
void MxDSObject::Deserialize(MxU8*& p_source, MxS16 p_unk0x24)
|
||||
{
|
||||
GetString(p_source, this->m_sourceName, this, &MxDSObject::SetSourceName);
|
||||
GetScalar(p_source, this->m_unk0x14);
|
||||
GetString(p_source, this->m_objectName, this, &MxDSObject::SetObjectName);
|
||||
GetScalar(p_source, this->m_objectId);
|
||||
SetSourceName((char*) p_source);
|
||||
p_source += strlen(m_sourceName) + 1;
|
||||
|
||||
this->m_unk0x24 = p_unk0x24;
|
||||
m_unk0x14 = *(undefined4*) p_source;
|
||||
p_source += sizeof(m_unk0x14);
|
||||
|
||||
SetObjectName((char*) p_source);
|
||||
p_source += strlen(m_objectName) + 1;
|
||||
|
||||
m_objectId = *(MxU32*) p_source;
|
||||
p_source += sizeof(m_objectId);
|
||||
|
||||
m_unk0x24 = p_unk0x24;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100bfb30
|
||||
// FUNCTION: BETA10 0x10147f35
|
||||
MxDSObject* DeserializeDSObjectDispatch(MxU8*& p_source, MxS16 p_flags)
|
||||
{
|
||||
MxDSObject* obj = NULL;
|
||||
|
||||
MxU16 type = *(MxU16*) p_source;
|
||||
p_source += 2;
|
||||
|
||||
MxDSObject* obj = NULL;
|
||||
|
||||
switch (type) {
|
||||
default:
|
||||
return NULL;
|
||||
case MxDSObject::e_object:
|
||||
obj = new MxDSObject();
|
||||
break;
|
||||
@@ -167,6 +196,15 @@ MxDSObject* DeserializeDSObjectDispatch(MxU8*& p_source, MxS16 p_flags)
|
||||
case MxDSObject::e_sound:
|
||||
obj = new MxDSSound();
|
||||
break;
|
||||
case MxDSObject::e_event:
|
||||
obj = new MxDSEvent();
|
||||
break;
|
||||
case MxDSObject::e_still:
|
||||
obj = new MxDSStill();
|
||||
break;
|
||||
case MxDSObject::e_objectAction:
|
||||
obj = new MxDSObjectAction();
|
||||
break;
|
||||
case MxDSObject::e_multiAction:
|
||||
obj = new MxDSMultiAction();
|
||||
break;
|
||||
@@ -176,18 +214,11 @@ MxDSObject* DeserializeDSObjectDispatch(MxU8*& p_source, MxS16 p_flags)
|
||||
case MxDSObject::e_parallelAction:
|
||||
obj = new MxDSParallelAction();
|
||||
break;
|
||||
case MxDSObject::e_event:
|
||||
obj = new MxDSEvent();
|
||||
break;
|
||||
case MxDSObject::e_selectAction:
|
||||
obj = new MxDSSelectAction();
|
||||
break;
|
||||
case MxDSObject::e_still:
|
||||
obj = new MxDSStill();
|
||||
break;
|
||||
case MxDSObject::e_objectAction:
|
||||
obj = new MxDSObjectAction();
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (obj) {
|
||||
|
||||
Reference in New Issue
Block a user