Prechádzať zdrojové kódy

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

AzaezelX 8 mesiacov pred
rodič
commit
4d66ae37de

+ 13 - 1
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 )

+ 2 - 2
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 );
    }
 }