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:
marauder2k7 2026-02-20 14:36:14 +00:00
parent 23e30e801f
commit eecc2bdaee
17 changed files with 298 additions and 37 deletions

View file

@ -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 );