Browse Source

Merge pull request #140 from eightyeight/missionarea-server-object

Updated logic in MissionArea::getServerObject merged into development branch.
SilentMike 12 years ago
parent
commit
03211bc4fd
2 changed files with 24 additions and 14 deletions
  1. 21 14
      Engine/source/T3D/missionArea.cpp
  2. 3 0
      Engine/source/T3D/missionArea.h

+ 21 - 14
Engine/source/T3D/missionArea.cpp

@@ -52,6 +52,8 @@ ConsoleDocClass( MissionArea,
 
 RectI MissionArea::smMissionArea(Point2I(768, 768), Point2I(512, 512));
 
+MissionArea * MissionArea::smServerObject = NULL;
+
 //------------------------------------------------------------------------------
 
 MissionArea::MissionArea()
@@ -79,27 +81,24 @@ void MissionArea::setArea(const RectI & area)
 
 MissionArea * MissionArea::getServerObject()
 {
-   SimSet * scopeAlwaysSet = Sim::getGhostAlwaysSet();
-   for(SimSet::iterator itr = scopeAlwaysSet->begin(); itr != scopeAlwaysSet->end(); itr++)
-   {
-      MissionArea * ma = dynamic_cast<MissionArea*>(*itr);
-      if(ma)
-      {
-         AssertFatal(ma->isServerObject(), "MissionArea::getServerObject: found client object in ghost always set!");
-         return(ma);
-      }
-   }
-   return(0);
+   return smServerObject;
 }
 
 //------------------------------------------------------------------------------
 
 bool MissionArea::onAdd()
 {
-   if(isServerObject() && MissionArea::getServerObject())
+   if(isServerObject())
    {
-      Con::errorf(ConsoleLogEntry::General, "MissionArea::onAdd - MissionArea already instantiated!");
-      return(false);
+      if(MissionArea::getServerObject())
+      {
+         Con::errorf(ConsoleLogEntry::General, "MissionArea::onAdd - MissionArea already instantiated!");
+         return(false);
+      }
+      else
+      {
+         smServerObject = this;
+      }
    }
 
    if(!Parent::onAdd())
@@ -109,6 +108,14 @@ bool MissionArea::onAdd()
    return(true);
 }
 
+void MissionArea::onRemove()
+{
+   if (smServerObject == this)
+      smServerObject = NULL;
+
+   Parent::onRemove();
+}
+
 //------------------------------------------------------------------------------
 
 void MissionArea::inspectPostApply()

+ 3 - 0
Engine/source/T3D/missionArea.h

@@ -36,6 +36,8 @@ class MissionArea : public NetObject
    F32 mFlightCeiling;
    F32 mFlightCeilingRange;
 
+   static MissionArea * smServerObject;
+
   public:
    MissionArea();
 
@@ -53,6 +55,7 @@ class MissionArea : public NetObject
    /// @name SimObject Inheritance
    /// @{
    bool onAdd();
+   void onRemove();
 
    void inspectPostApply();