From 4d66ae37dee447e409d9f5567d67928696e29a35 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 8 Feb 2025 10:58:50 -0600 Subject: [PATCH] handle mounted lights ghosting in and out send a periodic corrective packet for mounted lights to ensure they stay mounted when moving in and out of ghosting --- Engine/source/T3D/lightBase.cpp | 14 +++++++++++++- Engine/source/scene/sceneObject.cpp | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Engine/source/T3D/lightBase.cpp b/Engine/source/T3D/lightBase.cpp index 957149e93..3ef40f4ca 100644 --- a/Engine/source/T3D/lightBase.cpp +++ b/Engine/source/T3D/lightBase.cpp @@ -147,7 +147,7 @@ bool LightBase::onAdd() // Update the light parameters. _conformLights(); addToScene(); - + setProcessTick(true); return true; } @@ -256,10 +256,22 @@ void LightBase::_onUnselected() void LightBase::interpolateTick( F32 delta ) { + if (isMounted()) { + MatrixF mat; + mMount.object->getRenderMountTransform(delta, mMount.node, mMount.xfm, &mat); + mLight->setTransform(mat); + Parent::setTransform(mat); + } } void LightBase::processTick() { + if (isMounted()) { + MatrixF mat; + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat); + mLight->setTransform(mat); + setTransform(mat); + } } void LightBase::advanceTime( F32 timeDelta ) diff --git a/Engine/source/scene/sceneObject.cpp b/Engine/source/scene/sceneObject.cpp index c44746c88..7ed86de9c 100644 --- a/Engine/source/scene/sceneObject.cpp +++ b/Engine/source/scene/sceneObject.cpp @@ -1236,10 +1236,10 @@ bool SceneObject::_setMountPID( void* object, const char* index, const char* dat void SceneObject::resolveMountPID() { - if ( mMountPID && !mMount.object ) + if ( mMountPID ) { SceneObject *obj = dynamic_cast< SceneObject* >( mMountPID->getObject() ); - if ( obj ) + if ( obj != mMount.object) obj->mountObject( this, mMount.node, mMount.xfm ); } }