Skip to content

Commit c58f682

Browse files
authored
Merge pull request #1754 from Areloch/ShapeAssetCleanupRefactor
ShapeAsset Cleanup and Standardization refactor
2 parents ebd409c + d53892f commit c58f682

52 files changed

Lines changed: 1868 additions & 1066 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Engine/source/T3D/assets/ShapeAsset.cpp

Lines changed: 379 additions & 159 deletions
Large diffs are not rendered by default.

Engine/source/T3D/assets/ShapeAsset.h

Lines changed: 37 additions & 281 deletions
Large diffs are not rendered by default.

Engine/source/T3D/debris.cpp

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ DebrisData::DebrisData()
116116
terminalVelocity = 0.0f;
117117
ignoreWater = true;
118118

119-
mShapeAsset.registerRefreshNotify(this);
119+
shapeAssetRef.assetPtr.registerRefreshNotify(this);
120120
}
121121

122122
//#define TRACK_DEBRIS_DATA_CLONES
@@ -152,7 +152,7 @@ DebrisData::DebrisData(const DebrisData& other, bool temp_clone) : GameBaseData(
152152
terminalVelocity = other.terminalVelocity;
153153
ignoreWater = other.ignoreWater;
154154

155-
mShapeAsset = other.mShapeAsset;
155+
shapeAssetRef = other.shapeAssetRef;
156156

157157
textureName = other.textureName;
158158
explosionId = other.explosionId; // -- for pack/unpack of explosion ptr
@@ -190,8 +190,8 @@ DebrisData* DebrisData::cloneAndPerformSubstitutions(const SimObject* owner, S32
190190
}
191191

192192
void DebrisData::onPerformSubstitutions()
193-
{
194-
_setShape(_getShapeAssetId());
193+
{
194+
shapeAssetRef = shapeAssetRef.assetId;
195195
}
196196

197197
bool DebrisData::onAdd()
@@ -278,17 +278,21 @@ bool DebrisData::preload(bool server, String &errorStr)
278278

279279
if( server ) return true;
280280

281-
if (getShape())
281+
if (!shapeAssetRef.isNull())
282282
{
283-
TSShapeInstance* pDummy = new TSShapeInstance(getShape(), !server);
284-
delete pDummy;
285-
if (!server && !getShape()->preloadMaterialList(getShapeFile()) && NetConnection::filesWereDownloaded())
283+
Resource<TSShape> shape = shapeAssetRef.assetPtr->getShapeResource();
284+
if (shape)
285+
{
286+
TSShapeInstance* pDummy = new TSShapeInstance(shape, !server);
287+
delete pDummy;
288+
if (!server && !shapeAssetRef.assetPtr->preloadMaterialList() && NetConnection::filesWereDownloaded())
289+
return false;
290+
}
291+
else
292+
{
293+
errorStr = String::ToString("DebrisData(%s)::preload: Couldn't load shape \"%s\"", getName(), shapeAssetRef.assetId);
286294
return false;
287-
}
288-
else if (!mShapeAsset.isNull())
289-
{
290-
errorStr = String::ToString("DebrisData::load: Couldn't load shape \"%s\"", _getShapeAssetId());
291-
return false;
295+
}
292296
}
293297

294298
return true;
@@ -305,7 +309,8 @@ void DebrisData::initPersistFields()
305309
addGroup("Shapes");
306310
addField("texture", TypeString, Offset(textureName, DebrisData),
307311
"@brief Texture imagemap to use for this debris object.\n\nNot used any more.\n", AbstractClassRep::FIELD_HideInInspectors);
308-
INITPERSISTFIELD_SHAPEASSET_REFACTOR(Shape, DebrisData, "Shape to use for this debris object.");
312+
ADD_FIELD("shapeAsset", TypeShapeAssetRef, Offset(shapeAssetRef, DebrisData))
313+
.doc("Shape to use for this debris object.");
309314
endGroup("Shapes");
310315

311316
addGroup("Particle Effects");
@@ -390,7 +395,7 @@ void DebrisData::packData(BitStream* stream)
390395

391396
stream->writeString( textureName );
392397

393-
PACKDATA_ASSET_REFACTOR(Shape);
398+
AssetDatabase.packDataAsset(stream, shapeAssetRef.assetId);
394399

395400
for( S32 i=0; i<DDC_NUM_EMITTERS; i++ )
396401
{
@@ -434,7 +439,7 @@ void DebrisData::unpackData(BitStream* stream)
434439

435440
textureName = stream->readSTString();
436441

437-
UNPACKDATA_ASSET_REFACTOR(Shape);
442+
shapeAssetRef = AssetDatabase.unpackDataAsset(stream);
438443

439444
for( S32 i=0; i<DDC_NUM_EMITTERS; i++ )
440445
{
@@ -677,18 +682,19 @@ bool Debris::onAdd()
677682
mFriction = mDataBlock->friction;
678683

679684
// Setup our bounding box
680-
if( mDataBlock->getShape())
681-
{
682-
mObjBox = mDataBlock->getShape()->mBounds;
683-
}
684-
else
685+
mObjBox = Box3F(Point3F(-1, -1, -1), Point3F(1, 1, 1));
686+
687+
Resource<TSShape> shape;
688+
if( mDataBlock->shapeAssetRef.notNull())
685689
{
686-
mObjBox = Box3F(Point3F(-1, -1, -1), Point3F(1, 1, 1));
690+
shape = mDataBlock->shapeAssetRef.assetPtr->getShapeResource();
691+
if (shape)
692+
mObjBox = shape->mBounds;
687693
}
688694

689-
if( mDataBlock->getShape())
695+
if(shape)
690696
{
691-
mShape = new TSShapeInstance( mDataBlock->getShape(), true);
697+
mShape = new TSShapeInstance(shape, true);
692698
}
693699

694700
if( mPart )

Engine/source/T3D/debris.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ struct DebrisData : public GameBaseData, protected AssetPtrCallback
8383
F32 terminalVelocity; // max velocity magnitude
8484
bool ignoreWater;
8585

86-
DECLARE_SHAPEASSET_REFACTOR(DebrisData, Shape)
86+
AssetRef<ShapeAsset> shapeAssetRef;
8787

8888
StringTableEntry textureName;
8989

Engine/source/T3D/examples/renderShapeExample.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
IMPLEMENT_CO_NETOBJECT_V1(RenderShapeExample);
3737

3838
ConsoleDocClass( RenderShapeExample,
39-
"@brief An example scene object which renders a DTS.\n\n"
39+
"@brief An example scene object which renders a shape asset.\n\n"
4040
"This class implements a basic SceneObject that can exist in the world at a "
4141
"3D position and render itself. There are several valid ways to render an "
4242
"object in Torque. This class makes use of the 'TS' (three space) shape "
@@ -74,7 +74,9 @@ void RenderShapeExample::initPersistFields()
7474
docsURL;
7575
Parent::initPersistFields();
7676
addGroup( "Shapes" );
77-
INITPERSISTFIELD_SHAPEASSET_REFACTOR(Shape, RenderShapeExample, "The path to the shape file.")
77+
ADD_FIELD("shapeAsset", TypeShapeAssetRef, Offset(mShapeAssetRef, RenderShapeExample))
78+
.doc("The shape asset to render.")
79+
.network(UpdateMask);
7880
endGroup( "Shapes" );
7981

8082
// SceneObject already handles exposing the transform
@@ -83,10 +85,6 @@ void RenderShapeExample::initPersistFields()
8385
void RenderShapeExample::inspectPostApply()
8486
{
8587
Parent::inspectPostApply();
86-
87-
// Flag the network mask to send the updates
88-
// to the client object
89-
setMaskBits( UpdateMask );
9088
}
9189

9290
bool RenderShapeExample::onAdd()
@@ -146,7 +144,7 @@ U32 RenderShapeExample::packUpdate( NetConnection *conn, U32 mask, BitStream *st
146144
// Write out any of the updated editable properties
147145
if ( stream->writeFlag( mask & UpdateMask ) )
148146
{
149-
PACK_ASSET_REFACTOR(conn, Shape);
147+
AssetDatabase.packUpdateAsset(conn, mask, stream, mShapeAssetRef.assetId);
150148

151149
// Allow the server object a chance to handle a new shape
152150
createShape();
@@ -170,7 +168,7 @@ void RenderShapeExample::unpackUpdate(NetConnection *conn, BitStream *stream)
170168

171169
if ( stream->readFlag() ) // UpdateMask
172170
{
173-
UNPACK_ASSET_REFACTOR(conn, Shape);
171+
mShapeAssetRef = AssetDatabase.unpackUpdateAsset(conn, stream);
174172

175173
if ( isProperlyAdded() )
176174
createShape();
@@ -182,28 +180,35 @@ void RenderShapeExample::unpackUpdate(NetConnection *conn, BitStream *stream)
182180
//-----------------------------------------------------------------------------
183181
void RenderShapeExample::createShape()
184182
{
185-
if ( mShapeAsset.isNull() )
186-
return;
187-
188183
// Clean up our previous shape
189184
if ( mShapeInstance )
190185
SAFE_DELETE( mShapeInstance );
191186

187+
if (!mShapeAssetRef.hasAssetId()) //literally nothing to do here
188+
return;
189+
190+
Resource<TSShape> shape;
191+
192+
if (mShapeAssetRef.assetPtr.notNull())
193+
shape = mShapeAssetRef.assetPtr->getShapeResource();
194+
else
195+
shape = ShapeAsset::smNoShapeAssetFallbackAssetPtr->getShapeResource();
196+
192197
// Attempt to preload the Materials for this shape
193198
if ( isClientObject() &&
194-
!getShape()->preloadMaterialList(getShapeFile()) &&
199+
!mShapeAssetRef.assetPtr->preloadMaterialList() &&
195200
NetConnection::filesWereDownloaded() )
196201
{
197202
return;
198203
}
199204

200205
// Update the bounding box
201-
mObjBox = getShape()->mBounds;
206+
mObjBox = shape->mBounds;
202207
resetWorldBox();
203208
setRenderTransform(mObjToWorld);
204209

205210
// Create the TSShapeInstance
206-
mShapeInstance = new TSShapeInstance(getShape(), isClientObject() );
211+
mShapeInstance = new TSShapeInstance(shape, isClientObject() );
207212
}
208213

209214
void RenderShapeExample::prepRenderImage( SceneRenderState *state )

Engine/source/T3D/examples/renderShapeExample.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class RenderShapeExample : public SceneObject
6161
//--------------------------------------------------------------------------
6262
// Rendering variables
6363
//--------------------------------------------------------------------------
64-
DECLARE_SHAPEASSET_REFACTOR(RenderShapeExample, Shape)
64+
AssetRef<ShapeAsset> mShapeAssetRef;
6565

6666
// The actual shape instance
6767
TSShapeInstance* mShapeInstance;

0 commit comments

Comments
 (0)