From b8c3b515f8959f6602dac4d7357108af8ec39995 Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Fri, 10 Jul 2020 15:50:25 -0500 Subject: [PATCH] from @practicing01: trigger mounting --- Engine/source/T3D/trigger.cpp | 23 +++++++++++++++++++++++ Engine/source/T3D/trigger.h | 3 +++ 2 files changed, 26 insertions(+) diff --git a/Engine/source/T3D/trigger.cpp b/Engine/source/T3D/trigger.cpp index 76e0e5555..98d5f5723 100644 --- a/Engine/source/T3D/trigger.cpp +++ b/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) diff --git a/Engine/source/T3D/trigger.h b/Engine/source/T3D/trigger.h index 179f4af7a..c394d5c03 100644 --- a/Engine/source/T3D/trigger.h +++ b/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);