mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-03-21 05:10:53 +00:00
Test PR of lazy load of ghosts and scene streaming
For now scene streaming only affects how subscenes are loaded. If you try it on everything in a scene expect issues as the namespaces are not linked up at that point. This is a TEST! Do not merge! If you do you will open up a gate to an alternate reality where all that you believe will cease to exist in an endless void of darkness.
This commit is contained in:
parent
23e30e801f
commit
eecc2bdaee
17 changed files with 298 additions and 37 deletions
|
|
@ -25,6 +25,13 @@ IMPLEMENT_CALLBACK(SubScene, onLoaded, void, (), (),
|
|||
IMPLEMENT_CALLBACK(SubScene, onUnloaded, void, (), (),
|
||||
"@brief Called when a subScene has been unloaded and has game mode implications.\n\n");
|
||||
|
||||
namespace Sim
|
||||
{
|
||||
// Defined in simManager.cpp
|
||||
extern SceneStreaming* sgStreamingInstance;
|
||||
}
|
||||
|
||||
|
||||
SubScene::SubScene() :
|
||||
mSubSceneAssetId(StringTable->EmptyString()),
|
||||
mGameModesNames(StringTable->EmptyString()),
|
||||
|
|
@ -360,10 +367,12 @@ void SubScene::_loadFile(bool addFileNotify)
|
|||
|
||||
String evalCmd = String::ToString("exec(\"%s\");", mSubSceneAsset->getLevelPath());
|
||||
|
||||
Sim::sgStreamingInstance->smStreaming = true;
|
||||
String instantGroup = Con::getVariable("InstantGroup");
|
||||
Con::setIntVariable("InstantGroup", this->getId());
|
||||
Con::evaluate((const char*)evalCmd.c_str(), false, mSubSceneAsset->getLevelPath());
|
||||
Con::setVariable("InstantGroup", instantGroup.c_str());
|
||||
Sim::sgStreamingInstance->smStreaming = false;
|
||||
|
||||
if (addFileNotify)
|
||||
Torque::FS::AddChangeNotification(mSubSceneAsset->getLevelPath(), this, &SubScene::_onFileChanged);
|
||||
|
|
|
|||
|
|
@ -575,6 +575,64 @@ void GameBase::readPacketData(GameConnection*, BitStream*)
|
|||
{
|
||||
}
|
||||
|
||||
U32 GameBase::partialPackUpdate(NetConnection* conn, U32 mask, BitStream* stream)
|
||||
{
|
||||
U32 retMask = Parent::partialPackUpdate(conn, mask, stream);
|
||||
|
||||
if (stream->writeFlag(mask & ScaleMask))
|
||||
{
|
||||
// Only write one bit if the scale is one.
|
||||
if (stream->writeFlag(mObjScale != Point3F::One))
|
||||
mathWrite(*stream, mObjScale);
|
||||
|
||||
retMask &= ~ScaleMask;
|
||||
}
|
||||
|
||||
if (stream->writeFlag((mask & DataBlockMask) && mDataBlock != NULL))
|
||||
{
|
||||
stream->writeRangedU32(mDataBlock->getId(),
|
||||
DataBlockObjectIdFirst,
|
||||
DataBlockObjectIdLast);
|
||||
if (stream->writeFlag(mNetFlags.test(NetOrdered)))
|
||||
stream->writeInt(mOrderGUID, 16);
|
||||
|
||||
retMask &= ~DataBlockMask;
|
||||
}
|
||||
|
||||
return retMask;
|
||||
}
|
||||
|
||||
void GameBase::partialUnpackUpdate(NetConnection* conn, BitStream* stream)
|
||||
{
|
||||
Parent::partialUnpackUpdate(conn, stream);
|
||||
|
||||
// ScaleMask
|
||||
if (stream->readFlag())
|
||||
{
|
||||
if (stream->readFlag())
|
||||
{
|
||||
VectorF scale;
|
||||
mathRead(*stream, &scale);
|
||||
setScale(scale);
|
||||
}
|
||||
else
|
||||
setScale(Point3F::One);
|
||||
}
|
||||
|
||||
// DataBlockMask
|
||||
if (stream->readFlag())
|
||||
{
|
||||
GameBaseData* dptr = 0;
|
||||
SimObjectId id = stream->readRangedU32(DataBlockObjectIdFirst,
|
||||
DataBlockObjectIdLast);
|
||||
if (stream->readFlag())
|
||||
mOrderGUID = stream->readInt(16);
|
||||
|
||||
if (!Sim::findObject(id, dptr) || !setDataBlock(dptr))
|
||||
conn->setLastError("Invalid packet GameBase::unpackUpdate()");
|
||||
}
|
||||
}
|
||||
|
||||
U32 GameBase::packUpdate( NetConnection *connection, U32 mask, BitStream *stream )
|
||||
{
|
||||
U32 retMask = Parent::packUpdate( connection, mask, stream );
|
||||
|
|
|
|||
|
|
@ -363,6 +363,8 @@ public:
|
|||
/// @{
|
||||
void interpolateTick(F32 dt) override;
|
||||
F32 getUpdatePriority( CameraScopeQuery *focusObject, U32 updateMask, S32 updateSkips ) override;
|
||||
U32 partialPackUpdate(NetConnection* conn, U32 mask, BitStream* stream) override;
|
||||
void partialUnpackUpdate(NetConnection* conn, BitStream* stream) override;
|
||||
U32 packUpdate ( NetConnection *conn, U32 mask, BitStream *stream ) override;
|
||||
void unpackUpdate( NetConnection *conn, BitStream *stream ) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -942,6 +942,86 @@ void TSStatic::setTransform(const MatrixF& mat)
|
|||
setRenderTransform(mat);
|
||||
}
|
||||
|
||||
U32 TSStatic::partialPackUpdate(NetConnection* conn, U32 mask, BitStream* stream)
|
||||
{
|
||||
U32 retMask = Parent::partialPackUpdate(conn,mask,stream);
|
||||
|
||||
if (stream->writeFlag(mask & TransformMask))
|
||||
{
|
||||
mathWrite(*stream, getTransform());
|
||||
retMask &= ~TransformMask;
|
||||
}
|
||||
|
||||
if (stream->writeFlag(mask & AdvancedStaticOptionsMask))
|
||||
{
|
||||
PACK_ASSET_REFACTOR(conn, Shape);
|
||||
|
||||
stream->writeInt(mDecalType, 4);
|
||||
|
||||
stream->writeFlag(mAllowPlayerStep);
|
||||
stream->writeFlag(mMeshCulling);
|
||||
stream->writeFlag(mUseOriginSort);
|
||||
|
||||
stream->write(mRenderNormalScalar);
|
||||
|
||||
stream->write(mForceDetail);
|
||||
|
||||
if (stream->writeFlag(mPlayAmbient && hasAnim()))
|
||||
{
|
||||
if (stream->writeFlag(mAnimOffset != 0.0f))
|
||||
stream->writeFloat(mAnimOffset, 7);
|
||||
|
||||
if (stream->writeFlag(mAnimSpeed != 1.0f))
|
||||
stream->writeSignedFloat(mAnimSpeed / AnimSpeedMax, 7);
|
||||
}
|
||||
|
||||
retMask &= ~AdvancedStaticOptionsMask;
|
||||
}
|
||||
|
||||
return retMask;
|
||||
}
|
||||
|
||||
void TSStatic::partialUnpackUpdate(NetConnection* conn, BitStream* stream)
|
||||
{
|
||||
Parent::partialUnpackUpdate(conn, stream);
|
||||
|
||||
if (stream->readFlag()) // TransformMask
|
||||
{
|
||||
MatrixF mat;
|
||||
mathRead(*stream, &mat);
|
||||
setTransform(mat);
|
||||
setRenderTransform(mat);
|
||||
}
|
||||
|
||||
if (stream->readFlag()) // AdvancedStaticOptionsMask
|
||||
{
|
||||
UNPACK_ASSET_REFACTOR(conn, Shape);
|
||||
|
||||
mDecalType = (MeshType)stream->readInt(4);
|
||||
|
||||
mAllowPlayerStep = stream->readFlag();
|
||||
mMeshCulling = stream->readFlag();
|
||||
mUseOriginSort = stream->readFlag();
|
||||
|
||||
stream->read(&mRenderNormalScalar);
|
||||
|
||||
stream->read(&mForceDetail);
|
||||
|
||||
mPlayAmbient = stream->readFlag();
|
||||
if (mPlayAmbient)
|
||||
{
|
||||
if (stream->readFlag())
|
||||
mAnimOffset = stream->readFloat(7);
|
||||
|
||||
if (stream->readFlag())
|
||||
mAnimSpeed = stream->readSignedFloat(7) * AnimSpeedMax;
|
||||
}
|
||||
|
||||
//update our shape, figuring that it likely changed
|
||||
_createShape();
|
||||
}
|
||||
}
|
||||
|
||||
U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
|
||||
{
|
||||
U32 retMask = Parent::packUpdate(con, mask, stream);
|
||||
|
|
|
|||
|
|
@ -254,6 +254,8 @@ public:
|
|||
void reSkin();
|
||||
|
||||
// NetObject
|
||||
U32 partialPackUpdate(NetConnection* conn, U32 mask, BitStream* stream) override;
|
||||
void partialUnpackUpdate(NetConnection* conn, BitStream* stream) override;
|
||||
U32 packUpdate(NetConnection* conn, U32 mask, BitStream* stream) override;
|
||||
void unpackUpdate(NetConnection* conn, BitStream* stream) override;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue