From 093252ada3118669f9ee8139ee88656194211144 Mon Sep 17 00:00:00 2001 From: Daniel Buckmaster Date: Wed, 14 Nov 2012 09:25:38 +1100 Subject: [PATCH] Updated logic in MissionArea::getServerObject. Before this function would iterate through every server-side object to find a MissionArea. Now, it stores the server object in a static member smServerObject. This member is updated in onAdd and onRemove, and returned by getServerObject. --- Engine/source/T3D/missionArea.cpp | 35 ++++++++++++++++++------------- Engine/source/T3D/missionArea.h | 3 +++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Engine/source/T3D/missionArea.cpp b/Engine/source/T3D/missionArea.cpp index b8d4d6f6b..d11aa91ce 100644 --- a/Engine/source/T3D/missionArea.cpp +++ b/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(*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() diff --git a/Engine/source/T3D/missionArea.h b/Engine/source/T3D/missionArea.h index d4ee5e294..6d1f81b19 100644 --- a/Engine/source/T3D/missionArea.h +++ b/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();