Merge branch 'Preview4_0' of https://github.com/TorqueGameEngines/Torque3D into Preview4_0

This commit is contained in:
Areloch 2021-11-09 19:06:57 -06:00
commit d06bc790e3
12 changed files with 147 additions and 74 deletions

View file

@ -405,7 +405,12 @@ public: \
else if (m##name##AssetId[index] != StringTable->EmptyString())\ else if (m##name##AssetId[index] != StringTable->EmptyString())\
return m##name##AssetId[index];\ return m##name##AssetId[index];\
else if (m##name##Name[index] != StringTable->EmptyString())\ else if (m##name##Name[index] != StringTable->EmptyString())\
return StringTable->insert(Platform::makeRelativePathName(m##name##Name[index], Platform::getMainDotCsDir()));\ {\
if (String(m##name##Name[index]).startsWith("#") || String(m##name##Name[index]).startsWith("$"))\
return StringTable->insert(m##name##Name[index]);\
else\
return StringTable->insert(Platform::makeRelativePathName(m##name##Name[index], Platform::getMainDotCsDir()));\
}\
else\ else\
return StringTable->EmptyString();\ return StringTable->EmptyString();\
}\ }\

View file

@ -721,27 +721,27 @@ String AssetImporter::parseImageSuffixes(String assetName, String* suffixType)
{ {
case 0: case 0:
suffixList = activeImportConfig->DiffuseTypeSuffixes; suffixList = activeImportConfig->DiffuseTypeSuffixes;
suffixType->insert(0, "Albedo", 10); suffixType->insert(0, "Albedo", 6);
break; break;
case 1: case 1:
suffixList = activeImportConfig->NormalTypeSuffixes; suffixList = activeImportConfig->NormalTypeSuffixes;
suffixType->insert(0, "Normal", 10); suffixType->insert(0, "Normal", 6);
break; break;
case 2: case 2:
suffixList = activeImportConfig->RoughnessTypeSuffixes; suffixList = activeImportConfig->RoughnessTypeSuffixes;
suffixType->insert(0, "Roughness", 10); suffixType->insert(0, "Roughness", 9);
break; break;
case 3: case 3:
suffixList = activeImportConfig->AOTypeSuffixes; suffixList = activeImportConfig->AOTypeSuffixes;
suffixType->insert(0, "AO", 10); suffixType->insert(0, "AO", 2);
break; break;
case 4: case 4:
suffixList = activeImportConfig->MetalnessTypeSuffixes; suffixList = activeImportConfig->MetalnessTypeSuffixes;
suffixType->insert(0, "Metalness", 10); suffixType->insert(0, "Metalness", 9);
break; break;
case 5: case 5:
suffixList = activeImportConfig->PBRTypeSuffixes; suffixList = activeImportConfig->PBRTypeSuffixes;
suffixType->insert(0, "ORMConfig", 10); suffixType->insert(0, "ORMConfig", 9);
break; break;
default: default:
suffixList = ""; suffixList = "";

View file

@ -731,7 +731,8 @@ void Trigger::potentialEnterObject(GameBase* enter)
if(evalCmD(&mEnterCommand)) if(evalCmD(&mEnterCommand))
{ {
String command = String("%obj = ") + enter->getIdString() + ";" + mEnterCommand; String command = String("%obj = ") + enter->getIdString() + ";";
command = command + String("%this = ") + getIdString() + ";" + mEnterCommand;
Con::evaluate(command.c_str()); Con::evaluate(command.c_str());
} }
@ -779,7 +780,8 @@ void Trigger::processTick(const Move* move)
if (evalCmD(&mLeaveCommand)) if (evalCmD(&mLeaveCommand))
{ {
String command = String("%obj = ") + remove->getIdString() + ";" + mLeaveCommand; String command = String("%obj = ") + remove->getIdString() + ";";
command = command + String("%this = ") + getIdString() + ";" + mLeaveCommand;
Con::evaluate(command.c_str()); Con::evaluate(command.c_str());
} }
if (testTrippable() && testCondition()) if (testTrippable() && testCondition())

View file

@ -54,6 +54,7 @@
#include "materials/materialFeatureTypes.h" #include "materials/materialFeatureTypes.h"
#include "console/engineAPI.h" #include "console/engineAPI.h"
#include "T3D/accumulationVolume.h" #include "T3D/accumulationVolume.h"
#include "math/mTransform.h"
#include "gui/editor/inspector/group.h" #include "gui/editor/inspector/group.h"
#include "console/typeValidators.h" #include "console/typeValidators.h"
@ -1863,3 +1864,31 @@ void TSStatic::setSelectionFlags(U8 flags)
} }
} }
void TSStatic::getNodeTransform(const char *nodeName, const MatrixF &xfm, MatrixF *outMat)
{
S32 nodeIDx = getShapeResource()->findNode(nodeName);
MatrixF mountTransform = mShapeInstance->mNodeTransforms[nodeIDx];
mountTransform.mul(xfm);
const Point3F &scale = getScale();
// The position of the mount point needs to be scaled.
Point3F position = mountTransform.getPosition();
position.convolve(scale);
mountTransform.setPosition(position);
// Also we would like the object to be scaled to the model.
outMat->mul(mObjToWorld, mountTransform);
return;
}
DefineEngineMethod(TSStatic, getNodeTransform, TransformF, (const char *nodeName), ,
"@brief Get the world transform of the specified mount slot.\n\n"
"@param slot Image slot to query\n"
"@return the mount transform\n\n")
{
MatrixF xf(true);
object->getNodeTransform(nodeName, MatrixF::Identity, &xf);
return xf;
}

View file

@ -276,6 +276,7 @@ public:
void updateMaterials(); void updateMaterials();
bool isAnimated() { return mPlayAmbient; } bool isAnimated() { return mPlayAmbient; }
void getNodeTransform(const char *nodeName, const MatrixF &xfm, MatrixF *outMat);
virtual void getUtilizedAssets(Vector<StringTableEntry>* usedAssetsList); virtual void getUtilizedAssets(Vector<StringTableEntry>* usedAssetsList);

View file

@ -303,54 +303,54 @@ U32 GFXDrawUtil::drawTextN( GFont *font, const Point2F &ptDraw, const UTF16 *in_
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Draw Bitmaps // Draw Bitmaps
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void GFXDrawUtil::drawBitmap( GFXTextureObject* texture, const Point2I &in_rAt, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmap( GFXTextureObject* texture, const Point2I &in_rAt, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/, F32 angle)
{ {
drawBitmap(texture,Point2F((F32)in_rAt.x,(F32)in_rAt.y),in_flip,filter,in_wrap); drawBitmap(texture,Point2F((F32)in_rAt.x,(F32)in_rAt.y),in_flip,filter,in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapStretch( GFXTextureObject* texture, const RectI &dstRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapStretch( GFXTextureObject* texture, const RectI &dstRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/, F32 angle)
{ {
drawBitmapStretch(texture,RectF((F32)dstRect.point.x,(F32)dstRect.point.y,(F32)dstRect.extent.x,(F32)dstRect.extent.y),in_flip,filter,in_wrap); drawBitmapStretch(texture,RectF((F32)dstRect.point.x,(F32)dstRect.point.y,(F32)dstRect.extent.x,(F32)dstRect.extent.y),in_flip,filter,in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapSR( GFXTextureObject* texture, const Point2I &in_rAt, const RectI &srcRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapSR( GFXTextureObject* texture, const Point2I &in_rAt, const RectI &srcRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/, F32 angle)
{ {
drawBitmapSR(texture,Point2F((F32)in_rAt.x,(F32)in_rAt.y),RectF((F32)srcRect.point.x,(F32)srcRect.point.y,(F32)srcRect.extent.x,(F32)srcRect.extent.y),in_flip,filter,in_wrap); drawBitmapSR(texture,Point2F((F32)in_rAt.x,(F32)in_rAt.y),RectF((F32)srcRect.point.x,(F32)srcRect.point.y,(F32)srcRect.extent.x,(F32)srcRect.extent.y),in_flip,filter,in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapStretchSR( GFXTextureObject *texture, const RectI &dstRect, const RectI &srcRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapStretchSR( GFXTextureObject *texture, const RectI &dstRect, const RectI &srcRect, const GFXBitmapFlip in_flip, const GFXTextureFilterType filter , bool in_wrap /*= true*/, F32 angle)
{ {
RectF dstRectF = RectF((F32)dstRect.point.x,(F32)dstRect.point.y,(F32)dstRect.extent.x,(F32)dstRect.extent.y); RectF dstRectF = RectF((F32)dstRect.point.x,(F32)dstRect.point.y,(F32)dstRect.extent.x,(F32)dstRect.extent.y);
RectF srcRectF = RectF((F32)srcRect.point.x,(F32)srcRect.point.y,(F32)srcRect.extent.x,(F32)srcRect.extent.y); RectF srcRectF = RectF((F32)srcRect.point.x,(F32)srcRect.point.y,(F32)srcRect.extent.x,(F32)srcRect.extent.y);
drawBitmapStretchSR(texture,dstRectF,srcRectF,in_flip,filter,in_wrap); drawBitmapStretchSR(texture,dstRectF,srcRectF,in_flip,filter,in_wrap, angle);
} }
void GFXDrawUtil::drawBitmap( GFXTextureObject*texture, const Point2F &in_rAt, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmap( GFXTextureObject*texture, const Point2F &in_rAt, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/, F32 angle)
{ {
AssertFatal( texture != 0, "No texture specified for drawBitmap()" ); AssertFatal( texture != 0, "No texture specified for drawBitmap()" );
RectI subRegion( 0, 0, texture->mBitmapSize.x, texture->mBitmapSize.y ); RectI subRegion( 0, 0, texture->mBitmapSize.x, texture->mBitmapSize.y );
RectI stretch( in_rAt.x, in_rAt.y, texture->mBitmapSize.x, texture->mBitmapSize.y ); RectI stretch( in_rAt.x, in_rAt.y, texture->mBitmapSize.x, texture->mBitmapSize.y );
drawBitmapStretchSR( texture, stretch, subRegion, in_flip, filter, in_wrap ); drawBitmapStretchSR( texture, stretch, subRegion, in_flip, filter, in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapStretch( GFXTextureObject*texture, const RectF &dstRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapStretch( GFXTextureObject*texture, const RectF &dstRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/, F32 angle)
{ {
AssertFatal( texture != 0, "No texture specified for drawBitmapStretch()" ); AssertFatal( texture != 0, "No texture specified for drawBitmapStretch()" );
RectF subRegion( 0.f, 0.f, (F32)texture->mBitmapSize.x, (F32)texture->mBitmapSize.y ); RectF subRegion( 0.f, 0.f, (F32)texture->mBitmapSize.x, (F32)texture->mBitmapSize.y );
drawBitmapStretchSR( texture, dstRect, subRegion, in_flip, filter, in_wrap ); drawBitmapStretchSR( texture, dstRect, subRegion, in_flip, filter, in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapSR( GFXTextureObject*texture, const Point2F &in_rAt, const RectF &srcRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapSR( GFXTextureObject*texture, const Point2F &in_rAt, const RectF &srcRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/, F32 angle)
{ {
AssertFatal( texture != 0, "No texture specified for drawBitmapSR()" ); AssertFatal( texture != 0, "No texture specified for drawBitmapSR()" );
RectF stretch( in_rAt.x, in_rAt.y, srcRect.len_x(), srcRect.len_y() ); RectF stretch( in_rAt.x, in_rAt.y, srcRect.len_x(), srcRect.len_y() );
drawBitmapStretchSR( texture, stretch, srcRect, in_flip, filter, in_wrap ); drawBitmapStretchSR( texture, stretch, srcRect, in_flip, filter, in_wrap, angle);
} }
void GFXDrawUtil::drawBitmapStretchSR( GFXTextureObject* texture, const RectF &dstRect, const RectF &srcRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/ ) void GFXDrawUtil::drawBitmapStretchSR( GFXTextureObject* texture, const RectF &dstRect, const RectF &srcRect, const GFXBitmapFlip in_flip /*= GFXBitmapFlip_None*/, const GFXTextureFilterType filter /*= GFXTextureFilterPoint */ , bool in_wrap /*= true*/, F32 angle)
{ {
// Sanity if no texture is specified. // Sanity if no texture is specified.
if(!texture) if(!texture)
@ -395,6 +395,30 @@ void GFXDrawUtil::drawBitmapStretchSR( GFXTextureObject* texture, const RectF &d
verts[2].texCoord.set( texLeft, texBottom ); verts[2].texCoord.set( texLeft, texBottom );
verts[3].texCoord.set( texRight, texBottom ); verts[3].texCoord.set( texRight, texBottom );
if (angle != 0.0f)
{
U32 i = 0;
Point3F points[4];
points[0] = Point3F(-dstRect.extent.x / 2.0f, -dstRect.extent.y / 2.0f, 0.0);
points[1] = Point3F(dstRect.extent.x / 2.0f, -dstRect.extent.y / 2.0f, 0.0);
points[2] = Point3F(-dstRect.extent.x / 2.0f, dstRect.extent.y / 2.0f, 0.0);
points[3] = Point3F(dstRect.extent.x / 2.0f, dstRect.extent.y / 2.0f, 0.0);
//calc center by taking position+extent/2
Point3F offset(dstRect.point.x + dstRect.extent.x / 2.0f,
dstRect.point.y + dstRect.extent.y / 2.0f, 0.0);
//rotate points by mulitplying by a rotation matrix
MatrixF rotMatrix(EulerF(0.0, 0.0, mDegToRad(angle)));
for (i = 0; i < 4; i++)
{
rotMatrix.mulP(points[i]);
points[i] += offset;
verts[i].point = points[i];
}
}
verts.unlock(); verts.unlock();
mDevice->setVertexBuffer( verts ); mDevice->setVertexBuffer( verts );

View file

@ -93,15 +93,15 @@ public:
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Draw Bitmaps // Draw Bitmaps
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void drawBitmap( GFXTextureObject*texture, const Point2F &in_rAt, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmap( GFXTextureObject*texture, const Point2F &in_rAt, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapSR( GFXTextureObject*texture, const Point2F &in_rAt, const RectF &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapSR( GFXTextureObject*texture, const Point2F &in_rAt, const RectF &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapStretch( GFXTextureObject*texture, const RectF &dstRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapStretch( GFXTextureObject*texture, const RectF &dstRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapStretchSR( GFXTextureObject*texture, const RectF &dstRect, const RectF &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapStretchSR( GFXTextureObject*texture, const RectF &dstRect, const RectF &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmap( GFXTextureObject*texture, const Point2I &in_rAt, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmap( GFXTextureObject*texture, const Point2I &in_rAt, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapSR( GFXTextureObject*texture, const Point2I &in_rAt, const RectI &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapSR( GFXTextureObject*texture, const Point2I &in_rAt, const RectI &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapStretch( GFXTextureObject*texture, const RectI &dstRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapStretch( GFXTextureObject*texture, const RectI &dstRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
void drawBitmapStretchSR( GFXTextureObject*texture, const RectI &dstRect, const RectI &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true ); void drawBitmapStretchSR( GFXTextureObject*texture, const RectI &dstRect, const RectI &srcRect, const GFXBitmapFlip in_flip = GFXBitmapFlip_None, const GFXTextureFilterType filter = GFXTextureFilterPoint , bool in_wrap = true, F32 angle = 0.0f);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Draw 3D Shapes // Draw 3D Shapes

View file

@ -58,6 +58,7 @@ ConsoleDocClass( GuiBitmapCtrl,
GuiBitmapCtrl::GuiBitmapCtrl(void) GuiBitmapCtrl::GuiBitmapCtrl(void)
: mStartPoint( 0, 0 ), : mStartPoint( 0, 0 ),
mColor(ColorI::WHITE), mColor(ColorI::WHITE),
mAngle(0),
mWrap( false ) mWrap( false )
{ {
INIT_ASSET(Bitmap); INIT_ASSET(Bitmap);
@ -84,6 +85,8 @@ void GuiBitmapCtrl::initPersistFields()
addField( "wrap", TypeBool, Offset( mWrap, GuiBitmapCtrl ), addField( "wrap", TypeBool, Offset( mWrap, GuiBitmapCtrl ),
"If true, the bitmap is tiled inside the control rather than stretched to fit." ); "If true, the bitmap is tiled inside the control rather than stretched to fit." );
addField("angle", TypeF32, Offset(mAngle, GuiBitmapCtrl), "rotation");
endGroup( "Bitmap" ); endGroup( "Bitmap" );
Parent::initPersistFields(); Parent::initPersistFields();
@ -187,14 +190,14 @@ void GuiBitmapCtrl::onRender(Point2I offset, const RectI &updateRect)
((texture->mBitmapSize.y*y)+offset.y)-yshift, ((texture->mBitmapSize.y*y)+offset.y)-yshift,
texture->mBitmapSize.x, texture->mBitmapSize.x,
texture->mBitmapSize.y); texture->mBitmapSize.y);
GFX->getDrawUtil()->drawBitmapStretchSR(texture,dstRegion, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear); GFX->getDrawUtil()->drawBitmapStretchSR(texture, dstRegion, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear, mAngle);
} }
} }
else else
{ {
RectI rect(offset, getExtent()); RectI rect(offset, getExtent());
GFX->getDrawUtil()->drawBitmapStretch(mBitmap, rect, GFXBitmapFlip_None, GFXTextureFilterLinear, false); GFX->getDrawUtil()->drawBitmapStretch(mBitmap, rect, GFXBitmapFlip_None, GFXTextureFilterLinear, false, mAngle);
} }
} }

View file

@ -44,6 +44,7 @@ class GuiBitmapCtrl : public GuiControl
Point2I mStartPoint; Point2I mStartPoint;
ColorI mColor; ColorI mColor;
F32 mAngle;
/// If true, bitmap tiles inside control. Otherwise stretches. /// If true, bitmap tiles inside control. Otherwise stretches.
bool mWrap; bool mWrap;

View file

@ -32,6 +32,7 @@ GuiVariableInspector::GuiVariableInspector() : mAutoUpdate(true)
GuiVariableInspector::~GuiVariableInspector() GuiVariableInspector::~GuiVariableInspector()
{ {
} }
IMPLEMENT_CONOBJECT(GuiVariableInspector); IMPLEMENT_CONOBJECT(GuiVariableInspector);
@ -75,7 +76,7 @@ void GuiVariableInspector::update()
for (U32 g = 0; g < mGroups.size(); g++) for (U32 g = 0; g < mGroups.size(); g++)
{ {
if (mGroups[g]->getCaption().equal(mFields[i].mGroup)) if (mGroups[g]->getCaption().equal(mFields[i]->mGroup))
{ {
group = static_cast<GuiInspectorVariableGroup*>(mGroups[g]); group = static_cast<GuiInspectorVariableGroup*>(mGroups[g]);
break; break;
@ -89,14 +90,14 @@ void GuiVariableInspector::update()
group->setHeaderHidden(false); group->setHeaderHidden(false);
group->setCanCollapse(true); group->setCanCollapse(true);
group->mParent = this; group->mParent = this;
group->setCaption(mFields[i].mGroup); group->setCaption(mFields[i]->mGroup);
group->registerObject(); group->registerObject();
mGroups.push_back(group); mGroups.push_back(group);
addObject(group); addObject(group);
} }
group->addField(&mFields[i]); group->addField(mFields[i]);
} }
//And now, cue our update for the groups themselves //And now, cue our update for the groups themselves
@ -148,26 +149,26 @@ void GuiVariableInspector::setGroupsExpanded(bool isExpanded)
void GuiVariableInspector::addField(const char* name, const char* label, const char* typeName, const char* description, void GuiVariableInspector::addField(const char* name, const char* label, const char* typeName, const char* description,
const char* defaultValue, const char* dataValues, const char* callbackName, SimObject* ownerObj) const char* defaultValue, const char* dataValues, const char* callbackName, SimObject* ownerObj)
{ {
VariableField newField; VariableField* newField = new VariableField;
newField.mFieldName = StringTable->insert(name); newField->mFieldName = StringTable->insert(name);
newField.mFieldLabel = StringTable->insert(label, true); newField->mFieldLabel = StringTable->insert(label, true);
newField.mFieldTypeName = StringTable->insert(typeName); newField->mFieldTypeName = StringTable->insert(typeName);
newField.mFieldDescription = StringTable->insert(description); newField->mFieldDescription = StringTable->insert(description);
newField.mDefaultValue = StringTable->insert(defaultValue); newField->mDefaultValue = StringTable->insert(defaultValue);
newField.mDataValues = String(dataValues); newField->mDataValues = String(dataValues);
newField.mGroup = mCurrentGroup; newField->mGroup = mCurrentGroup;
newField.mSetCallbackName = StringTable->insert(callbackName); newField->mSetCallbackName = StringTable->insert(callbackName);
newField.mEnabled = true; newField->mEnabled = true;
newField.mOwnerObject = ownerObj; newField->mOwnerObject = ownerObj;
//establish the field on the ownerObject(if we have one) //establish the field on the ownerObject(if we have one)
//This way, we can let the field hook into the object's field and modify it when changed //This way, we can let the field hook into the object's field and modify it when changed
if (newField.mOwnerObject != nullptr) if (newField->mOwnerObject != nullptr)
{ {
if (!newField.mOwnerObject->isField(newField.mFieldName)) if (!newField->mOwnerObject->isField(newField->mFieldName))
{ {
newField.mOwnerObject->setDataField(newField.mFieldName, NULL, newField.mDefaultValue); newField->mOwnerObject->setDataField(newField->mFieldName, NULL, newField->mDefaultValue);
} }
} }
@ -175,40 +176,40 @@ void GuiVariableInspector::addField(const char* name, const char* label, const c
//find the field type //find the field type
S32 fieldTypeMask = -1; S32 fieldTypeMask = -1;
if (newField.mFieldTypeName == StringTable->insert("int")) if (newField->mFieldTypeName == StringTable->insert("int"))
fieldTypeMask = TypeS32; fieldTypeMask = TypeS32;
else if (newField.mFieldTypeName == StringTable->insert("float")) else if (newField->mFieldTypeName == StringTable->insert("float"))
fieldTypeMask = TypeF32; fieldTypeMask = TypeF32;
else if (newField.mFieldTypeName == StringTable->insert("vector")) else if (newField->mFieldTypeName == StringTable->insert("vector"))
fieldTypeMask = TypePoint3F; fieldTypeMask = TypePoint3F;
else if (newField.mFieldTypeName == StringTable->insert("vector2")) else if (newField->mFieldTypeName == StringTable->insert("vector2"))
fieldTypeMask = TypePoint2F; fieldTypeMask = TypePoint2F;
else if (newField.mFieldTypeName == StringTable->insert("material")) else if (newField->mFieldTypeName == StringTable->insert("material"))
fieldTypeMask = TypeMaterialAssetId; fieldTypeMask = TypeMaterialAssetId;
else if (newField.mFieldTypeName == StringTable->insert("image")) else if (newField->mFieldTypeName == StringTable->insert("image"))
fieldTypeMask = TypeImageAssetId; fieldTypeMask = TypeImageAssetId;
else if (newField.mFieldTypeName == StringTable->insert("shape")) else if (newField->mFieldTypeName == StringTable->insert("shape"))
fieldTypeMask = TypeShapeAssetId; fieldTypeMask = TypeShapeAssetId;
else if (newField.mFieldTypeName == StringTable->insert("bool")) else if (newField->mFieldTypeName == StringTable->insert("bool"))
fieldTypeMask = TypeBool; fieldTypeMask = TypeBool;
else if (newField.mFieldTypeName == StringTable->insert("object")) else if (newField->mFieldTypeName == StringTable->insert("object"))
fieldTypeMask = TypeSimObjectPtr; fieldTypeMask = TypeSimObjectPtr;
else if (newField.mFieldTypeName == StringTable->insert("string")) else if (newField->mFieldTypeName == StringTable->insert("string"))
fieldTypeMask = TypeString; fieldTypeMask = TypeString;
else if (newField.mFieldTypeName == StringTable->insert("colorI")) else if (newField->mFieldTypeName == StringTable->insert("colorI"))
fieldTypeMask = TypeColorI; fieldTypeMask = TypeColorI;
else if (newField.mFieldTypeName == StringTable->insert("colorF")) else if (newField->mFieldTypeName == StringTable->insert("colorF"))
fieldTypeMask = TypeColorF; fieldTypeMask = TypeColorF;
else if (newField.mFieldTypeName == StringTable->insert("ease")) else if (newField->mFieldTypeName == StringTable->insert("ease"))
fieldTypeMask = TypeEaseF; fieldTypeMask = TypeEaseF;
else if (newField.mFieldTypeName == StringTable->insert("command")) else if (newField->mFieldTypeName == StringTable->insert("command"))
fieldTypeMask = TypeCommand; fieldTypeMask = TypeCommand;
else if (newField.mFieldTypeName == StringTable->insert("filename")) else if (newField->mFieldTypeName == StringTable->insert("filename"))
fieldTypeMask = TypeStringFilename; fieldTypeMask = TypeStringFilename;
else else
fieldTypeMask = -1; fieldTypeMask = -1;
newField.mFieldType = fieldTypeMask; newField->mFieldType = fieldTypeMask;
// //
mFields.push_back(newField); mFields.push_back(newField);
@ -226,6 +227,13 @@ void GuiVariableInspector::addCallbackField(const char* name, const char* label,
void GuiVariableInspector::clearFields() void GuiVariableInspector::clearFields()
{ {
mGroups.clear(); mGroups.clear();
// Before clearing the fields, dealloc the memory first
for (U32 iteration = 0; iteration < mFields.size(); ++iteration)
{
delete mFields[iteration];
}
mFields.clear(); mFields.clear();
clear(); clear();
@ -237,9 +245,9 @@ void GuiVariableInspector::setFieldEnabled(const char* name, bool enabled)
String fieldName = name; String fieldName = name;
for (U32 i = 0; i < mFields.size(); i++) for (U32 i = 0; i < mFields.size(); i++)
{ {
if (fieldName.equal(mFields[i].mFieldName, String::NoCase)) if (fieldName.equal(mFields[i]->mFieldName, String::NoCase))
{ {
mFields[i].mEnabled = enabled; mFields[i]->mEnabled = enabled;
update(); update();
return; return;
} }

View file

@ -65,7 +65,7 @@ public:
protected: protected:
Vector<VariableField> mFields; Vector<VariableField*> mFields;
String mCurrentGroup; String mCurrentGroup;

View file

@ -1122,7 +1122,7 @@ void PostEffect::_setupConstants( const SceneRenderState *state )
void PostEffect::_setupTexture( U32 stage, GFXTexHandle &inputTex, const RectI *inTexViewport ) void PostEffect::_setupTexture( U32 stage, GFXTexHandle &inputTex, const RectI *inTexViewport )
{ {
const String &texFilename = mTextureName[ stage ]; const String &texFilename = getTexture( stage );
GFXTexHandle theTex; GFXTexHandle theTex;
NamedTexTarget *namedTarget = NULL; NamedTexTarget *namedTarget = NULL;