#ifndef MXREGIONLIST_H #define MXREGIONLIST_H #include "mxlist.h" // SIZE 0x08 struct MxRegionLeftRight { MxRegionLeftRight(MxS32 p_left, MxS32 p_right) { m_left = p_left; m_right = p_right; } MxRegionLeftRight* Clone() { return new MxRegionLeftRight(m_left, m_right); } MxS32 GetLeft() { return m_left; } MxS32 GetRight() { return m_right; } void SetLeft(MxS32 p_left) { m_left = p_left; } void SetRight(MxS32 p_right) { m_right = p_right; } MxBool IntersectsWith(MxRect32& p_rect) { return m_left < p_rect.GetRight() && p_rect.GetTop() < m_right; } private: MxS32 m_left; // 0x00 MxS32 m_right; // 0x04 }; // VTABLE: LEGO1 0x100dcc40 // VTABLE: BETA10 0x101c2628 // class MxCollection // VTABLE: LEGO1 0x100dcc58 // VTABLE: BETA10 0x101c2610 // class MxList // VTABLE: LEGO1 0x100dcc70 // VTABLE: BETA10 0x101c25f8 // class MxPtrList // VTABLE: LEGO1 0x100dcc88 // VTABLE: BETA10 0x101c25e0 // SIZE 0x18 class MxRegionLeftRightList : public MxPtrList { public: // FUNCTION: BETA10 0x1014bdd0 MxRegionLeftRightList() : MxPtrList(TRUE) {} // SYNTHETIC: LEGO1 0x100c4e90 // SYNTHETIC: BETA10 0x1014c1a0 // MxRegionLeftRightList::`scalar deleting destructor' }; // VTABLE: LEGO1 0x100dcbf8 // VTABLE: BETA10 0x101c25b0 // class MxPtrListCursor // VTABLE: LEGO1 0x100dcc28 // VTABLE: BETA10 0x101c25c8 // class MxListCursor // VTABLE: LEGO1 0x100dcc10 // VTABLE: BETA10 0x101c2598 class MxRegionLeftRightListCursor : public MxPtrListCursor { public: // FUNCTION: BETA10 0x1014ba10 MxRegionLeftRightListCursor(MxRegionLeftRightList* p_list) : MxPtrListCursor(p_list) {} }; // SIZE 0x0c struct MxRegionTopBottom { MxRegionTopBottom(MxRect32& p_rect); MxRegionTopBottom(MxS32 p_top, MxS32 p_bottom); ~MxRegionTopBottom() { delete m_leftRightList; } MxRegionTopBottom* Clone(); void MergeOrExpandRegions(MxS32 p_left, MxS32 p_right); MxBool CheckHorizontalOverlap(MxRect32& p_rect); MxS32 GetTop() { return m_top; } MxS32 GetBottom() { return m_bottom; } void SetTop(MxS32 p_top) { m_top = p_top; } void SetBottom(MxS32 p_bottom) { m_bottom = p_bottom; } MxBool IntersectsWith(MxRect32& p_rect) { return m_top < p_rect.GetBottom() && p_rect.GetTop() < m_bottom; } friend class MxRegionTopBottomList; friend class MxRegionCursor; private: MxS32 m_top; // 0x00 MxS32 m_bottom; // 0x04 MxRegionLeftRightList* m_leftRightList; // 0x08 }; // VTABLE: LEGO1 0x100dcb10 // VTABLE: BETA10 0x101c24f8 // class MxCollection // VTABLE: LEGO1 0x100dcb28 // VTABLE: BETA10 0x101c24e0 // class MxList // VTABLE: LEGO1 0x100dcb40 // VTABLE: BETA10 0x101c24c8 // class MxPtrList // VTABLE: LEGO1 0x100dcb58 // VTABLE: BETA10 0x101c24b0 // SIZE 0x18 class MxRegionTopBottomList : public MxPtrList { public: // FUNCTION: BETA10 0x1014abb0 MxRegionTopBottomList() : MxPtrList(TRUE) {} // SYNTHETIC: LEGO1 0x100c3410 // SYNTHETIC: BETA10 0x1014af90 // MxRegionTopBottomList::`scalar deleting destructor' }; // VTABLE: LEGO1 0x100dcb70 // VTABLE: BETA10 0x101c2528 // class MxPtrListCursor // VTABLE: LEGO1 0x100dcba0 // VTABLE: BETA10 0x101c2540 // class MxListCursor // TODO: The initialize list param type should be MxRegionTopBottomList, but doing that // drastically reduced the match percentage for MxRegion::VTable0x18. // It also works with MxPtrList, so we'll do that until we figure this out. // VTABLE: LEGO1 0x100dcb88 // VTABLE: BETA10 0x101c2510 class MxRegionTopBottomListCursor : public MxPtrListCursor { public: // FUNCTION: BETA10 0x1014b470 MxRegionTopBottomListCursor(MxPtrList* p_list) : MxPtrListCursor(p_list) {} }; // TEMPLATE: LEGO1 0x100c32e0 // TEMPLATE: BETA10 0x1014ac30 // MxCollection::Compare // TEMPLATE: LEGO1 0x100c32f0 // TEMPLATE: BETA10 0x1014adf0 // MxCollection::~MxCollection // TEMPLATE: LEGO1 0x100c3340 // TEMPLATE: BETA10 0x1014ae90 // MxCollection::Destroy // TEMPLATE: LEGO1 0x100c3350 // TEMPLATE: BETA10 0x1014aea0 // MxList::~MxList // TEMPLATE: LEGO1 0x100c33e0 // TEMPLATE: BETA10 0x1014af50 // MxPtrList::Destroy // TEMPLATE: LEGO1 0x100c3480 // TEMPLATE: BETA10 0x1014afd0 // MxPtrList::~MxPtrList // SYNTHETIC: LEGO1 0x100c34d0 // SYNTHETIC: BETA10 0x1014b030 // MxCollection::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c3540 // SYNTHETIC: BETA10 0x1014b070 // MxList::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c35f0 // SYNTHETIC: BETA10 0x1014b130 // MxPtrList::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c3be0 // SYNTHETIC: BETA10 0x1014b600 // MxRegionTopBottomListCursor::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c3c50 // TEMPLATE: BETA10 0x1014b640 // MxPtrListCursor::~MxPtrListCursor // SYNTHETIC: LEGO1 0x100c3ca0 // SYNTHETIC: BETA10 0x1014b6a0 // MxListCursor::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c3d10 // SYNTHETIC: BETA10 0x1014b6e0 // MxPtrListCursor::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c3d80 // TEMPLATE: BETA10 0x1014b720 // MxListCursor::~MxListCursor // FUNCTION: LEGO1 0x100c3dd0 // FUNCTION: BETA10 0x1014b780 // MxRegionTopBottomListCursor::~MxRegionTopBottomListCursor // SYNTHETIC: LEGO1 0x100c4790 // SYNTHETIC: BETA10 0x1014bba0 // MxRegionLeftRightListCursor::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c4800 // TEMPLATE: BETA10 0x1014bbe0 // MxPtrListCursor::~MxPtrListCursor // SYNTHETIC: LEGO1 0x100c4850 // SYNTHETIC: BETA10 0x1014bc40 // MxListCursor::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c48c0 // SYNTHETIC: BETA10 0x1014bc80 // MxPtrListCursor::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c4930 // TEMPLATE: BETA10 0x1014bcc0 // MxListCursor::~MxListCursor // TEMPLATE: LEGO1 0x100c4d80 // TEMPLATE: BETA10 0x1014be50 // MxCollection::Compare // TEMPLATE: LEGO1 0x100c4d90 // TEMPLATE: BETA10 0x1014c010 // MxCollection::~MxCollection // TEMPLATE: LEGO1 0x100c4de0 // TEMPLATE: BETA10 0x1014c0b0 // MxCollection::Destroy // TEMPLATE: LEGO1 0x100c4df0 // TEMPLATE: BETA10 0x1014c0c0 // MxList::~MxList // TEMPLATE: LEGO1 0x100c4f00 // TEMPLATE: BETA10 0x1014c1e0 // MxPtrList::~MxPtrList // SYNTHETIC: LEGO1 0x100c4f50 // SYNTHETIC: BETA10 0x1014c240 // MxCollection::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c4e80 // TEMPLATE: BETA10 0x1014c170 // MxPtrList::Destroy // SYNTHETIC: LEGO1 0x100c4fc0 // SYNTHETIC: BETA10 0x1014c280 // MxList::`scalar deleting destructor' // SYNTHETIC: LEGO1 0x100c5070 // SYNTHETIC: BETA10 0x1014c2c0 // MxPtrList::`scalar deleting destructor' // TEMPLATE: LEGO1 0x100c54f0 // MxListCursor::MxListCursor // FUNCTION: LEGO1 0x100c5560 // MxRegionLeftRightListCursor::~MxRegionLeftRightListCursor // TEMPLATE: LEGO1 0x100c55b0 // MxListCursor::operator= // TEMPLATE: LEGO1 0x100c58c0 // TEMPLATE: BETA10 0x1014c650 // MxList::InsertEntry // TEMPLATE: LEGO1 0x100c5970 // TEMPLATE: BETA10 0x1014cb20 // MxList::InsertEntry // TEMPLATE: LEGO1 0x100c5a20 // TEMPLATE: BETA10 0x1014d050 // MxListEntry::MxListEntry // TEMPLATE: LEGO1 0x100c5a40 // TEMPLATE: BETA10 0x1014d150 // MxList::DeleteEntry // TEMPLATE: BETA10 0x1014ac50 // MxPtrList::MxPtrList // TEMPLATE: BETA10 0x1014acd0 // MxList::MxList // TEMPLATE: BETA10 0x1014ad60 // MxCollection::MxCollection // TEMPLATE: BETA10 0x1014ae60 // MxCollection::SetDestroy // TEMPLATE: BETA10 0x1014af10 // MxPtrList::SetOwnership // FUNCTION: BETA10 0x1014b170 // MxRegionTopBottomList::~MxRegionTopBottomList // TEMPLATE: BETA10 0x1014b440 // MxList::Append // TEMPLATE: BETA10 0x1014b4f0 // MxPtrListCursor::MxPtrListCursor // TEMPLATE: BETA10 0x1014b570 // MxListCursor::MxListCursor // TEMPLATE: BETA10 0x1014ba90 // MxPtrListCursor::MxPtrListCursor // TEMPLATE: BETA10 0x1014bb10 // MxListCursor::MxListCursor // FUNCTION: BETA10 0x1014bd20 // MxRegionLeftRightListCursor::~MxRegionLeftRightListCursor // TEMPLATE: BETA10 0x1014be70 // MxPtrList::MxPtrList // TEMPLATE: BETA10 0x1014bef0 // MxList::MxList // TEMPLATE: BETA10 0x1014bf80 // MxCollection::MxCollection // TEMPLATE: BETA10 0x1014c080 // MxCollection::SetDestroy // TEMPLATE: BETA10 0x1014c130 // MxPtrList::SetOwnership // FUNCTION: BETA10 0x1014c300 // MxRegionLeftRightList::~MxRegionLeftRightList // TEMPLATE: BETA10 0x1014c390 // MxList::Append // SYNTHETIC: BETA10 0x1014c3c0 // MxRegionLeftRightListCursor::operator= // SYNTHETIC: BETA10 0x1014c3f0 // MxPtrListCursor::operator= // SYNTHETIC: BETA10 0x1014c420 // MxListCursor::operator= // TEMPLATE: BETA10 0x1014c740 // MxList::DeleteAll // TEMPLATE: BETA10 0x1014c7d0 // MxListCursor::First // TEMPLATE: BETA10 0x1014c830 // MxListCursor::Last // TEMPLATE: BETA10 0x1014c890 // MxListCursor::Next // TEMPLATE: BETA10 0x1014c970 // MxListCursor::Prev // TEMPLATE: BETA10 0x1014c9f0 // MxListCursor::Current // TEMPLATE: BETA10 0x1014ca40 // MxListCursor::Prepend // TEMPLATE: BETA10 0x1014ca90 // MxListCursor::Destroy // TEMPLATE: BETA10 0x1014caf0 // MxListCursor::HasMatch // TEMPLATE: BETA10 0x1014cc10 // MxList::DeleteAll // TEMPLATE: BETA10 0x1014cd20 // MxListCursor::Next // TEMPLATE: BETA10 0x1014cda0 // MxListCursor::Prev // TEMPLATE: BETA10 0x1014ce70 // MxListCursor::Prepend // TEMPLATE: BETA10 0x1014cec0 // MxListCursor::Destroy // TEMPLATE: BETA10 0x1014cf50 // MxListEntry::MxListEntry // TEMPLATE: BETA10 0x1014cf90 // MxListEntry::GetPrev // TEMPLATE: BETA10 0x1014cfb0 // MxListEntry::SetPrev // TEMPLATE: BETA10 0x1014cfe0 // MxListEntry::GetNext // TEMPLATE: BETA10 0x1014d000 // MxListEntry::SetNext // TEMPLATE: BETA10 0x1014d030 // MxListEntry::GetValue // TEMPLATE: BETA10 0x1014d090 // MxListEntry::GetPrev // TEMPLATE: BETA10 0x1014d0b0 // MxListEntry::SetPrev // TEMPLATE: BETA10 0x1014d0e0 // MxListEntry::GetNext // TEMPLATE: BETA10 0x1014d100 // MxListEntry::SetNext // TEMPLATE: BETA10 0x1014d130 // MxListEntry::GetValue // TEMPLATE: BETA10 0x1014d200 // MxList::DeleteEntry #endif // MXREGIONLIST_H