Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asset Handling Refactor - For 4.2 #1343

Open
wants to merge 15 commits into
base: development
Choose a base branch
from
Prev Previous commit
Next Next commit
moar refactors
  • Loading branch information
marauder2k7 committed Jan 23, 2025
commit 22037bf94fccaab94b69b92a1de4030500f4526d
20 changes: 20 additions & 0 deletions Engine/source/T3D/assets/assetMacroHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,26 @@ if (m##name##AssetId != StringTable->EmptyString())\
_set##name(netconn->unpackNetStringHandleU(stream).getString());\
}

//network send - datablock
#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
for (i = 0; i < max; i++)\
{\
if (stream->writeFlag(m##name##Asset[i].notNull()))\
{\
stream->writeString(m##name##Asset[i].getAssetId()); \
}\
}

//network recieve - datablock
#define UNPACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
for (i = 0; i < max; i++)\
{\
if (stream->readFlag())\
{\
m##name##Asset[i] = stream->readSTString();\
}\
}

#define DEF_ASSET_BINDS_REFACTOR(className,name)\
DefineEngineMethod(className, get##name, StringTableEntry, (), , "get name")\
{\
Expand Down
21 changes: 5 additions & 16 deletions Engine/source/T3D/fx/splash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,6 @@ SplashData::SplashData()
explosionId = 0;

U32 i;
for (i = 0; i < NUM_TEX; i++)
{
INIT_IMAGEASSET_ARRAY(Texture, GFXStaticTextureSRGBProfile, i);
}

for( i=0; i<NUM_TIME_KEYS; i++ )
times[i] = 1.0;

Expand Down Expand Up @@ -133,7 +128,7 @@ void SplashData::initPersistFields()
addField("times", TypeF32, Offset(times, SplashData), NUM_TIME_KEYS, "Times to transition through the splash effect. Up to 4 allowed. Values are 0.0 - 1.0, and corrispond to the life of the particle where 0 is first created and 1 is end of lifespace.\n" );
addField("colors", TypeColorF, Offset(colors, SplashData), NUM_TIME_KEYS, "Color values to set the splash effect, rgba. Up to 4 allowed. Will transition through colors based on values set in the times value. Example: colors[0] = \"0.6 1.0 1.0 0.5\".\n" );

INITPERSISTFIELD_IMAGEASSET_ARRAY(Texture, NUM_TEX, SplashData, "Image to use as the texture for the splash effect.\n");
INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(Texture, NUM_TEX, SplashData, "Image to use as the texture for the splash effect.\n");

addField("texWrap", TypeF32, Offset(texWrap, SplashData), "Amount to wrap the texture around the splash ring, 0.0f - 1.0f.\n");
addField("texFactor", TypeF32, Offset(texFactor, SplashData), "Factor in which to apply the texture to the splash ring, 0.0f - 1.0f.\n");
Expand Down Expand Up @@ -207,10 +202,7 @@ void SplashData::packData(BitStream* stream)
stream->write( times[i] );
}

for( i=0; i<NUM_TEX; i++ )
{
PACKDATA_ASSET_ARRAY(Texture, i);
}
PACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
}

//--------------------------------------------------------------------------
Expand Down Expand Up @@ -263,10 +255,7 @@ void SplashData::unpackData(BitStream* stream)
stream->read( &times[i] );
}

for( i=0; i<NUM_TEX; i++ )
{
UNPACKDATA_ASSET_ARRAY(Texture, i);
}
UNPACKDATA_ASSET_ARRAY_REFACTOR(Texture, NUM_TEX);
}

//--------------------------------------------------------------------------
Expand Down Expand Up @@ -299,9 +288,9 @@ bool SplashData::preload(bool server, String &errorStr)

for( i=0; i<NUM_TEX; i++ )
{
if (mTexture[i].isNull())
if (mTextureAsset[i].isNull())
{
_setTexture(getTexture(i), i);
_setTexture(_getTexture(i), i);
}
}
}
Expand Down
4 changes: 1 addition & 3 deletions Engine/source/T3D/fx/splash.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,7 @@ class SplashData : public GameBaseData
F32 times[ NUM_TIME_KEYS ];
LinearColorF colors[ NUM_TIME_KEYS ];

