diff --git a/LEGO1/omni/include/mxregion.h b/LEGO1/omni/include/mxregion.h index c658978f..c5f8e31e 100644 --- a/LEGO1/omni/include/mxregion.h +++ b/LEGO1/omni/include/mxregion.h @@ -13,13 +13,19 @@ class MxSegment { MxS32 m_max; // 0x04 public: + // FUNCTION: BETA10 0x1014c360 MxSegment(MxS32 p_min, MxS32 p_max) { m_min = p_min; m_max = p_max; } + + // FUNCTION: BETA10 0x1014b910 MxS32 GetMin() { return m_min; } + + // FUNCTION: BETA10 0x1014b930 MxS32 GetMax() { return m_max; } + MxSegment* Clone() { return new MxSegment(m_min, m_max); } MxBool Combine(MxSegment& p_seg); MxBool Adjacent(MxSegment& p_seg) { return m_max == p_seg.m_min || m_min == p_seg.m_max; } @@ -79,10 +85,18 @@ class MxSpan { public: MxSpan(MxS32 p_min, MxS32 p_max); MxSpan(MxRect32& p_rect); + + // FUNCTION: BETA10 0x1014b0f0 ~MxSpan() { delete m_segList; } + + // FUNCTION: BETA10 0x1014b3b0 MxS32 GetMin() { return m_min; } + void SetMin(MxS32 p_min) { m_min = p_min; } + + // FUNCTION: BETA10 0x1014b3f0 MxS32 GetMax() { return m_max; } + void SetMax(MxS32 p_max) { m_max = p_max; } MxSpan* Clone(); void Compact(); @@ -98,6 +112,9 @@ class MxSpan { } MxBool operator!=(MxSpan& p_span) { return !operator==(p_span); } friend class MxRegionCursor; + + // SYNTHETIC: BETA10 0x1014b0b0 + // MxSpan::`scalar deleting destructor' }; // VTABLE: LEGO1 0x100dcb10 @@ -162,12 +179,14 @@ class MxRegion : public MxCore { virtual MxBool Intersects(MxRect32& p_rect); // vtable+0x1c // FUNCTION: LEGO1 0x100c3660 + // FUNCTION: BETA10 0x1014b1d0 virtual MxBool IsEmpty() { return m_spanList->GetNumElements() == 0; } // vtable+0x20 void Compact(); friend class MxRegionCursor; // SYNTHETIC: LEGO1 0x100c3670 + // SYNTHETIC: BETA10 0x1014b230 // MxRegion::`scalar deleting destructor' }; @@ -531,4 +550,10 @@ class MxRegionSanityCheck { // TEMPLATE: BETA10 0x1014d200 // MxList::DeleteEntry +// TEMPLATE: BETA10 0x1014b210 +// MxList::GetNumElements + +// TEMPLATE: BETA10 0x1014c910 +// ?Next@?$MxListCursor@PAVMxSegment@@@@QAEEXZ + #endif // __MXREGION_H diff --git a/LEGO1/omni/src/video/mxregion.cpp b/LEGO1/omni/src/video/mxregion.cpp index e2b762f9..e2841f23 100644 --- a/LEGO1/omni/src/video/mxregion.cpp +++ b/LEGO1/omni/src/video/mxregion.cpp @@ -16,11 +16,10 @@ MxRegion::MxRegion() } // FUNCTION: LEGO1 0x100c3690 +// FUNCTION: BETA10 0x10148fe8 MxRegion::~MxRegion() { - if (m_spanList) { - delete m_spanList; - } + delete m_spanList; } // FUNCTION: LEGO1 0x100c3700 @@ -85,6 +84,7 @@ void MxRegion::AddRect(MxRect32& p_rect) } // FUNCTION: LEGO1 0x100c3e20 +// FUNCTION: BETA10 0x10149535 MxBool MxRegion::Intersects(MxRect32& p_rect) { if (!m_boundingRect.IntersectsWith(p_rect)) { @@ -424,11 +424,7 @@ void MxSpan::AddSegment(MxS32 p_min, MxS32 p_max) ; } - if (!a.HasMatch()) { - MxSegment* copy = new MxSegment(p_min, p_max); - m_segList->Append(copy); - } - else { + if (a.HasMatch()) { if (p_min > segment->GetMin()) { p_min = segment->GetMin(); } @@ -458,6 +454,10 @@ void MxSpan::AddSegment(MxS32 p_min, MxS32 p_max) m_segList->Append(copy); } } + else { + MxSegment* copy = new MxSegment(p_min, p_max); + m_segList->Append(copy); + } } // FUNCTION: LEGO1 0x100c55d0 @@ -476,6 +476,7 @@ MxSpan* MxSpan::Clone() } // FUNCTION: LEGO1 0x100c57b0 +// FUNCTION: BETA10 0x1014aa46 MxBool MxSpan::IntersectsH(MxRect32& p_rect) { MxSegmentListCursor cursor(m_segList);