| 246 | } |
| 247 | |
| 248 | bool Scene::saveScene(StringTableEntry fileName) |
| 249 | { |
| 250 | //So, we ultimately want to not only save out the level, but also collate all the assets utilized |
| 251 | //by the static objects in the scene so we can have those before we parse the level file itself |
| 252 | //Useful for preloading or stat tracking |
| 253 | |
| 254 | //First, save the level file |
| 255 | if (fileName == StringTable->EmptyString()) |
| 256 | { |
| 257 | fileName = getOriginatingFile(); |
| 258 | } |
| 259 | |
| 260 | bool saveSuccess = save(fileName); |
| 261 | |
| 262 | if (!saveSuccess) |
| 263 | return false; |
| 264 | |
| 265 | //Get the level asset |
| 266 | StringTableEntry levelAsset = getLevelAsset(); |
| 267 | if (levelAsset == StringTable->EmptyString()) |
| 268 | return saveSuccess; |
| 269 | |
| 270 | LevelAsset* levelAssetDef = AssetDatabase.acquireAsset<LevelAsset>(levelAsset); |
| 271 | levelAssetDef->clearAssetDependencyFields("staticObjectAssetDependency"); |
| 272 | |
| 273 | //Next, lets build out our |
| 274 | Vector<StringTableEntry> utilizedAssetsList; |
| 275 | for (U32 i = 0; i < size(); i++) |
| 276 | { |
| 277 | getUtilizedAssetsFromSceneObject(getObject(i), &utilizedAssetsList); |
| 278 | } |
| 279 | |
| 280 | for (U32 i = 0; i < utilizedAssetsList.size(); i++) |
| 281 | { |
| 282 | char depSlotName[50]; |
| 283 | dSprintf(depSlotName, sizeof(depSlotName), "%s%d", "staticObjectAssetDependency", i); |
| 284 | |
| 285 | char depValue[255]; |
| 286 | dSprintf(depValue, sizeof(depValue), "%s=%s", ASSET_ID_SIGNATURE, utilizedAssetsList[i]); |
| 287 | |
| 288 | levelAssetDef->setDataField(StringTable->insert(depSlotName), NULL, StringTable->insert(depValue)); |
| 289 | |
| 290 | } |
| 291 | |
| 292 | saveSuccess = levelAssetDef->saveAsset(); |
| 293 | |
| 294 | return saveSuccess; |
| 295 | } |
| 296 | |
| 297 | void Scene::getUtilizedAssetsFromSceneObject(SimObject* object, Vector<StringTableEntry>* usedAssetsList) |
| 298 | { |
no test coverage detected