DECLARE_IMAGEASSET_ARRAY(SplashData, Texture, NUM_TEX, onTextureChanged);
DECLARE_IMAGEASSET_ARRAY_SETGET(SplashData, Texture)
void onTextureChanged() {}
DECLARE_IMAGEASSET_ARRAY_REFACTOR(SplashData, Texture, GFXStaticTextureSRGBProfile, NUM_TEX)

ExplosionData* explosion;
S32 explosionId;
Expand Down
27 changes: 12 additions & 15 deletions Engine/source/gui/buttons/guiIconButtonCtrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ ConsoleDocClass( GuiIconButtonCtrl,

GuiIconButtonCtrl::GuiIconButtonCtrl()
{
INIT_ASSET(Bitmap);
mTextLocation = TextLocLeft;
mIconLocation = IconLocLeft;
mTextMargin = 4;
Expand Down Expand Up @@ -127,8 +126,8 @@ void GuiIconButtonCtrl::initPersistFields()
docsURL;
addField( "buttonMargin", TypePoint2I, Offset( mButtonMargin, GuiIconButtonCtrl ),"Margin area around the button.\n");

addProtectedField( "iconBitmap", TypeImageFilename, Offset( mBitmapName, GuiIconButtonCtrl ), &_setBitmapData, &defaultProtectedGetFn, "Bitmap file for the icon to display on the button.\n", AbstractClassRep::FIELD_HideInInspectors);
INITPERSISTFIELD_IMAGEASSET(Bitmap, GuiIconButtonCtrl, "Bitmap file for the icon to display on the button.\n");
addProtectedField( "iconBitmap", TypeImageFilename, Offset( mBitmapAsset, GuiIconButtonCtrl ), &_setBitmapData, &defaultProtectedGetFn, "Bitmap file for the icon to display on the button.\n", AbstractClassRep::FIELD_HideInInspectors);
INITPERSISTFIELD_IMAGEASSET_REFACTOR(Bitmap, GuiIconButtonCtrl, "Bitmap file for the icon to display on the button.\n");

addField( "iconLocation", TYPEID< IconLocation >(), Offset( mIconLocation, GuiIconButtonCtrl ),"Where to place the icon on the control. Options are 0 (None), 1 (Left), 2 (Right), 3 (Center).\n");
addField( "sizeIconToButton", TypeBool, Offset( mFitBitmapToButton, GuiIconButtonCtrl ),"If true, the icon will be scaled to be the same size as the button.\n");
Expand All @@ -148,8 +147,6 @@ bool GuiIconButtonCtrl::onWake()
return false;
setActive(true);

setBitmap(mBitmapName);

if( mProfile )
mProfile->constructBitmapArray();

Expand Down Expand Up @@ -181,8 +178,8 @@ bool GuiIconButtonCtrl::resize(const Point2I &newPosition, const Point2I &newExt

if ( mIconLocation != IconLocNone )
{
autoExtent.y = mBitmap.getHeight() + mButtonMargin.y * 2;
autoExtent.x = mBitmap.getWidth() + mButtonMargin.x * 2;
autoExtent.y = getBitmap().getHeight() + mButtonMargin.y * 2;
autoExtent.x = getBitmap().getWidth() + mButtonMargin.x * 2;
}

if ( mTextLocation != TextLocNone && mButtonText && mButtonText[0] )
Expand All @@ -209,7 +206,7 @@ void GuiIconButtonCtrl::setBitmap(const char *name)
if(!isAwake())
return;

_setBitmap(getBitmap());
_setBitmap(name);

// So that extent is recalculated if autoSize is set.
resize( getPosition(), getExtent() );
Expand Down Expand Up @@ -299,13 +296,13 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
RectI iconRect( 0, 0, 0, 0 );

// Render the icon
if ( mBitmap && mIconLocation != GuiIconButtonCtrl::IconLocNone )
if ( mBitmapAsset.notNull() && mIconLocation != GuiIconButtonCtrl::IconLocNone)
{
// Render the normal bitmap
drawer->clearBitmapModulation();

// Size of the bitmap
Point2I textureSize(mBitmap->getWidth(), mBitmap->getHeight());
Point2I textureSize(getBitmap()->getWidth(), getBitmap()->getHeight());

// Reduce the size with the margin (if set)
textureSize.x = textureSize.x - (mBitmapMargin * 2);
Expand All @@ -332,7 +329,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
iconRect.point.y = offset.y + ( getHeight() - textureSize.y ) / 2;
}

drawer->drawBitmapStretch(mBitmap, iconRect );
drawer->drawBitmapStretch(getBitmap(), iconRect );

}
else
Expand Down Expand Up @@ -366,7 +363,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
iconRect.point.y = offset.y + (getHeight() / 2) - (iconRect.extent.y / 2) + mButtonMargin.y;
}

drawer->drawBitmapStretch( mBitmap, iconRect );
drawer->drawBitmapStretch(getBitmap(), iconRect );
}
}

