Adjustments to save out code when writing fields such that if the TAML writer is marked as not writing defaults, it doesn't. And makes the regular simobject save out not write default values as the default behavior

This commit is contained in:
JeffR 2022-01-31 20:57:57 -06:00
parent 5e1eb80bc1
commit b4e346aa3f
2 changed files with 41 additions and 8 deletions

View file

@ -304,6 +304,10 @@ bool SimObject::writeField(StringTableEntry fieldname, const char* value)
void SimObject::writeFields(Stream &stream, U32 tabStop)
{
// Write static fields.
// Create a default object of the same type
ConsoleObject* defaultConObject = ConsoleObject::create(getClassName());
SimObject* defaultObject = dynamic_cast<SimObject*>(defaultConObject);
const AbstractClassRep::FieldList &list = getFieldList();
@ -332,6 +336,11 @@ void SimObject::writeFields(Stream &stream, U32 tabStop)
if (!writeField(f->pFieldname, valCopy))
continue;
//If the field hasn't been changed from the default value, then don't bother writing it out
const char* defaultValueCheck = defaultObject->getDataField(f->pFieldname, array);
if (dStricmp(defaultValueCheck, valCopy) == 0)
continue;
val = valCopy;
U32 expandedBufferSize = ( nBufferSize * 2 ) + dStrlen(f->pFieldname) + 32;
@ -366,6 +375,9 @@ void SimObject::writeFields(Stream &stream, U32 tabStop)
if(mFieldDictionary && mCanSaveFieldDictionary)
mFieldDictionary->writeFields(this, stream, tabStop);
// Cleanup our created default object
delete defaultConObject;
}
//-----------------------------------------------------------------------------

View file

@ -217,11 +217,6 @@ ImplementEnumType(_TamlFormatMode,
FileStream stream;
if (StringTable->insert("c://.asset.taml") == StringTable->insert(mFilePathBuffer))
{
bool asdfasdf = true;
}
// File opened?
if (!stream.open(mFilePathBuffer, Torque::FS::File::Write))
{
@ -643,6 +638,19 @@ ImplementEnumType(_TamlFormatMode,
// Fetch field count.
const U32 fieldCount = fieldList.size();
ConsoleObject* defaultConObject;
SimObject* defaultObject;
if (!getWriteDefaults())
{
// Create a default object of the same type
defaultConObject = ConsoleObject::create(pSimObject->getClassName());
defaultObject = dynamic_cast<SimObject*>(defaultConObject);
// ***Really*** shouldn't happen
if (!defaultObject)
return;
}
// Iterate fields.
U8 arrayDepth = 0;
TamlCustomNode* currentArrayNode = NULL;
@ -709,9 +717,6 @@ ImplementEnumType(_TamlFormatMode,
if (!pFieldValue)
pFieldValue = StringTable->EmptyString();
if (pField->type == TypeBool)
pFieldValue = dAtob(pFieldValue) ? "true" : "false";
U32 nBufferSize = dStrlen(pFieldValue) + 1;
FrameTemp<char> valueCopy(nBufferSize);
dStrcpy((char *)valueCopy, pFieldValue, nBufferSize);
@ -720,9 +725,19 @@ ImplementEnumType(_TamlFormatMode,
if (!pSimObject->writeField(fieldName, valueCopy))
continue;
if (!getWriteDefaults())
{
//If the field hasn't been changed from the default value, then don't bother writing it out
if (dStricmp(defaultObject->getDataField(fieldName, indexBuffer), pFieldValue) == 0)
continue;
}
// Reassign field value.
pFieldValue = valueCopy;
if (pField->type == TypeBool)
pFieldValue = dAtob(pFieldValue) ? "true" : "false";
// Detect and collapse relative path information
char fnBuf[1024];
if ((S32)pField->type == TypeFilename)
@ -741,6 +756,12 @@ ImplementEnumType(_TamlFormatMode,
}
}
}
if (!getWriteDefaults())
{
// Cleanup our created default object
delete defaultConObject;
}
}
//-----------------------------------------------------------------------------