From 8b43e940f8bb019f28acca49a8273a824ba9e8c4 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 23 Mar 2024 13:46:27 -0400 Subject: [PATCH] Implement/match LegoCameraController::FUN_100123e0 (#715) --- .../legoomni/include/legocameracontroller.h | 2 +- .../src/entity/legocameracontroller.cpp | 35 +++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legocameracontroller.h b/LEGO1/lego/legoomni/include/legocameracontroller.h index 086965bf..ac8cfd5d 100644 --- a/LEGO1/lego/legoomni/include/legocameracontroller.h +++ b/LEGO1/lego/legoomni/include/legocameracontroller.h @@ -37,7 +37,7 @@ public: virtual MxResult Create(); // vtable+0x44 void SetWorldTransform(const Vector3& p_at, const Vector3& p_dir, const Vector3& p_up); - void FUN_100123e0(const Matrix4& p_transform, MxU32); + void FUN_100123e0(const Matrix4& p_transform, MxU32 p_und); Mx3DPointFloat GetWorldUp(); Mx3DPointFloat GetWorldLocation(); Mx3DPointFloat GetWorldDirection(); diff --git a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp index 99bfbf46..c0c48c2a 100644 --- a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp @@ -2,10 +2,15 @@ #include "legoinputmanager.h" #include "legonotify.h" +#include "legosoundmanager.h" #include "legovideomanager.h" #include "misc.h" +#include "mxmisc.h" +#include "mxtimer.h" #include "realtime/realtime.h" +#include + DECOMP_SIZE_ASSERT(LegoCameraController, 0xc8) // FUNCTION: LEGO1 0x10011d50 @@ -117,10 +122,34 @@ void LegoCameraController::SetWorldTransform(const Vector3& p_at, const Vector3& m_matrix2 = m_matrix1; } -// STUB: LEGO1 0x100123e0 -void LegoCameraController::FUN_100123e0(const Matrix4& p_transform, MxU32) +// FUNCTION: LEGO1 0x100123e0 +void LegoCameraController::FUN_100123e0(const Matrix4& p_transform, MxU32 p_und) { - // TODO + if (m_lego3DView != NULL) { + ViewROI* pov = m_lego3DView->GetPointOfView(); + + if (pov != NULL) { + MxMatrix mat; + + if (p_und) { + MXM4(mat, m_matrix1, p_transform); + } + else { + mat = p_transform; + } + + ((TimeROI*) pov)->FUN_100a9b40(mat, Timer()->GetTime()); + pov->WrappedSetLocalTransform(mat); + m_lego3DView->Moved(*pov); + + SoundManager()->FUN_1002a410( + pov->GetWorldPosition(), + pov->GetWorldDirection(), + pov->GetWorldUp(), + pov->GetWorldVelocity() + ); + } + } } // FUNCTION: LEGO1 0x10012740