ソースを参照

from @practicing01: trigger mounting

AzaezelX 5 年 前
コミット
b8c3b515f8
2 ファイル変更26 行追加0 行削除
  1. 23 0
      Engine/source/T3D/trigger.cpp
  2. 3 0
      Engine/source/T3D/trigger.h

+ 23 - 0
Engine/source/T3D/trigger.cpp

@@ -537,6 +537,13 @@ void Trigger::setTransform(const MatrixF & mat)
    testObjects();
 }
 
+void Trigger::onUnmount( SceneObject *obj, S32 node )
+{
+    Parent::onUnmount( obj, node );
+   // Make sure the client get's the final server pos.
+   setMaskBits(TransformMask | ScaleMask);
+}
+
 void Trigger::prepRenderImage( SceneRenderState *state )
 {
    // only render if selected or render flag is set
@@ -695,6 +702,13 @@ void Trigger::processTick(const Move* move)
    if (!mDataBlock->isClientSide && isClientObject())
       return;
 
+   if (isMounted()) {
+         MatrixF mat;
+         mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat );
+         setTransform(mat);
+         setRenderTransform(mat);
+    }
+
    //
    if (mObjects.size() == 0)
       return;
@@ -734,6 +748,15 @@ void Trigger::processTick(const Move* move)
    }
 }
 
+void Trigger::interpolateTick(F32 delta)
+{
+   if (isMounted()) {
+      MatrixF mat;
+      mMount.object->getRenderMountTransform( delta, mMount.node, mMount.xfm, &mat );
+      setRenderTransform(mat);
+   }
+}
+
 //--------------------------------------------------------------------------
 
 U32 Trigger::packUpdate(NetConnection* con, U32 mask, BitStream* stream)

+ 3 - 0
Engine/source/T3D/trigger.h

@@ -89,6 +89,8 @@ class Trigger : public GameBase
 
    static const U32 CMD_SIZE = 1024;
 
+   void onUnmount(SceneObject* obj,S32 node);
+
   protected:
    
    enum TriggerUpdateBits
@@ -104,6 +106,7 @@ class Trigger : public GameBase
    static bool smRenderTriggers;
    bool testObject(GameBase* enter);
    void processTick(const Move *move);
+   void interpolateTick(F32 delta);
 
    void buildConvex(const Box3F& box, Convex* convex);