فهرست منبع

Tweaks the Scene and SubScene save calls to handle simGroups to call onto their children

Areloch 1 سال پیش
والد
کامیت
a931e9a308
2فایلهای تغییر یافته به همراه32 افزوده شده و 7 حذف شده
  1. 19 2
      Engine/source/T3D/Scene.cpp
  2. 13 5
      Engine/source/T3D/SubScene.cpp

+ 19 - 2
Engine/source/T3D/Scene.cpp

@@ -296,11 +296,28 @@ bool Scene::saveScene(StringTableEntry fileName)
 
    //Inform our objects we're saving, so if they do any special stuff
    //they can do it before the actual write-out
-   for (U32 i = 0; i < mPermanentObjects.size(); i++)
+   for (SimGroup::iterator itr = begin(); itr != end(); itr++)
+   {
+      SimGroup* sg = dynamic_cast<SimGroup*>(*itr);
+      if (sg)
+      {
+         ConsoleValue vars[3];
+         vars[2].setString(fileName);
+         sg->callOnChildren("onSaving", 3, vars);
+      }
+
+      SceneObject* sO = dynamic_cast<SceneObject*>(*itr);
+      if (sO)
+      {
+         sO->onSaving_callback(fileName);
+      }
+   }
+
+   /*for (U32 i = 0; i < mPermanentObjects.size(); i++)
    {
       SceneObject* obj = mPermanentObjects[i];
       obj->onSaving_callback(fileName);
-   }
+   }*/
 
    //Inform our subscenes we're saving so they can do any
    //special work required as well

+ 13 - 5
Engine/source/T3D/SubScene.cpp

@@ -309,15 +309,23 @@ bool SubScene::save()
 
    for (SimGroup::iterator itr = begin(); itr != end(); itr++)
    {
-      //Just in case there's a valid callback the scene object would like to invoke for saving
-      SceneObject* gc = dynamic_cast<SceneObject*>(*itr);
-      if (gc)
+      //Inform our objects we're saving, so if they do any special stuff
+      //they can do it before the actual write-out
+      SimGroup* sg = dynamic_cast<SimGroup*>(*itr);
+      if (sg)
       {
-         gc->onSaving_callback(mLevelAssetId);
+         ConsoleValue vars[3];
+         vars[2].setString(mLevelAssetId);
+         sg->callOnChildren("onSaving", 3, vars);
       }
 
-      SimObject* sO = static_cast<SimObject*>(*itr);
+      SceneObject* scO = dynamic_cast<SceneObject*>(*itr);
+      if (scO)
+      {
+         scO->onSaving_callback(mLevelAssetId);
+      }
 
+      SimObject* sO = static_cast<SimObject*>(*itr);
       if (!sO->save(levelPath))
       {
          Con::errorf("SubScene::save() - error, failed to write object %s to file: %s", sO->getIdString(), levelPath);