Improve match of LegoPathActor::FUN_1002edd0, reorder (#1332)

* Relocate annotation

* Improve match of `LegoBuildingManager::ScheduleAnimation`

* try fix

* Revert "try fix"

This reverts commit e8f5db6fec.

* Order isle

* Move annotation
This commit is contained in:
Christian Semmler
2025-01-12 13:31:58 -07:00
committed by GitHub
parent 5c57b805de
commit f95eedd0ce
5 changed files with 68 additions and 57 deletions

View File

@@ -680,7 +680,11 @@ void LegoBuildingManager::ScheduleAnimation(LegoEntity* p_entity, MxLong p_lengt
entry->m_entity = p_entity;
entry->m_roi = p_entity->GetROI();
entry->m_time = Timer()->GetTime() + p_length + 1000;
MxLong time = Timer()->GetTime();
time += p_length;
entry->m_time = time + 1000;
entry->m_unk0x0c = entry->m_roi->GetWorldPosition()[1];
entry->m_muted = p_haveSound == FALSE;
FUN_100307b0(p_entity, -2);

View File

@@ -491,29 +491,6 @@ MxU32 LegoPathActor::VTable0x6c(
return 0;
}
// FUNCTION: LEGO1 0x1002ebe0
// FUNCTION: BETA10 0x100af35e
MxS32 LegoPathActor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
{
Mx3DPointFloat v2(p_v2);
v2 -= p_v1;
float len = v2.LenSquared();
if (len <= 0.001) {
return 0;
}
len = sqrt(len);
v2 /= len;
float radius = m_roi->GetWorldBoundingSphere().Radius();
list<LegoPathBoundary*> boundaries;
return FUN_1002edd0(boundaries, m_boundary, p_v1, v2, len, radius, p_v3, 0);
}
// FUNCTION: LEGO1 0x1002edd0
inline MxU32 LegoPathActor::FUN_1002edd0(
list<LegoPathBoundary*>& p_boundaries,
LegoPathBoundary* p_boundary,
@@ -527,41 +504,65 @@ inline MxU32 LegoPathActor::FUN_1002edd0(
{
MxU32 result = VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3);
if (result == 0) {
p_boundaries.push_back(p_boundary);
if (result != 0) {
return result;
}
if (p_und >= 2) {
return 0;
}
p_boundaries.push_back(p_boundary);
LegoS32 numEdges = p_boundary->GetNumEdges();
for (MxS32 i = 0; i < numEdges; i++) {
LegoUnknown100db7f4* edge = ((LegoUnknown100db7f4*) p_boundary->GetEdges()[i]);
LegoPathBoundary* boundary = (LegoPathBoundary*) edge->OtherFace(p_boundary);
if (p_und >= 2) {
return 0;
}
if (boundary != NULL) {
list<LegoPathBoundary*>::iterator it;
LegoS32 numEdges = p_boundary->GetNumEdges();
for (MxS32 i = 0; i < numEdges; i++) {
LegoUnknown100db7f4* edge = p_boundary->GetEdges()[i];
LegoPathBoundary* boundary = (LegoPathBoundary*) edge->OtherFace(p_boundary);
for (it = p_boundaries.begin(); it != p_boundaries.end(); it++) {
if ((*it) == boundary) {
break;
}
if (boundary != NULL) {
list<LegoPathBoundary*>::const_iterator it;
for (it = p_boundaries.begin(); !(it == p_boundaries.end()); it++) {
if ((*it) == boundary) {
break;
}
}
if (it == p_boundaries.end()) {
result = FUN_1002edd0(p_boundaries, boundary, p_v1, p_v2, p_f1, p_f2, p_v3, p_und + 1);
if (it == p_boundaries.end()) {
result = FUN_1002edd0(p_boundaries, boundary, p_v1, p_v2, p_f1, p_f2, p_v3, p_und + 1);
if (result != 0) {
return result;
}
if (result != 0) {
return result;
}
}
}
result = 0;
}
return result;
return 0;
}
// FUNCTION: LEGO1 0x1002ebe0
// FUNCTION: BETA10 0x100af35e
MxS32 LegoPathActor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3)
{
assert(m_boundary && m_roi);
Mx3DPointFloat v2(p_v2);
v2 -= p_v1;
float len = v2.LenSquared();
if (len <= 0.001) {
return 0;
}
len = sqrt((double) len);
v2 /= len;
float radius = m_roi->GetWorldBoundingSphere().Radius();
list<LegoPathBoundary*> boundaries;
return FUN_1002edd0(boundaries, m_boundary, p_v1, v2, len, radius, p_v3, 0);
}
// FUNCTION: LEGO1 0x1002f020

View File

@@ -1186,6 +1186,12 @@ void Isle::CreateState()
}
}
// FUNCTION: LEGO1 0x10033170
void Isle::VTable0x60()
{
// empty
}
// FUNCTION: LEGO1 0x10033180
MxBool Isle::Escape()
{