Expand All @@ -383,7 +380,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
if ( mTextLocation == TextLocRight )
{
Point2I start( mTextMargin, ( getHeight() - mProfile->mFont->getHeight() ) / 2 );
if (mBitmap && mIconLocation != IconLocNone )
if (mBitmapAsset.notNull() && mIconLocation != IconLocNone)
{
start.x = iconRect.extent.x + mButtonMargin.x + mTextMargin;
}
Expand All @@ -403,7 +400,7 @@ void GuiIconButtonCtrl::renderButton( Point2I &offset, const RectI& updateRect )
if ( mTextLocation == TextLocCenter )
{
Point2I start;
if (mBitmap && mIconLocation == IconLocLeft )
if (mBitmapAsset.notNull() && mIconLocation == IconLocLeft )
{
start.set( ( getWidth() - textWidth - iconRect.extent.x ) / 2 + iconRect.extent.x,
( getHeight() - mProfile->mFont->getHeight() ) / 2 );
Expand Down Expand Up @@ -468,4 +465,4 @@ void GuiIconButtonCtrl::renderBitmapArray(RectI &bounds, S32 state)
}
}

DEF_ASSET_BINDS(GuiIconButtonCtrl, Bitmap);
DEF_ASSET_BINDS_REFACTOR(GuiIconButtonCtrl, Bitmap)
3 changes: 1 addition & 2 deletions Engine/source/gui/buttons/guiIconButtonCtrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ class GuiIconButtonCtrl : public GuiButtonCtrl

protected:

DECLARE_IMAGEASSET(GuiIconButtonCtrl, Bitmap, onImageChanged, GFXDefaultGUIProfile);
DECLARE_ASSET_SETGET(GuiIconButtonCtrl, Bitmap);
DECLARE_IMAGEASSET_REFACTOR(GuiIconButtonCtrl, Bitmap, GFXDefaultGUIProfile)

S32 mIconLocation;
S32 mTextLocation;
Expand Down
29 changes: 11 additions & 18 deletions Engine/source/gui/controls/guiPopUpCtrl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -278,9 +278,6 @@ GuiPopUpMenuCtrl::GuiPopUpMenuCtrl(void)
mBackgroundCancel = false; // Added
mReverseTextList = false; // Added - Don't reverse text list if displaying up

INIT_IMAGEASSET_ARRAY(Bitmap, GFXDefaultGUIProfile, 0);
INIT_IMAGEASSET_ARRAY(Bitmap, GFXDefaultGUIProfile, 1);

mBitmapBounds.set(16, 16); // Added
mIdMax = -1;
mBackground = NULL;
Expand All @@ -302,8 +299,7 @@ void GuiPopUpMenuCtrl::initPersistFields(void)
addField("sbUsesNAColor", TypeBool, Offset(mRenderScrollInNA, GuiPopUpMenuCtrl));
addField("reverseTextList", TypeBool, Offset(mReverseTextList, GuiPopUpMenuCtrl));

addProtectedField("bitmap", TypeImageFilename, Offset(mBitmapName, GuiPopUpMenuCtrl), _setBitmaps, defaultProtectedGetFn, "");
addProtectedField("bitmapAsset", TypeImageAssetId, Offset(mBitmapAssetId, GuiPopUpMenuCtrl), _setBitmaps, defaultProtectedGetFn, "");
addProtectedField("BitmapAsset", TypeImageAssetPtrRefactor, Offset(mBitmapAsset, GuiPopUpMenuCtrl), _setBitmaps, &defaultProtectedGetFn, "@brief ""Bitmap"" ""asset \"\".");

addField("bitmapBounds", TypePoint2I, Offset(mBitmapBounds, GuiPopUpMenuCtrl));

Expand Down Expand Up @@ -473,9 +469,6 @@ bool GuiPopUpMenuCtrl::onWake()
if ( !Parent::onWake() )
return false;

// Set the bitmap for the popup.
setBitmap(getBitmap(Normal));

// Now update the Form Control's bitmap array, and possibly the child's too
mProfile->constructBitmapArray();

Expand Down Expand Up @@ -592,8 +585,8 @@ void GuiPopUpMenuCtrl::setBitmap( const char *name )
dStrcpy(p, "_d", pLen);
_setBitmap((StringTableEntry)buffer, Depressed);

if ( !mBitmap[Depressed] )
mBitmap[Depressed] = mBitmap[Normal];
if ( mBitmapAsset[Depressed].isNull() )
mBitmapAsset[Depressed] = mBitmapAsset[Normal];
}
else
{
Expand Down Expand Up @@ -898,17 +891,17 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
}

