Преглед на файлове

Merge remote-tracking branch 'upstream/development' into ShaderConstBuffer-CleanupRefactor

marauder2k7 преди 1 година
родител
ревизия
89843b541c

+ 5 - 0
Engine/source/console/consoleFunctions.h

@@ -18,7 +18,12 @@ void gotoWebPage(const char* address);
 bool getDocsURL(void* obj, const char* array, const char* data);
 const char* getDocsLink(const char* filename, U32 lineNumber);
 
+#ifdef TORQUE_TOOLS
 #define docsURL addGroup("Ungrouped");\
                 addProtectedField("docsURL", TypeBool, Offset(mDocsClick, ConsoleObject), &getDocsURL, &defaultProtectedGetFn, getDocsLink(__FILE__,__LINE__), AbstractClassRep::FieldFlags::FIELD_ComponentInspectors);\
                 endGroup("Ungrouped")
+#else
+#define docsURL NULL
+#endif
+
 #endif

+ 2 - 0
Engine/source/gui/editor/guiMenuBar.cpp

@@ -581,6 +581,7 @@ PopupMenu* GuiMenuBar::findMenu(String barTitle)
 //-----------------------------------------------------------------------------
 // Console Methods
 //-----------------------------------------------------------------------------
+#ifdef TORQUE_TOOLS
 DefineEngineMethod(GuiMenuBar, attachToCanvas, void, (const char *canvas, S32 pos), , "(GuiCanvas, pos)")
 {
    GuiCanvas* canv = dynamic_cast<GuiCanvas*>(Sim::findObject(canvas));
@@ -597,6 +598,7 @@ DefineEngineMethod(GuiMenuBar, removeFromCanvas, void, (), , "()")
    if(canvas)
       canvas->setMenuBar(nullptr);
 }
+#endif
 
 DefineEngineMethod(GuiMenuBar, getMenuCount, S32, (), , "()")
 {

+ 33 - 8
Engine/source/scene/zones/sceneZoneSpaceManager.cpp

@@ -714,9 +714,10 @@ void SceneZoneSpaceManager::_zoneRemove( SceneObject* obj, bool freeList )
    PROFILE_SCOPE( SceneZoneSpaceManager_zoneRemove );
 
    // Remove the object from the zone lists.
-
+                                                                                        
    U32 numZones = 0;
    U32* zones = NULL;
+   bool zonesDirty = obj->mZoneRefDirty;
    zones = mObjectZoneLists.getValues(obj->mZoneListHandle, numZones);
 
    for (U32 i=0; i<numZones; i++)
@@ -724,7 +725,26 @@ void SceneZoneSpaceManager::_zoneRemove( SceneObject* obj, bool freeList )
       // Let the zone owner know we are removing an object
       // from its zones.
 
-      getZoneOwner( zones[i] )->_onZoneRemoveObject(obj);
+      SceneZoneSpace* space = getZoneOwner(zones[i]);
+
+      if (space == NULL)
+      {
+         AssertFatal(zonesDirty, "Object still has reference to removed zone");
+         continue;
+      }
+      
+      space->_onZoneRemoveObject(obj);
+
+      // Remove the object from the zones object list
+      Vector<SceneObject*>* objectList = getZoneObjects(zones[i]);
+      if (objectList)
+      {
+         Vector<SceneObject*>::iterator itr = T3D::find(objectList->begin(), objectList->end(), obj);
+         if (itr != objectList->end())
+         {
+            objectList->erase(itr);
+         }
+      }
    }
 
    // Clear the object's zoning state.
@@ -779,6 +799,12 @@ void SceneZoneSpaceManager::_setObjectZoneList( SceneObject* object, U32 numZone
       mObjectZoneLists.reallocList(object->mZoneListHandle, numZones, zoneList);
    }
 
+   // Make sure each zone has the object in its list
+   for (U32 i = 0; i < numZones; i++)
+   {
+      mZoneLists[zoneList[i]]->mObjects.push_back(object);
+   }
+
    object->mNumCurrZones = numZones;
 }
 
@@ -801,17 +827,16 @@ void SceneZoneSpaceManager::_clearZoneList( U32 zoneId )
 
       object->mNumCurrZones --;
 
-      // If this is the only zone the object was in, mark
-      // its zoning state as dirty so it will get assigned
-      // to the outdoor zone on the next update.
-
-      if( object->mNumCurrZones == 0 )
-         object->mZoneRefDirty = true;
+      // Keep things simple here and flag the objects zone list for re-calculation
+      object->mZoneRefDirty = true;
 
       // Let the zone know we have removed the object.
 
       zoneSpace->_onZoneRemoveObject( object );
    }
+
+   // Reset all objects for zone
+   list->mObjects.clear();
 }
 
 //-----------------------------------------------------------------------------

+ 8 - 1
Engine/source/scene/zones/sceneZoneSpaceManager.h

@@ -94,7 +94,7 @@ class SceneZoneSpaceManager
          ZoneObjectList(SceneObject* manager) : mManager(manager) { ; }
 
          inline SceneObject* getManager() const { return mManager; }
-         inline Vector<SceneObject*> getObjects() const { return mObjects; }
+         inline Vector<SceneObject*>& getObjects() { return mObjects; }
       };
 
    protected:
@@ -260,6 +260,13 @@ class SceneZoneSpaceManager
          return ( SceneZoneSpace* )(list ? list->getManager() : NULL);
       }
 
+      Vector<SceneObject*>* getZoneObjects(const U32 zoneId) const
+      {
+         AssertFatal(isValidZoneId(zoneId), "SceneManager::getZoneOwner - Invalid zone ID!");
+         ZoneObjectList* list = mZoneLists[zoneId];
+         return (list ? &list->getObjects() : NULL);
+      }
+
       /// Return the total number of zones in the scene.
       U32 getNumZones() const { return mNumTotalAllocatedZones; }