|
@@ -24,6 +24,7 @@
|
|
// Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
|
|
// Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
|
|
// Copyright (C) 2015 Faust Logic, Inc.
|
|
// Copyright (C) 2015 Faust Logic, Inc.
|
|
//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
|
|
//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
|
|
|
|
+
|
|
#include "platform/platform.h"
|
|
#include "platform/platform.h"
|
|
#include "T3D/gameBase/gameBase.h"
|
|
#include "T3D/gameBase/gameBase.h"
|
|
#include "console/consoleTypes.h"
|
|
#include "console/consoleTypes.h"
|
|
@@ -40,6 +41,7 @@
|
|
#include "T3D/aiConnection.h"
|
|
#include "T3D/aiConnection.h"
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+#include "afx/arcaneFX.h"
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
// Ghost update relative priority values
|
|
// Ghost update relative priority values
|
|
|
|
|
|
@@ -254,6 +256,8 @@ GameBase::GameBase()
|
|
|
|
|
|
GameBase::~GameBase()
|
|
GameBase::~GameBase()
|
|
{
|
|
{
|
|
|
|
+ if (scope_registered)
|
|
|
|
+ arcaneFX::unregisterScopedObject(this);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -266,8 +270,16 @@ bool GameBase::onAdd()
|
|
|
|
|
|
// Datablock must be initialized on the server.
|
|
// Datablock must be initialized on the server.
|
|
// Client datablock are initialized by the initial update.
|
|
// Client datablock are initialized by the initial update.
|
|
- if ( isServerObject() && mDataBlock && !onNewDataBlock( mDataBlock, false ) )
|
|
|
|
- return false;
|
|
|
|
|
|
+ if (isClientObject())
|
|
|
|
+ {
|
|
|
|
+ if (scope_id > 0 && !scope_registered)
|
|
|
|
+ arcaneFX::registerScopedObject(this);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if ( mDataBlock && !onNewDataBlock( mDataBlock, false ) )
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
|
|
setProcessTick( true );
|
|
setProcessTick( true );
|
|
|
|
|
|
@@ -276,6 +288,8 @@ bool GameBase::onAdd()
|
|
|
|
|
|
void GameBase::onRemove()
|
|
void GameBase::onRemove()
|
|
{
|
|
{
|
|
|
|
+ if (scope_registered)
|
|
|
|
+ arcaneFX::unregisterScopedObject(this);
|
|
// EDITOR FEATURE: Remove us from the reload signal of our datablock.
|
|
// EDITOR FEATURE: Remove us from the reload signal of our datablock.
|
|
if ( mDataBlock )
|
|
if ( mDataBlock )
|
|
mDataBlock->mReloadSignal.remove( this, &GameBase::_onDatablockModified );
|
|
mDataBlock->mReloadSignal.remove( this, &GameBase::_onDatablockModified );
|
|
@@ -556,6 +570,11 @@ U32 GameBase::packUpdate( NetConnection *connection, U32 mask, BitStream *stream
|
|
stream->writeFlag(mIsAiControlled);
|
|
stream->writeFlag(mIsAiControlled);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+ if (stream->writeFlag(mask & ScopeIdMask))
|
|
|
|
+ {
|
|
|
|
+ if (stream->writeFlag(scope_refs > 0))
|
|
|
|
+ stream->writeInt(scope_id, SCOPE_ID_BITS);
|
|
|
|
+ }
|
|
return retMask;
|
|
return retMask;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -594,6 +613,11 @@ void GameBase::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
mTicksSinceLastMove = 0;
|
|
mTicksSinceLastMove = 0;
|
|
mIsAiControlled = stream->readFlag();
|
|
mIsAiControlled = stream->readFlag();
|
|
#endif
|
|
#endif
|
|
|
|
+ if (stream->readFlag())
|
|
|
|
+ {
|
|
|
|
+ scope_id = (stream->readFlag()) ? (U16) stream->readInt(SCOPE_ID_BITS) : 0;
|
|
|
|
+ scope_refs = 0;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void GameBase::onMount( SceneObject *obj, S32 node )
|
|
void GameBase::onMount( SceneObject *obj, S32 node )
|