// Draw a bitmap over the background?
if ( mBitmap[Depressed] )
if ( mBitmapAsset[Depressed].notNull() )
{
RectI rect(offset, mBitmapBounds);
drawUtil->clearBitmapModulation();
drawUtil->drawBitmapStretch( mBitmap[Depressed], rect );
drawUtil->drawBitmapStretch( getBitmap(Depressed), rect );
}
else if ( mBitmap[Normal] )
else if ( mBitmapAsset[Normal].notNull() )
{
RectI rect(offset, mBitmapBounds);
drawUtil->clearBitmapModulation();
drawUtil->drawBitmapStretch( mBitmap[Normal], rect );
drawUtil->drawBitmapStretch(getBitmap(Normal), rect );
}

// Do we render a bitmap border or lines?
Expand Down Expand Up @@ -948,11 +941,11 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
}

// Draw a bitmap over the background?
if ( mBitmap[Normal] )
if ( mBitmapAsset[Normal].notNull() )
{
RectI rect( offset, mBitmapBounds );
drawUtil->clearBitmapModulation();
drawUtil->drawBitmapStretch( mBitmap[Normal], rect );
drawUtil->drawBitmapStretch(getBitmap(Normal) , rect);
}

// Do we render a bitmap border or lines?
Expand Down Expand Up @@ -984,11 +977,11 @@ void GuiPopUpMenuCtrl::onRender( Point2I offset, const RectI &updateRect )
}

// Draw a bitmap over the background?
if ( mBitmap[Normal] )
if (mBitmapAsset[Normal].notNull())
{
RectI rect(offset, mBitmapBounds);
drawUtil->clearBitmapModulation();
drawUtil->drawBitmapStretch( mBitmap[Normal], rect );
drawUtil->drawBitmapStretch( getBitmap(Normal), rect);
}

