]> git.mxchange.org Git - flightgear.git/commitdiff
hla: Replace the object class callback by it's object class.
authorMathias Froehlich <Mathias.Froehlich@web.de>
Sun, 11 Nov 2012 08:49:25 +0000 (09:49 +0100)
committerMathias Froehlich <Mathias.Froehlich@web.de>
Sun, 11 Nov 2012 15:30:43 +0000 (16:30 +0100)
src/Network/HLA/hla.cxx

index 8d91e88e98dc9d3bc26cbe4e3dfd46906e791c31..e20e9f8e13b684eef6b2890a6eee69221ec02bc1 100644 (file)
@@ -747,23 +747,36 @@ public:
     SGSharedPtr<FGAIMultiplayer> _aiMultiplayer;
 };
 
+class FGHLA::MultiplayerObjectInstance : public sg::HLAObjectInstance {
+public:
+    MultiplayerObjectInstance(sg::HLAObjectClass* objectClass) :
+        sg::HLAObjectInstance(objectClass)
+    { }
+    virtual ~MultiplayerObjectInstance()
+    { }
+};
 
-class MpClassCallback : public sg::HLAObjectClass::InstanceCallback {
+class FGHLA::MultiplayerObjectClass : public sg::HLAObjectClass {
 public:
-    MpClassCallback()
+    MultiplayerObjectClass(const std::string& name, sg::HLAFederate* federate) :
+        HLAObjectClass(name, federate)
     { }
-    virtual ~MpClassCallback()
+    virtual ~MultiplayerObjectClass()
     { }
 
-    virtual void discoverInstance(const sg::HLAObjectClass& objectClass, sg::HLAObjectInstance& objectInstance, const sg::RTIData& tag)
+    virtual MultiplayerObjectInstance* createObjectInstance(const std::string& name)
+    { return new MultiplayerObjectInstance(this); }
+
+    virtual void discoverInstance(sg::HLAObjectInstance& objectInstance, const sg::RTIData& tag)
     {
+        HLAObjectClass::discoverInstance(objectInstance, tag);
         MPReflectCallback* reflectCallback = new MPReflectCallback;
         objectInstance.setReflectCallback(reflectCallback);
         attachDataElements(objectInstance, reflectCallback->_attributeData, false);
     }
-
-    virtual void removeInstance(const sg::HLAObjectClass& objectClass, sg::HLAObjectInstance& objectInstance, const sg::RTIData& tag)
+    virtual void removeInstance(sg::HLAObjectInstance& objectInstance, const sg::RTIData& tag)
     {
+        HLAObjectClass::removeInstance(objectInstance, tag);
         MPReflectCallback* reflectCallback;
         reflectCallback = dynamic_cast<MPReflectCallback*>(objectInstance.getReflectCallback().get());
         if (!reflectCallback) {
@@ -772,17 +785,22 @@ public:
         }
         reflectCallback->setDie();
     }
-
-    virtual void registerInstance(const sg::HLAObjectClass& objectClass, sg::HLAObjectInstance& objectInstance)
+    virtual void registerInstance(sg::HLAObjectInstance& objectInstance)
     {
+        HLAObjectClass::registerInstance(objectInstance);
         MPUpdateCallback* updateCallback = new MPUpdateCallback;
         objectInstance.setUpdateCallback(updateCallback);
         attachDataElements(objectInstance, updateCallback->_attributeData, true);
         updateCallback->_attributeData._propertyReferenceSet->setRootNode(fgGetNode("/", true));
     }
+    virtual void deleteInstance(sg::HLAObjectInstance& objectInstance)
+    {
+        HLAObjectClass::deleteInstance(objectInstance);
+    }
 
-    virtual void deleteInstance(const sg::HLAObjectClass& objectClass, sg::HLAObjectInstance& objectInstance)
+    virtual void createAttributeDataElements(sg::HLAObjectInstance& objectInstance)
     {
+        sg::HLAObjectClass::createAttributeDataElements(objectInstance);
     }
 
     void setLocationFactory(sg::HLALocationFactory* locationFactory)
@@ -865,27 +883,6 @@ private:
     sg::HLADataElement::IndexPathPair _mpPropertiesIndexPathPair;
 };
 
-class FGHLA::MultiplayerObjectInstance : public sg::HLAObjectInstance {
-public:
-    MultiplayerObjectInstance(sg::HLAObjectClass* objectClass) :
-        sg::HLAObjectInstance(objectClass)
-    { }
-    virtual ~MultiplayerObjectInstance()
-    { }
-};
-
-class FGHLA::MultiplayerObjectClass : public sg::HLAObjectClass {
-public:
-    MultiplayerObjectClass(const std::string& name, sg::HLAFederate* federate) :
-        HLAObjectClass(name, federate)
-    { }
-    virtual ~MultiplayerObjectClass()
-    { }
-
-    virtual MultiplayerObjectInstance* createObjectInstance(const std::string& name)
-    { return new MultiplayerObjectInstance(this); }
-};
-
 class FGHLA::Federate : public sg::HLAFederate {
 public:
     virtual ~Federate()
@@ -1096,7 +1093,7 @@ FGHLA::open()
             continue;
         }
 
-        SGSharedPtr<MpClassCallback> mpClassCallback = new MpClassCallback;
+        SGSharedPtr<MultiplayerObjectClass> mpClassCallback = objectClass;
 
         if (i->_positionConfig._type == "cartesian") {
             SGSharedPtr<sg::HLACartesianLocationFactory> locationFactory;
@@ -1330,8 +1327,6 @@ FGHLA::open()
                        << j->_type << "\" for object class \"" << aircraftClassName << "\". Ignoring!");
             }
         }
-
-        objectClass->setInstanceCallback(mpClassCallback);
     }
 
     set_enabled(true);