From: Mathias Froehlich Date: Sun, 11 Nov 2012 08:49:25 +0000 (+0100) Subject: hla: Replace the object class callback by it's object class. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=f4d344d44a270ba209b649b3c858dd29ef52497a;p=flightgear.git hla: Replace the object class callback by it's object class. --- diff --git a/src/Network/HLA/hla.cxx b/src/Network/HLA/hla.cxx index 8d91e88e9..e20e9f8e1 100644 --- a/src/Network/HLA/hla.cxx +++ b/src/Network/HLA/hla.cxx @@ -747,23 +747,36 @@ public: SGSharedPtr _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(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 = new MpClassCallback; + SGSharedPtr mpClassCallback = objectClass; if (i->_positionConfig._type == "cartesian") { SGSharedPtr locationFactory; @@ -1330,8 +1327,6 @@ FGHLA::open() << j->_type << "\" for object class \"" << aircraftClassName << "\". Ignoring!"); } } - - objectClass->setInstanceCallback(mpClassCallback); } set_enabled(true);