mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 09:04:38 +00:00
Merge pull request #1595 from Areloch/InspectorArrayAssetFixes
Various fixes pertaining to handling of assets' macros and inspector fields that didn't work with array'd fields
This commit is contained in:
commit
d9db53d0a3
13 changed files with 406 additions and 52 deletions
|
|
@ -198,10 +198,19 @@ GuiControl* GuiInspectorTypeCubemapAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"CubemapAsset\", \"AssetBrowser.changeAsset\", %d, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"CubemapAsset\", \"AssetBrowser.changeAsset\", %d, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
setDataField(StringTable->insert("object"), NULL, String::ToString(mInspector->getInspectObject()).c_str());
|
setDataField(StringTable->insert("object"), NULL, String::ToString(mInspector->getInspectObject()).c_str());
|
||||||
|
|
|
||||||
|
|
@ -262,10 +262,19 @@ GuiControl* GuiInspectorTypeGUIAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"GUIAsset\", \"AssetBrowser.changeAsset\", %d, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"GUIAsset\", \"AssetBrowser.changeAsset\", %d, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
// Create "Open in ShapeEditor" button
|
// Create "Open in ShapeEditor" button
|
||||||
|
|
|
||||||
|
|
@ -484,13 +484,22 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl()
|
||||||
|
|
||||||
if (mInspector->getInspectObject() != nullptr)
|
if (mInspector->getInspectObject() != nullptr)
|
||||||
{
|
{
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);",
|
StringBuilder varNameStr;
|
||||||
mInspector->getIdString(), mCaption);
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");",
|
||||||
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
||||||
|
|
||||||
previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL);
|
previewImage = mInspector->getInspectObject()->getDataField(varNameStr.end().c_str(), NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -150,10 +150,19 @@ GuiControl* GuiInspectorTypeParticleAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ParticleAsset\", \"AssetBrowser.changeAsset\", %d, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ParticleAsset\", \"AssetBrowser.changeAsset\", %d, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
// Create "Open in ShapeEditor" button
|
// Create "Open in ShapeEditor" button
|
||||||
|
|
|
||||||
|
|
@ -807,13 +807,22 @@ GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl()
|
||||||
|
|
||||||
if (mInspector->getInspectObject() != nullptr)
|
if (mInspector->getInspectObject() != nullptr)
|
||||||
{
|
{
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, %s);",
|
StringBuilder varNameStr;
|
||||||
mInspector->getIdString(), mCaption);
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");",
|
||||||
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
||||||
|
|
||||||
previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL);
|
previewImage = mInspector->getInspectObject()->getDataField(varNameStr.end().c_str(), NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -473,10 +473,19 @@ GuiControl* GuiInspectorTypeTerrainAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"TerrainAsset\", \"AssetBrowser.changeAsset\", %s, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"TerrainAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,10 @@ StringTableEntry TerrainMaterialAsset::smNoTerrainMaterialAssetFallback = NULL;
|
||||||
|
|
||||||
IMPLEMENT_CONOBJECT(TerrainMaterialAsset);
|
IMPLEMENT_CONOBJECT(TerrainMaterialAsset);
|
||||||
|
|
||||||
ConsoleType(TerrainMaterialAssetPtr, TypeTerrainMaterialAssetPtr, TerrainMaterialAsset, ASSET_ID_FIELD_PREFIX)
|
IMPLEMENT_STRUCT(AssetPtr<TerrainMaterialAsset>, AssetPtrTerrainMaterialAsset, , "")
|
||||||
|
END_IMPLEMENT_STRUCT
|
||||||
|
|
||||||
|
ConsoleType(TerrainMaterialAssetPtr, TypeTerrainMaterialAssetPtr, AssetPtr<TerrainMaterialAsset>, ASSET_ID_FIELD_PREFIX)
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -511,10 +514,19 @@ GuiControl* GuiInspectorTypeTerrainMaterialAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"TerrainMaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"TerrainMaterialAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString());
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,183 @@ protected:
|
||||||
static const char* getScriptFile(void* obj, const char* data) { return static_cast<TerrainMaterialAsset*>(obj)->getScriptFile(); }
|
static const char* getScriptFile(void* obj, const char* data) { return static_cast<TerrainMaterialAsset*>(obj)->getScriptFile(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
DefineConsoleType(TypeTerrainMaterialAssetPtr, TerrainMaterialAsset)
|
DECLARE_STRUCT(AssetPtr<TerrainMaterialAsset>)
|
||||||
|
DefineConsoleType(TypeTerrainMaterialAssetPtr, AssetPtr<TerrainMaterialAsset>)
|
||||||
|
|
||||||
|
#define DECLARE_TERRAINMATERIALASSET(className, name) \
|
||||||
|
private: \
|
||||||
|
AssetPtr<TerrainMaterialAsset> m##name##Asset; \
|
||||||
|
StringTableEntry m##name##File = {StringTable->EmptyString() }; \
|
||||||
|
public: \
|
||||||
|
void _set##name(StringTableEntry _in){ \
|
||||||
|
if (m##name##Asset.getAssetId() == _in) \
|
||||||
|
return; \
|
||||||
|
if(_in == NULL || !String::compare(_in,StringTable->EmptyString())) \
|
||||||
|
{ \
|
||||||
|
m##name##Asset = NULL; \
|
||||||
|
m##name##File = ""; \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
if (!AssetDatabase.isDeclaredAsset(_in)) \
|
||||||
|
{ \
|
||||||
|
StringTableEntry terMatAssetId = StringTable->EmptyString(); \
|
||||||
|
AssetQuery query; \
|
||||||
|
S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); \
|
||||||
|
if (foundAssetcount != 0) \
|
||||||
|
{ \
|
||||||
|
terMatAssetId = query.mAssetList[0]; \
|
||||||
|
} \
|
||||||
|
m##name##Asset = terMatAssetId; \
|
||||||
|
m##name##File = _in; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
m##name##Asset = _in; \
|
||||||
|
m##name##File = get##name##File(); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
inline StringTableEntry _get##name##AssetId() const { return m##name##Asset.getAssetId(); } \
|
||||||
|
TerrainMaterial* get##name() { if (m##name##Asset.notNull()) return m##name##Asset->getMaterialDefinition(); else return NULL; } \
|
||||||
|
AssetPtr<TerrainMaterialAsset> get##name##Asset() { return m##name##Asset; } \
|
||||||
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data)); return false;}\
|
||||||
|
StringTableEntry get##name##File() { return m##name##Asset.notNull() ? m##name##Asset->getScriptFile() : ""; }
|
||||||
|
|
||||||
|
#define DECLARE_TERRAINMATERIALASSET_NET(className, name, mask) \
|
||||||
|
private: \
|
||||||
|
AssetPtr<TerrainMaterialAsset> m##name##Asset; \
|
||||||
|
StringTableEntry m##name##File = {StringTable->EmptyString() }; \
|
||||||
|
public: \
|
||||||
|
void _set##name(StringTableEntry _in){ \
|
||||||
|
if (m##name##Asset.getAssetId() == _in) \
|
||||||
|
return; \
|
||||||
|
if(_in == NULL || !String::compare(_in,StringTable->EmptyString())) \
|
||||||
|
{ \
|
||||||
|
m##name##Asset = NULL; \
|
||||||
|
m##name##File = ""; \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
if (!AssetDatabase.isDeclaredAsset(_in)) \
|
||||||
|
{ \
|
||||||
|
StringTableEntry terMatAssetId = StringTable->EmptyString(); \
|
||||||
|
AssetQuery query; \
|
||||||
|
S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); \
|
||||||
|
if (foundAssetcount != 0) \
|
||||||
|
{ \
|
||||||
|
terMatAssetId = query.mAssetList[0]; \
|
||||||
|
} \
|
||||||
|
m##name##Asset = terMatAssetId; \
|
||||||
|
m##name##File = _in; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
m##name##Asset = _in; \
|
||||||
|
m##name##File = get##name##File(); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
inline StringTableEntry _get##name##AssetId() const { return m##name##Asset.getAssetId(); } \
|
||||||
|
TerrainMaterial* get##name() { if (m##name##Asset.notNull()) return m##name##Asset->getMaterialDefinition(); else return NULL; } \
|
||||||
|
AssetPtr<TerrainMaterialAsset> get##name##Asset() { return m##name##Asset; } \
|
||||||
|
static bool _set##name##Data(void* obj, const char* index, const char* data)\
|
||||||
|
{\
|
||||||
|
static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data));\
|
||||||
|
static_cast<className*>(obj)->setMaskBits(mask); \
|
||||||
|
return false;\
|
||||||
|
}\
|
||||||
|
StringTableEntry get##name##File() { return m##name##Asset.notNull() ? m##name##Asset->getScriptFile() : ""; }
|
||||||
|
|
||||||
|
#define INITPERSISTFIELD_TERRAINMATERIALASSET(name, consoleClass, docs) \
|
||||||
|
addProtectedField(assetText(name, Asset), TypeTerrainMaterialAssetPtr, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.));\
|
||||||
|
addProtectedField(assetText(name, File), TypeFilename, Offset(m##name##File, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.), AbstractClassRep::FIELD_HideInInspectors);
|
||||||
|
|
||||||
|
#define DECLARE_TERRAINMATERIALASSET_ARRAY(className, name, max) \
|
||||||
|
private: \
|
||||||
|
AssetPtr<TerrainMaterialAsset> m##name##Asset[max]; \
|
||||||
|
StringTableEntry m##name##File[max] = {StringTable->EmptyString() }; \
|
||||||
|
public: \
|
||||||
|
void _set##name(StringTableEntry _in, const U32& index){ \
|
||||||
|
if (m##name##Asset[index].getAssetId() == _in) \
|
||||||
|
return; \
|
||||||
|
if(_in == NULL || !String::compare(_in,StringTable->EmptyString())) \
|
||||||
|
{ \
|
||||||
|
m##name##Asset[index] = NULL; \
|
||||||
|
m##name##File[index] = ""; \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
if (!AssetDatabase.isDeclaredAsset(_in)) \
|
||||||
|
{ \
|
||||||
|
StringTableEntry terMatAssetId = StringTable->EmptyString(); \
|
||||||
|
AssetQuery query; \
|
||||||
|
S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); \
|
||||||
|
if (foundAssetcount != 0) \
|
||||||
|
{ \
|
||||||
|
terMatAssetId = query.mAssetList[0]; \
|
||||||
|
} \
|
||||||
|
m##name##Asset[index] = terMatAssetId; \
|
||||||
|
m##name##File[index] = _in; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
m##name##Asset[index] = _in; \
|
||||||
|
m##name##File[index] = get##name##File(index); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
inline StringTableEntry _get##name##AssetId(const U32& index) const { return m##name##Asset[index].getAssetId(); } \
|
||||||
|
TerrainMaterial* get##name(const U32& index) { if (m##name##Asset[index].notNull()) return m##name##Asset[index]->getMaterialDefinition(); else return NULL; } \
|
||||||
|
AssetPtr<TerrainMaterialAsset> get##name##Asset(const U32& index) { return m##name##Asset[index]; } \
|
||||||
|
static bool _set##name##Data(void* obj, const char* index, const char* data) { static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data), dAtoi(index)); return false;}\
|
||||||
|
StringTableEntry get##name##File(const U32& idx) { return m##name##Asset[idx].notNull() ? m##name##Asset[idx]->getScriptFile() : ""; }
|
||||||
|
|
||||||
|
#define DECLARE_TERRAINMATERIALASSET_NET_ARRAY(className, name, max, mask) \
|
||||||
|
private: \
|
||||||
|
AssetPtr<TerrainMaterialAsset> m##name##Asset[max]; \
|
||||||
|
StringTableEntry m##name##File[max] = {StringTable->EmptyString() }; \
|
||||||
|
public: \
|
||||||
|
void _set##name(StringTableEntry _in, const U32& index){ \
|
||||||
|
if (m##name##Asset[index].getAssetId() == _in) \
|
||||||
|
return; \
|
||||||
|
if(_in == NULL || !String::compare(_in,StringTable->EmptyString())) \
|
||||||
|
{ \
|
||||||
|
m##name##Asset[index] = NULL; \
|
||||||
|
m##name##File[index] = ""; \
|
||||||
|
return; \
|
||||||
|
} \
|
||||||
|
if (!AssetDatabase.isDeclaredAsset(_in)) \
|
||||||
|
{ \
|
||||||
|
StringTableEntry terMatAssetId = StringTable->EmptyString(); \
|
||||||
|
AssetQuery query; \
|
||||||
|
S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); \
|
||||||
|
if (foundAssetcount != 0) \
|
||||||
|
{ \
|
||||||
|
terMatAssetId = query.mAssetList[0]; \
|
||||||
|
} \
|
||||||
|
m##name##Asset[index] = terMatAssetId; \
|
||||||
|
m##name##File[index] = _in; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
m##name##Asset[index] = _in; \
|
||||||
|
m##name##File[index] = get##name##File(index); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
inline StringTableEntry _get##name##AssetId(const U32& index) const { return m##name##Asset[index].getAssetId(); } \
|
||||||
|
TerrainMaterial* get##name(const U32& index) { if (m##name##Asset[index].notNull()) return m##name##Asset[index]->getMaterialDefinition(); else return NULL; } \
|
||||||
|
AssetPtr<TerrainMaterialAsset> get##name##Asset(const U32& index) { return m##name##Asset[index]; } \
|
||||||
|
static bool _set##name##Data(void* obj, const char* index, const char* data)\
|
||||||
|
{\
|
||||||
|
static_cast<className*>(obj)->_set##name(_getStringTable()->insert(data), dAtoi(index));\
|
||||||
|
static_cast<className*>(obj)->setMaskBits(mask); \
|
||||||
|
return false;\
|
||||||
|
}\
|
||||||
|
StringTableEntry get##name##File(const U32& idx) { return m##name##Asset[idx].notNull() ? m##name##Asset[idx]->getScriptFile() : ""; }
|
||||||
|
|
||||||
|
#define INITPERSISTFIELD_TERRAINMATERIALASSET_ARRAY(name, arraySize, consoleClass, docs) \
|
||||||
|
addProtectedField(assetText(name, Asset), TypeTerrainMaterialAssetPtr, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.));\
|
||||||
|
addProtectedField(assetText(name, File), TypeFilename, Offset(m##name##File, consoleClass), _set##name##Data, &defaultProtectedGetFn, arraySize, assetDoc(name, asset docs.), AbstractClassRep::FIELD_HideInInspectors);
|
||||||
|
|
||||||
DefineConsoleType(TypeTerrainMaterialAssetId, String)
|
DefineConsoleType(TypeTerrainMaterialAssetId, String)
|
||||||
#ifdef TORQUE_TOOLS
|
#ifdef TORQUE_TOOLS
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -62,14 +62,26 @@ if (m##name##AssetId != StringTable->EmptyString())\
|
||||||
if (stream->writeFlag(m##name##Asset.notNull()))\
|
if (stream->writeFlag(m##name##Asset.notNull()))\
|
||||||
{\
|
{\
|
||||||
stream->writeString(m##name##Asset.getAssetId());\
|
stream->writeString(m##name##Asset.getAssetId());\
|
||||||
}
|
}\
|
||||||
|
else if (stream->writeFlag(m##name##File != StringTable->EmptyString()))\
|
||||||
|
{\
|
||||||
|
stream->writeString(m##name##File);\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - datablock
|
//network recieve - datablock
|
||||||
#define UNPACKDATA_ASSET_REFACTOR(name)\
|
#define UNPACKDATA_ASSET_REFACTOR(name)\
|
||||||
if (stream->readFlag())\
|
if (stream->readFlag())\
|
||||||
{\
|
{\
|
||||||
_set##name(stream->readSTString());\
|
_set##name(stream->readSTString());\
|
||||||
}
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
_set##name(stream->readSTString());\
|
||||||
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString());\
|
||||||
|
}\
|
||||||
|
|
||||||
//network send - object-instance
|
//network send - object-instance
|
||||||
#define PACK_ASSET_REFACTOR(netconn, name)\
|
#define PACK_ASSET_REFACTOR(netconn, name)\
|
||||||
|
|
@ -77,14 +89,27 @@ if (m##name##AssetId != StringTable->EmptyString())\
|
||||||
{\
|
{\
|
||||||
NetStringHandle assetIdStr = m##name##Asset.getAssetId();\
|
NetStringHandle assetIdStr = m##name##Asset.getAssetId();\
|
||||||
netconn->packNetStringHandleU(stream, assetIdStr);\
|
netconn->packNetStringHandleU(stream, assetIdStr);\
|
||||||
}
|
}\
|
||||||
|
else if (stream->writeFlag(m##name##File != StringTable->EmptyString()))\
|
||||||
|
{\
|
||||||
|
NetStringHandle fileStr = m##name##File;\
|
||||||
|
netconn->packNetStringHandleU(stream, fileStr);\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - object-instance
|
//network recieve - object-instance
|
||||||
#define UNPACK_ASSET_REFACTOR(netconn, name)\
|
#define UNPACK_ASSET_REFACTOR(netconn, name)\
|
||||||
if (stream->readFlag())\
|
if (stream->readFlag())\
|
||||||
{\
|
{\
|
||||||
_set##name(netconn->unpackNetStringHandleU(stream).getString());\
|
_set##name(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
}
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
_set##name(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString());\
|
||||||
|
}\
|
||||||
|
|
||||||
//network send - datablock
|
//network send - datablock
|
||||||
#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
#define PACKDATA_ASSET_ARRAY_REFACTOR(name, max)\
|
||||||
|
|
@ -94,6 +119,10 @@ for (U32 i = 0; i < max; i++)\
|
||||||
{\
|
{\
|
||||||
stream->writeString(m##name##Asset[i].getAssetId()); \
|
stream->writeString(m##name##Asset[i].getAssetId()); \
|
||||||
}\
|
}\
|
||||||
|
else if (stream->writeFlag(m##name##File[i] != StringTable->EmptyString()))\
|
||||||
|
{\
|
||||||
|
stream->writeString(m##name##File[i]);\
|
||||||
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
//network recieve - datablock
|
//network recieve - datablock
|
||||||
|
|
@ -104,6 +133,14 @@ for (U32 i = 0; i < max; i++)\
|
||||||
{\
|
{\
|
||||||
m##name##Asset[i] = stream->readSTString();\
|
m##name##Asset[i] = stream->readSTString();\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
_set##name(stream->readSTString(), i);\
|
||||||
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString(), i);\
|
||||||
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
//network send - object-instance
|
//network send - object-instance
|
||||||
|
|
@ -115,6 +152,11 @@ for (U32 i = 0; i < max; i++)\
|
||||||
NetStringHandle assetIdStr = m##name##Asset[i].getAssetId();\
|
NetStringHandle assetIdStr = m##name##Asset[i].getAssetId();\
|
||||||
netconn->packNetStringHandleU(stream, assetIdStr);\
|
netconn->packNetStringHandleU(stream, assetIdStr);\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->writeFlag(m##name##File[i] != StringTable->EmptyString()))\
|
||||||
|
{\
|
||||||
|
NetStringHandle fileStr = m##name##File[i];\
|
||||||
|
netconn->packNetStringHandleU(stream, fileStr);\
|
||||||
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
//network recieve - object-instance
|
//network recieve - object-instance
|
||||||
|
|
@ -125,6 +167,14 @@ for (U32 i = 0; i < max; i++)\
|
||||||
{\
|
{\
|
||||||
m##name##Asset[i] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
m##name##Asset[i] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->insert(netconn->unpackNetStringHandleU(stream).getString()), i);\
|
||||||
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString(), i);\
|
||||||
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEF_ASSET_BINDS_REFACTOR(className,name)\
|
#define DEF_ASSET_BINDS_REFACTOR(className,name)\
|
||||||
|
|
@ -168,8 +218,10 @@ DefineEngineMethod(className, set##name, void, (const char* assetName), , assetT
|
||||||
{\
|
{\
|
||||||
stream->writeString(m##name##Asset.getAssetId());\
|
stream->writeString(m##name##Asset.getAssetId());\
|
||||||
}\
|
}\
|
||||||
else\
|
else if(stream->writeFlag(m##name##Name != StringTable->EmptyString()))\
|
||||||
stream->writeString(m##name##Name);
|
{\
|
||||||
|
stream->writeString(m##name##Name);\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - datablock
|
//network recieve - datablock
|
||||||
#define UNPACKDATA_ASSET(name)\
|
#define UNPACKDATA_ASSET(name)\
|
||||||
|
|
@ -178,11 +230,15 @@ DefineEngineMethod(className, set##name, void, (const char* assetName), , assetT
|
||||||
m##name##AssetId = stream->readSTString();\
|
m##name##AssetId = stream->readSTString();\
|
||||||
_set##name(m##name##AssetId);\
|
_set##name(m##name##AssetId);\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->readFlag())\
|
||||||
{\
|
{\
|
||||||
m##name##Name = stream->readSTString();\
|
m##name##Name = stream->readSTString();\
|
||||||
_set##name(m##name##Name);\
|
_set##name(m##name##Name);\
|
||||||
}
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString());\
|
||||||
|
}\
|
||||||
|
|
||||||
//network send - object-instance
|
//network send - object-instance
|
||||||
#define PACK_ASSET(netconn, name)\
|
#define PACK_ASSET(netconn, name)\
|
||||||
|
|
@ -191,8 +247,11 @@ DefineEngineMethod(className, set##name, void, (const char* assetName), , assetT
|
||||||
NetStringHandle assetIdStr = m##name##Asset.getAssetId();\
|
NetStringHandle assetIdStr = m##name##Asset.getAssetId();\
|
||||||
netconn->packNetStringHandleU(stream, assetIdStr);\
|
netconn->packNetStringHandleU(stream, assetIdStr);\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->writeFlag(m##name##Name != StringTable->EmptyString()))\
|
||||||
stream->writeString(m##name##Name);
|
{\
|
||||||
|
NetStringHandle nameStr = m##name##Name;\
|
||||||
|
netconn->packNetStringHandleU(stream, nameStr);\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - object-instance
|
//network recieve - object-instance
|
||||||
#define UNPACK_ASSET(netconn, name)\
|
#define UNPACK_ASSET(netconn, name)\
|
||||||
|
|
@ -201,8 +260,14 @@ DefineEngineMethod(className, set##name, void, (const char* assetName), , assetT
|
||||||
m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
m##name##AssetId = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
_set##name(m##name##AssetId);\
|
_set##name(m##name##AssetId);\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->insert(netconn->unpackNetStringHandleU(stream).getString()));\
|
||||||
|
}\
|
||||||
else\
|
else\
|
||||||
m##name##Name = stream->readSTString();
|
{\
|
||||||
|
_set##name(StringTable->EmptyString()); \
|
||||||
|
}\
|
||||||
|
|
||||||
//script methods for class.asset acces
|
//script methods for class.asset acces
|
||||||
//declare general get<entry>, get<entry>Asset and set<entry> methods
|
//declare general get<entry>, get<entry>Asset and set<entry> methods
|
||||||
|
|
@ -287,8 +352,10 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
|
||||||
{\
|
{\
|
||||||
stream->writeString(m##name##Asset[index].getAssetId());\
|
stream->writeString(m##name##Asset[index].getAssetId());\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->writeFlag(m##name##Name[index] != StringTable->EmptyString()))\
|
||||||
stream->writeString(m##name##Name[index]);
|
{\
|
||||||
|
stream->writeString(m##name##Name[index].getAssetId());\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - datablock
|
//network recieve - datablock
|
||||||
#define UNPACKDATA_ASSET_ARRAY(name, index)\
|
#define UNPACKDATA_ASSET_ARRAY(name, index)\
|
||||||
|
|
@ -297,11 +364,15 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
|
||||||
m##name##AssetId[index] = stream->readSTString();\
|
m##name##AssetId[index] = stream->readSTString();\
|
||||||
_set##name(m##name##AssetId[index], index);\
|
_set##name(m##name##AssetId[index], index);\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->readFlag())\
|
||||||
{\
|
{\
|
||||||
m##name##Name[index] = stream->readSTString();\
|
m##name##Name[index] = stream->readSTString();\
|
||||||
_set##name(m##name##Name[index], index);\
|
_set##name(m##name##Name[index], index);\
|
||||||
}
|
}\
|
||||||
|
else\
|
||||||
|
{\
|
||||||
|
_set##name(StringTable->EmptyString());\
|
||||||
|
}\
|
||||||
|
|
||||||
//network send - object-instance
|
//network send - object-instance
|
||||||
#define PACK_ASSET_ARRAY(netconn, name, index)\
|
#define PACK_ASSET_ARRAY(netconn, name, index)\
|
||||||
|
|
@ -310,8 +381,11 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
|
||||||
NetStringHandle assetIdStr = m##name##Asset[index].getAssetId();\
|
NetStringHandle assetIdStr = m##name##Asset[index].getAssetId();\
|
||||||
netconn->packNetStringHandleU(stream, assetIdStr);\
|
netconn->packNetStringHandleU(stream, assetIdStr);\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->writeFlag(m##name##Name[index] != StringTable->EmptyString()))\
|
||||||
stream->writeString(m##name##Name[index]);
|
{\
|
||||||
|
NetStringHandle fileStr = m##name##Name[index].getAssetId();\
|
||||||
|
netconn->packNetStringHandleU(stream, fileStr);\
|
||||||
|
}\
|
||||||
|
|
||||||
//network recieve - object-instance
|
//network recieve - object-instance
|
||||||
#define UNPACK_ASSET_ARRAY(netconn, name, index)\
|
#define UNPACK_ASSET_ARRAY(netconn, name, index)\
|
||||||
|
|
@ -320,10 +394,14 @@ if (m##name##AssetId[index] != StringTable->EmptyString())\
|
||||||
m##name##AssetId[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
m##name##AssetId[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
_set##name(m##name##AssetId[index], index);\
|
_set##name(m##name##AssetId[index], index);\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
m##name##Name[index] = StringTable->insert(netconn->unpackNetStringHandleU(stream).getString());\
|
||||||
|
_set##name(m##name##Name[index], index);\
|
||||||
|
}\
|
||||||
else\
|
else\
|
||||||
{\
|
{\
|
||||||
m##name##Name[index] = stream->readSTString();\
|
_set##name(StringTable->EmptyString(), index);\
|
||||||
_set##name(m##name##Name[index], index);\
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//script methods for class.asset acces
|
//script methods for class.asset acces
|
||||||
|
|
@ -363,8 +441,12 @@ DefineEngineMethod(className, set##name, bool, (const char* assetName, S32 index
|
||||||
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
||||||
Con::printf("pack: %s = %s",enumString, m##name##AssetId[index]);\
|
Con::printf("pack: %s = %s",enumString, m##name##AssetId[index]);\
|
||||||
}\
|
}\
|
||||||
else\
|
else if (stream->writeFlag(m##name##File[index] != StringTable->EmptyString()))\
|
||||||
stream->writeString(m##name##Name[index]);\
|
{\
|
||||||
|
stream->writeString(m##name##File[index]);\
|
||||||
|
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
||||||
|
Con::printf("pack: %s = %s",enumString, m##name##File[index]);\
|
||||||
|
}\
|
||||||
}
|
}
|
||||||
//network recieve - object-instance
|
//network recieve - object-instance
|
||||||
#define UNPACKDATA_ASSET_ARRAY_ENUMED(name, enumType, index )\
|
#define UNPACKDATA_ASSET_ARRAY_ENUMED(name, enumType, index )\
|
||||||
|
|
@ -376,10 +458,16 @@ DefineEngineMethod(className, set##name, bool, (const char* assetName, S32 index
|
||||||
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
||||||
Con::printf("unpack: %s = %s",enumString, m##name##AssetId[index]);\
|
Con::printf("unpack: %s = %s",enumString, m##name##AssetId[index]);\
|
||||||
}\
|
}\
|
||||||
|
else if (stream->readFlag())\
|
||||||
|
{\
|
||||||
|
m##name##File[index] = stream->readSTString();\
|
||||||
|
_set##name(m##name##File[index], index);\
|
||||||
|
const char* enumString = castConsoleTypeToString(static_cast<enumType>(index));\
|
||||||
|
Con::printf("unpack: %s = %s",enumString, m##name##AssetId[index]);\
|
||||||
|
}\
|
||||||
else\
|
else\
|
||||||
{\
|
{\
|
||||||
m##name##Name[index] = stream->readSTString();\
|
_set##name(StringTable->EmptyString(), index);\
|
||||||
_set##name(m##name##AssetId[index], index);\
|
|
||||||
}\
|
}\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,10 +184,19 @@ GuiControl* GuiInspectorTypeStateMachineAssetPtr::constructEditControl()
|
||||||
if (retCtrl == NULL)
|
if (retCtrl == NULL)
|
||||||
return retCtrl;
|
return retCtrl;
|
||||||
|
|
||||||
|
StringBuilder varNameStr;
|
||||||
|
varNameStr.append(mCaption);
|
||||||
|
if (mFieldArrayIndex != nullptr)
|
||||||
|
{
|
||||||
|
varNameStr.append("[");
|
||||||
|
varNameStr.append(mFieldArrayIndex);
|
||||||
|
varNameStr.append("]");
|
||||||
|
}
|
||||||
|
|
||||||
// Change filespec
|
// Change filespec
|
||||||
char szBuffer[512];
|
char szBuffer[512];
|
||||||
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"StateMachineAsset\", \"AssetBrowser.changeAsset\", %d, %s);",
|
dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"StateMachineAsset\", \"AssetBrowser.changeAsset\", %d, \"%s\");",
|
||||||
mInspector->getIdString(), mCaption);
|
mInspector->getIdString(), varNameStr.end().c_str());
|
||||||
mBrowseButton->setField("Command", szBuffer);
|
mBrowseButton->setField("Command", szBuffer);
|
||||||
|
|
||||||
// Create "Open in ShapeEditor" button
|
// Create "Open in ShapeEditor" button
|
||||||
|
|
|
||||||
|
|
@ -510,7 +510,12 @@ GroundCover::GroundCover()
|
||||||
mMinElevation[i] = -99999.0f;
|
mMinElevation[i] = -99999.0f;
|
||||||
mMaxElevation[i] = 99999.0f;
|
mMaxElevation[i] = 99999.0f;
|
||||||
|
|
||||||
mLayer[i] = StringTable->EmptyString();
|
mLayerAsset[i] = nullptr;
|
||||||
|
mLayerFile[i] = StringTable->EmptyString();
|
||||||
|
|
||||||
|
mShapeAsset[i] = nullptr;
|
||||||
|
mShapeFile[i] = StringTable->EmptyString();
|
||||||
|
|
||||||
mInvertLayer[i] = false;
|
mInvertLayer[i] = false;
|
||||||
|
|
||||||
mMinClumpCount[i] = 1;
|
mMinClumpCount[i] = 1;
|
||||||
|
|
@ -565,7 +570,10 @@ void GroundCover::initPersistFields()
|
||||||
|
|
||||||
INITPERSISTFIELD_SHAPEASSET_ARRAY_REFACTOR(Shape, MAX_COVERTYPES, GroundCover, "The cover shape. [Optional]");
|
INITPERSISTFIELD_SHAPEASSET_ARRAY_REFACTOR(Shape, MAX_COVERTYPES, GroundCover, "The cover shape. [Optional]");
|
||||||
|
|
||||||
addField( "layer", TypeTerrainMaterialAssetId, Offset( mLayer, GroundCover ), MAX_COVERTYPES, "Terrain material assetId to limit coverage to, or blank to not limit." );
|
INITPERSISTFIELD_TERRAINMATERIALASSET_ARRAY(Layer, MAX_COVERTYPES, GroundCover, "Terrain material assetId to limit coverage to, or blank to not limit.");
|
||||||
|
|
||||||
|
//Legacy field
|
||||||
|
addProtectedField("layer", TypeTerrainMaterialAssetPtr, Offset(mLayerAsset, GroundCover), &_setLayerData, &defaultProtectedGetFn, MAX_COVERTYPES, "Terrain material assetId to limit coverage to, or blank to not limit.", AbstractClassRep::FIELD_HideInInspectors);
|
||||||
|
|
||||||
addField( "invertLayer", TypeBool, Offset( mInvertLayer, GroundCover ), MAX_COVERTYPES, "Indicates that the terrain material index given in 'layer' is an exclusion mask." );
|
addField( "invertLayer", TypeBool, Offset( mInvertLayer, GroundCover ), MAX_COVERTYPES, "Indicates that the terrain material index given in 'layer' is an exclusion mask." );
|
||||||
|
|
||||||
|
|
@ -754,7 +762,6 @@ U32 GroundCover::packUpdate( NetConnection *connection, U32 mask, BitStream *str
|
||||||
stream->write( mMinElevation[i] );
|
stream->write( mMinElevation[i] );
|
||||||
stream->write( mMaxElevation[i] );
|
stream->write( mMaxElevation[i] );
|
||||||
|
|
||||||
stream->writeString( mLayer[i] );
|
|
||||||
stream->writeFlag( mInvertLayer[i] );
|
stream->writeFlag( mInvertLayer[i] );
|
||||||
|
|
||||||
stream->write( mMinClumpCount[i] );
|
stream->write( mMinClumpCount[i] );
|
||||||
|
|
@ -768,6 +775,7 @@ U32 GroundCover::packUpdate( NetConnection *connection, U32 mask, BitStream *str
|
||||||
stream->write( mBillboardRects[i].extent.y );
|
stream->write( mBillboardRects[i].extent.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PACK_ASSET_ARRAY_REFACTOR(connection, Layer, MAX_COVERTYPES)
|
||||||
PACK_ASSET_ARRAY_REFACTOR(connection, Shape, MAX_COVERTYPES)
|
PACK_ASSET_ARRAY_REFACTOR(connection, Shape, MAX_COVERTYPES)
|
||||||
|
|
||||||
stream->writeFlag( mDebugRenderCells );
|
stream->writeFlag( mDebugRenderCells );
|
||||||
|
|
@ -825,7 +833,6 @@ void GroundCover::unpackUpdate( NetConnection *connection, BitStream *stream )
|
||||||
stream->read( &mMinElevation[i] );
|
stream->read( &mMinElevation[i] );
|
||||||
stream->read( &mMaxElevation[i] );
|
stream->read( &mMaxElevation[i] );
|
||||||
|
|
||||||
mLayer[i] = stream->readSTString();
|
|
||||||
mInvertLayer[i] = stream->readFlag();
|
mInvertLayer[i] = stream->readFlag();
|
||||||
|
|
||||||
stream->read( &mMinClumpCount[i] );
|
stream->read( &mMinClumpCount[i] );
|
||||||
|
|
@ -839,6 +846,8 @@ void GroundCover::unpackUpdate( NetConnection *connection, BitStream *stream )
|
||||||
stream->read( &mBillboardRects[i].extent.y );
|
stream->read( &mBillboardRects[i].extent.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UNPACK_ASSET_ARRAY_REFACTOR(connection, Layer, MAX_COVERTYPES)
|
||||||
|
|
||||||
UNPACK_ASSET_ARRAY_REFACTOR(connection, Shape, MAX_COVERTYPES)
|
UNPACK_ASSET_ARRAY_REFACTOR(connection, Shape, MAX_COVERTYPES)
|
||||||
|
|
||||||
mDebugRenderCells = stream->readFlag();
|
mDebugRenderCells = stream->readFlag();
|
||||||
|
|
@ -1181,7 +1190,9 @@ GroundCoverCell* GroundCover::_generateCell( const Point2I& index,
|
||||||
const Box3F typeShapeBounds = typeIsShape ? mShapeInstances[ type ]->getShape()->mBounds : Box3F();
|
const Box3F typeShapeBounds = typeIsShape ? mShapeInstances[ type ]->getShape()->mBounds : Box3F();
|
||||||
const F32 typeWindScale = mWindScale[type];
|
const F32 typeWindScale = mWindScale[type];
|
||||||
|
|
||||||
StringTableEntry typeLayer = mLayer[type];
|
StringTableEntry typeLayer = StringTable->EmptyString();
|
||||||
|
if (mLayerAsset[type].notNull())
|
||||||
|
typeLayer = mLayerAsset[type]->getAssetId();
|
||||||
const bool typeInvertLayer = mInvertLayer[type];
|
const bool typeInvertLayer = mInvertLayer[type];
|
||||||
|
|
||||||
// We can set this once here... all the placements for this are the same.
|
// We can set this once here... all the placements for this are the same.
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,12 @@
|
||||||
#ifndef _SHADERFEATURE_H_
|
#ifndef _SHADERFEATURE_H_
|
||||||
#include "shaderGen/shaderFeature.h"
|
#include "shaderGen/shaderFeature.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef SHAPE_ASSET_H
|
||||||
#include "T3D/assets/ShapeAsset.h"
|
#include "T3D/assets/ShapeAsset.h"
|
||||||
|
#endif
|
||||||
|
#ifndef TERRAINMATERIALASSET_H
|
||||||
|
#include "T3D/assets/TerrainMaterialAsset.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
class TerrainBlock;
|
class TerrainBlock;
|
||||||
class GroundCoverCell;
|
class GroundCoverCell;
|
||||||
|
|
@ -315,7 +319,7 @@ protected:
|
||||||
|
|
||||||
/// Terrain material assetId to limit coverage to, or
|
/// Terrain material assetId to limit coverage to, or
|
||||||
/// left empty to cover entire terrain.
|
/// left empty to cover entire terrain.
|
||||||
StringTableEntry mLayer[MAX_COVERTYPES];
|
DECLARE_TERRAINMATERIALASSET_NET_ARRAY(GroundCover, Layer, MAX_COVERTYPES, -1)
|
||||||
|
|
||||||
/// Inverts the data layer test making the
|
/// Inverts the data layer test making the
|
||||||
/// layer an exclusion mask.
|
/// layer an exclusion mask.
|
||||||
|
|
|
||||||
|
|
@ -1183,7 +1183,7 @@ function AssetBrowser::changeAsset(%this)
|
||||||
if(%inspectorObject.getNumInspectObjects() != 0)
|
if(%inspectorObject.getNumInspectObjects() != 0)
|
||||||
{
|
{
|
||||||
%targetObject = %inspectorObject.getInspectObject();
|
%targetObject = %inspectorObject.getInspectObject();
|
||||||
%inspectorObject.setObjectField(%this.fieldTargetName, %this.selectedAsset);
|
%cmd = %targetObject @ "." @ %this.fieldTargetName @ "=\"" @ %this.selectedAsset @ "\";";
|
||||||
}
|
}
|
||||||
else if(startsWith(%this.fieldTargetName, "$"))
|
else if(startsWith(%this.fieldTargetName, "$"))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue