Shifts handling of material and terrain material definitions to be written into the asset definition taml file instead of having an extra loose file

Also updates importers to correctly handle this change
Adds ability for taml XML serialization to properly assign array'd fields
Adds 'inheritFrom' field to simobjects for when objects with parent objects are serialized
AssetBase how inherits from SimGroup so it can have objects like material definitions embedded in them for save/load in the taml definition file
Updated loading/handling logic in terrain material asset to be more similar to regular material assets
This commit is contained in:
JeffR 2022-01-30 11:50:16 -06:00
parent 656475deaf
commit 630285def6
20 changed files with 791 additions and 318 deletions

View file

@ -77,6 +77,7 @@ SimObject::SimObject()
mObjectName = NULL;
mOriginalName = NULL;
mInternalName = NULL;
mInheritFrom = NULL;
nextNameObject = nullptr;
nextManagerNameObject = nullptr;
nextIdObject = NULL;
@ -154,6 +155,9 @@ void SimObject::initPersistFields()
addProtectedField( "name", TypeName, Offset(mObjectName, SimObject), &setProtectedName, &defaultProtectedGetFn,
"Optional global name of this object." );
addProtectedField("inheritFrom", TypeString, Offset(mInheritFrom, SimObject), &setInheritFrom, &defaultProtectedGetFn,
"Optional Name of object to inherit from as a parent.");
endGroup( "Ungrouped" );
@ -1133,7 +1137,7 @@ const char *SimObject::getPrefixedDataField(StringTableEntry fieldName, const ch
//-----------------------------------------------------------------------------
void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *array, const char *value)
void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *_array, const char *value)
{
// Sanity!
AssertFatal(fieldName != NULL, "Cannot set object field value with NULL field name.");
@ -1142,7 +1146,7 @@ void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *arr
// Set value without prefix if there's no value.
if (*value == 0)
{
setDataField(fieldName, NULL, value);
setDataField(fieldName, _array, value);
return;
}
@ -1156,7 +1160,7 @@ void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *arr
if (fieldPrefix == StringTable->EmptyString())
{
// No, so set the data field in the usual way.
setDataField(fieldName, NULL, value);
setDataField(fieldName, _array, value);
return;
}
@ -1167,23 +1171,23 @@ void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *arr
if (dStrnicmp(value, fieldPrefix, fieldPrefixLength) != 0)
{
// No, so set the data field in the usual way.
setDataField(fieldName, NULL, value);
setDataField(fieldName, _array, value);
return;
}
// Yes, so set the data excluding the prefix.
setDataField(fieldName, NULL, value + fieldPrefixLength);
setDataField(fieldName, _array, value + fieldPrefixLength);
}
//-----------------------------------------------------------------------------
const char *SimObject::getPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const S32 fieldType)
const char *SimObject::getPrefixedDynamicDataField(StringTableEntry fieldName, const char *_array, const S32 fieldType)
{
// Sanity!
AssertFatal(fieldName != NULL, "Cannot get field value with NULL field name.");
// Fetch field value.
const char* pFieldValue = getDataField(fieldName, array);
const char* pFieldValue = getDataField(fieldName, _array);
// Sanity.
AssertFatal(pFieldValue != NULL, "Field value cannot be NULL.");
@ -2235,10 +2239,10 @@ bool SimObject::setProtectedName(void *obj, const char *index, const char *data)
{
if (preventNameChanging)
return false;
SimObject *object = static_cast<SimObject*>(obj);
if ( object->isProperlyAdded() )
object->assignName( data );
SimObject* object = static_cast<SimObject*>(obj);
if (object->isProperlyAdded())
object->assignName(data);
// always return false because we assign the name here
return false;
@ -2246,6 +2250,31 @@ bool SimObject::setProtectedName(void *obj, const char *index, const char *data)
//-----------------------------------------------------------------------------
bool SimObject::setInheritFrom(void* obj, const char* index, const char* data)
{
SimObject* object = static_cast<SimObject*>(obj);
SimObject* parent;
if (Sim::findObject(data, parent))
{
object->setCopySource(parent);
object->assignFieldsFrom(parent);
// copy any substitution statements
SimDataBlock* parent_db = dynamic_cast<SimDataBlock*>(parent);
if (parent_db)
{
SimDataBlock* currentNewObject_db = dynamic_cast<SimDataBlock*>(object);
if (currentNewObject_db)
currentNewObject_db->copySubstitutionsFrom(parent_db);
}
}
return true;
}
//-----------------------------------------------------------------------------
void SimObject::inspectPreApply()
{
}