Implement GroupImpl::Bounds (#1246)

* Implement/match DeviceImpl::HandleActivate

* Implement/match DeviceImpl::HandlePaint

* Implement GroupImpl::Unknown (71.63%)

* Fixes

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Anonymous Maarten
2024-12-20 19:48:31 +01:00
committed by GitHub
parent bfc6d460a8
commit 581ba0f5ae
4 changed files with 78 additions and 18 deletions

View File

@@ -128,8 +128,67 @@ Result GroupImpl::RemoveAll()
return result;
}
// STUB: LEGO1 0x100a3540
Result GroupImpl::Unknown()
// FUNCTION: LEGO1 0x100a3540
Result GroupImpl::Bounds(D3DVECTOR* p_min, D3DVECTOR* p_max)
{
return Error;
D3DRMBOX size;
IDirect3DRMFrame2* frame = m_data;
size.min.x = 88888.f;
size.min.y = 88888.f;
size.min.z = 88888.f;
size.max.x = -88888.f;
size.max.y = -88888.f;
size.max.z = -88888.f;
IDirect3DRMVisualArray* visuals;
Result result = (Result) SUCCEEDED(frame->GetVisuals(&visuals));
if (result == Success) {
int i;
for (i = 0; i < (int) visuals->GetSize(); i++) {
IDirect3DRMVisual* visual;
visuals->GetElement(i, &visual);
IDirect3DRMMesh* mesh;
/*
* BUG: should be:
* visual->QueryInterface(IID_IDirect3DRMMesh, (void**)&mesh));
*/
result = (Result) SUCCEEDED(visual->QueryInterface(IID_IDirect3DRMMeshBuilder, (void**) &mesh));
if (result == Success) {
D3DRMBOX box;
result = (Result) SUCCEEDED(mesh->GetBox(&box));
if (size.max.y < box.max.y) {
size.max.y = box.max.y;
}
if (size.max.z < box.max.z) {
size.max.z = box.max.z;
}
if (box.min.x < size.min.x) {
size.min.x = box.min.x;
}
if (box.min.y < size.min.y) {
size.min.y = box.min.y;
}
if (box.min.z < size.min.z) {
size.min.z = box.min.z;
}
if (size.max.x < box.max.x) {
size.max.x = box.max.x;
}
mesh->Release();
}
visual->Release();
}
visuals->Release();
}
*p_min = size.min;
*p_max = size.max;
return result;
}