| 1224 | } |
| 1225 | |
| 1226 | PersistenceManager::ParsedObject* PersistenceManager::writeNewObject(SimObject* object, const Vector<const char*>& properties, const U32 insertLine, ParsedObject* parentObject) |
| 1227 | { |
| 1228 | ParsedObject* parsedObject = new ParsedObject; |
| 1229 | |
| 1230 | parsedObject->name = object->getName(); |
| 1231 | parsedObject->className = object->getClassName(); |
| 1232 | parsedObject->simObject = object; |
| 1233 | |
| 1234 | U32 currInsertLine = insertLine; |
| 1235 | |
| 1236 | // If the parentObject isn't set see if |
| 1237 | // we can find it in the file |
| 1238 | if (!parentObject) |
| 1239 | parentObject = findParentObject(object); |
| 1240 | |
| 1241 | parsedObject->parentObject = parentObject; |
| 1242 | |
| 1243 | char* indent = getObjectIndent(parentObject); |
| 1244 | |
| 1245 | if (parentObject) |
| 1246 | dStrcat(indent, " \0", 2048); |
| 1247 | |
| 1248 | // Write out the beginning of the object declaration |
| 1249 | const char* dclToken = "new"; |
| 1250 | |
| 1251 | if (dynamic_cast<Material*>(object) || |
| 1252 | dynamic_cast<CustomMaterial*>(object) || |
| 1253 | dynamic_cast<GuiControlProfile*>(object) || |
| 1254 | dynamic_cast<TSShapeConstructor*>(object)) |
| 1255 | dclToken = "singleton"; |
| 1256 | else if( dynamic_cast< SimDataBlock* >( object ) ) |
| 1257 | dclToken = "datablock"; |
| 1258 | |
| 1259 | char newLine[ 4096 ]; |
| 1260 | dMemset(newLine, 0, sizeof( newLine)); |
| 1261 | |
| 1262 | // New line before an object declaration |
| 1263 | dSprintf(newLine, sizeof( newLine ), ""); |
| 1264 | |
| 1265 | mLineBuffer.insert(currInsertLine, dStrdup(newLine)); |
| 1266 | currInsertLine++; |
| 1267 | dMemset(newLine, 0, sizeof( newLine )); |
| 1268 | |
| 1269 | parsedObject->startLine = currInsertLine; |
| 1270 | parsedObject->nameLine = currInsertLine; |
| 1271 | parsedObject->namePosition = dStrlen(indent) + dStrlen(dclToken) + dStrlen(object->getClassName()) + 2; |
| 1272 | |
| 1273 | // Objects that had no name were getting saved out as: Object((null)) |
| 1274 | if ( object->getName() != NULL ) |
| 1275 | { |
| 1276 | if( object->getCopySource() ) |
| 1277 | dSprintf(newLine, sizeof( newLine ), "%s%s %s(%s : %s)", indent, dclToken, object->getClassName(), object->getName(), |
| 1278 | object->getCopySource() ? object->getCopySource()->getName() : "" ); |
| 1279 | else |
| 1280 | dSprintf(newLine, sizeof( newLine ), "%s%s %s(%s)", indent, dclToken, object->getClassName(), object->getName()); |
| 1281 | } |
| 1282 | else |
| 1283 | dSprintf(newLine, sizeof( newLine ), "%s%s %s()", indent, dclToken, object->getClassName() ); |
nothing calls this directly
no test coverage detected