// Do we render a bitmap border or lines?
Expand Down
5 changes: 2 additions & 3 deletions Engine/source/gui/controls/guiPopUpCtrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,8 @@ class GuiPopUpMenuCtrl : public GuiTextCtrl
NumBitmapModes = 2
};

DECLARE_IMAGEASSET_ARRAY(GuiPopUpMenuCtrl, Bitmap, NumBitmapModes, onBitmapChanged);
DECLARE_IMAGEASSET_ARRAY_SETGET(GuiPopUpMenuCtrl, Bitmap);
void onBitmapChanged() {}
DECLARE_IMAGEASSET_ARRAY_REFACTOR(GuiPopUpMenuCtrl, Bitmap, GFXDefaultGUIProfile, NumBitmapModes)

Point2I mBitmapBounds; // Added
S32 mIdMax;

Expand Down
12 changes: 10 additions & 2 deletions Engine/source/gui/controls/guiPopUpCtrlEx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ void GuiPopUpMenuCtrlEx::initPersistFields(void)
addField("sbUsesNAColor", TypeBool, Offset(mRenderScrollInNA, GuiPopUpMenuCtrlEx), "Deprecated" "@internal");
addField("reverseTextList", TypeBool, Offset(mReverseTextList, GuiPopUpMenuCtrlEx), "Reverses text list if popup extends up, instead of down");

INITPERSISTFIELD_IMAGEASSET_ARRAY_REFACTOR(Bitmap, NumBitmapModes, GuiPopUpMenuCtrlEx, "Name of bitmap asset to use")
addProtectedField("BitmapAsset", TypeImageAssetPtrRefactor, Offset(mBitmapAsset, GuiPopUpMenuCtrlEx), _setBitmaps, &defaultProtectedGetFn, "@brief ""Bitmap"" ""asset \"Name of bitmap asset to use\".");

addField("bitmapBounds", TypePoint2I, Offset(mBitmapBounds, GuiPopUpMenuCtrlEx), "Boundaries of bitmap displayed");
addField("hotTrackCallback", TypeBool, Offset(mHotTrackItems, GuiPopUpMenuCtrlEx),
Expand Down Expand Up @@ -780,7 +780,15 @@ static S32 QSORT_CALLBACK idCompare(const void *a,const void *b)
GuiPopUpMenuCtrlEx::Entry *ea = (GuiPopUpMenuCtrlEx::Entry *) (a);
GuiPopUpMenuCtrlEx::Entry *eb = (GuiPopUpMenuCtrlEx::Entry *) (b);
return ( (ea->id < eb->id) ? -1 : ((ea->id > eb->id) ? 1 : 0) );
}
}

bool GuiPopUpMenuCtrlEx::_setBitmaps(void* obj, const char* index, const char* data)
{
GuiPopUpMenuCtrlEx* object = static_cast<GuiPopUpMenuCtrlEx*>(obj);

object->setBitmap(data);
return true;
}

//------------------------------------------------------------------------------
// Added
Expand Down
2 changes: 2 additions & 0 deletions Engine/source/gui/controls/guiPopUpCtrlEx.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ class GuiPopUpMenuCtrlEx : public GuiTextCtrl
virtual void removeChildren();
virtual void repositionPopup();

static bool _setBitmaps(void* obj, const char* index, const char* data);

public:
GuiPopUpMenuCtrlEx(void);
~GuiPopUpMenuCtrlEx();
Expand Down
2 changes: 1 addition & 1 deletion Engine/source/gui/editor/inspector/dynamicField.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ bool GuiInspectorDynamicField::onAdd()
mParent->getId() );

// FIXME Hardcoded image
mDeleteButton->setField( "Bitmap", "ToolsModule:iconDelete_image" );
mDeleteButton->_setBitmap("ToolsModule:iconDelete_image");
mDeleteButton->setField( "Text", "X" );
mDeleteButton->setField( "Command", szBuffer );
mDeleteButton->setSizing( horizResizeLeft, vertResizeCenter );
Expand Down