mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
Implement/match LegoCharacterManager::FUN_10083f10 (#774)
* Implement LegoCharacterManager::FUN_10083f10 * style * Match * Fix naming
This commit is contained in:
parent
75dc04f40a
commit
3bafe2d3a4
5 changed files with 54 additions and 8 deletions
|
@ -25,8 +25,17 @@ struct LegoCharacter {
|
|||
m_roi = p_roi;
|
||||
m_refCount = 1;
|
||||
}
|
||||
~LegoCharacter() { delete m_roi; }
|
||||
|
||||
inline void AddRef() { m_refCount++; }
|
||||
inline MxU32 RemoveRef()
|
||||
{
|
||||
if (m_refCount != 0) {
|
||||
m_refCount--;
|
||||
}
|
||||
|
||||
return m_refCount;
|
||||
}
|
||||
|
||||
LegoROI* m_roi; // 0x00
|
||||
MxU32 m_refCount; // 0x04
|
||||
|
@ -65,6 +74,7 @@ class LegoCharacterManager {
|
|||
|
||||
private:
|
||||
LegoROI* CreateROI(const char* p_key);
|
||||
void RemoveROI(LegoROI* p_roi);
|
||||
LegoROI* FUN_10084cf0(LegoROI* p_roi, const char* p_name);
|
||||
MxResult FUN_10085870(LegoROI* p_roi);
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ class LegoEntity : public MxEntity {
|
|||
Mx3DPointFloat GetWorldPosition();
|
||||
|
||||
inline MxBool GetUnknown0x10IsSet(MxU8 p_flag) { return m_unk0x10 & p_flag; }
|
||||
inline MxBool GetFlagsIsSet(MxU8 p_flag) { return m_flags & p_flag; }
|
||||
inline MxU8 GetFlags() { return m_flags; }
|
||||
inline MxFloat GetWorldSpeed() { return m_worldSpeed; }
|
||||
inline LegoROI* GetROI() { return m_roi; }
|
||||
|
|
|
@ -24,9 +24,9 @@ class LegoUnknown100d5778 {
|
|||
// LegoUnknown100d5778::`scalar deleting destructor'
|
||||
|
||||
private:
|
||||
undefined m_unk0x4[4]; // 0x04
|
||||
undefined m_unk0x04[4]; // 0x04
|
||||
LPDIRECTSOUNDBUFFER m_dsBuffer; // 0x08
|
||||
LegoROI* m_unk0xc; // 0x0c
|
||||
LegoROI* m_unk0x0c; // 0x0c
|
||||
undefined4 m_unk0x10; // 0x10
|
||||
MxBool m_unk0x14; // 0x14
|
||||
MxBool m_unk0x15; // 0x15
|
||||
|
|
|
@ -22,7 +22,7 @@ LegoUnknown100d5778::~LegoUnknown100d5778()
|
|||
void LegoUnknown100d5778::Init()
|
||||
{
|
||||
m_dsBuffer = NULL;
|
||||
m_unk0xc = NULL;
|
||||
m_unk0x0c = NULL;
|
||||
m_unk0x10 = 0;
|
||||
m_unk0x18 = 0;
|
||||
m_unk0x14 = FALSE;
|
||||
|
@ -57,12 +57,12 @@ void LegoUnknown100d5778::Destroy()
|
|||
m_dsBuffer = NULL;
|
||||
}
|
||||
|
||||
if (m_unk0x14 && m_unk0xc && CharacterManager()) {
|
||||
if (m_unk0x14 && m_unk0x0c && CharacterManager()) {
|
||||
if (m_unk0x15) {
|
||||
CharacterManager()->FUN_10083db0(m_unk0xc);
|
||||
CharacterManager()->FUN_10083db0(m_unk0x0c);
|
||||
}
|
||||
else {
|
||||
CharacterManager()->FUN_10083f10(m_unk0xc);
|
||||
CharacterManager()->FUN_10083f10(m_unk0x0c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -242,10 +242,45 @@ void LegoCharacterManager::FUN_10083db0(LegoROI* p_roi)
|
|||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10083f10
|
||||
// FUNCTION: LEGO1 0x10083f10
|
||||
void LegoCharacterManager::FUN_10083f10(LegoROI* p_roi)
|
||||
{
|
||||
// TODO
|
||||
LegoCharacter* character = NULL;
|
||||
LegoCharacterMap::iterator it;
|
||||
|
||||
for (it = m_characters->begin(); it != m_characters->end(); it++) {
|
||||
character = (*it).second;
|
||||
|
||||
if (character->m_roi == p_roi) {
|
||||
if (character->RemoveRef() == 0) {
|
||||
LegoEntity* entity = character->m_roi->GetEntity();
|
||||
|
||||
if (entity != NULL) {
|
||||
entity->SetROI(NULL, FALSE, FALSE);
|
||||
}
|
||||
|
||||
RemoveROI(character->m_roi);
|
||||
|
||||
delete[] const_cast<char*>((*it).first);
|
||||
delete (*it).second;
|
||||
|
||||
m_characters->erase(it);
|
||||
|
||||
if (entity != NULL && entity->GetFlagsIsSet(LegoEntity::c_bit2)) {
|
||||
entity->ClearFlag(LegoEntity::c_bit2);
|
||||
delete entity;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084010
|
||||
void LegoCharacterManager::RemoveROI(LegoROI* p_roi)
|
||||
{
|
||||
VideoManager()->Get3DManager()->Remove(*p_roi);
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10084030
|
||||
|
|
Loading…
Reference in a new issue