diff --git a/simgear/hla/HLAFederate.cxx b/simgear/hla/HLAFederate.cxx index c5c70630..b4a75597 100644 --- a/simgear/hla/HLAFederate.cxx +++ b/simgear/hla/HLAFederate.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de +// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public @@ -831,6 +831,27 @@ HLAFederate::readObjectModelTemplate(const std::string& objectModel, return true; } +bool +HLAFederate::readRTI13ObjectModelTemplate(const std::string& objectModel) +{ + SG_LOG(SG_IO, SG_ALERT, "HLA version RTI13 not yet(!?) supported."); + return false; +} + +bool +HLAFederate::readRTI1516ObjectModelTemplate(const std::string& objectModel) +{ + ObjectModelFactory objectModelFactory; + return readObjectModelTemplate(objectModel, objectModelFactory); +} + +bool +HLAFederate::readRTI1516EObjectModelTemplate(const std::string& objectModel) +{ + SG_LOG(SG_IO, SG_ALERT, "HLA version RTI1516E not yet(!?) supported."); + return false; +} + HLAObjectClass* HLAFederate::getObjectClass(const std::string& name) { @@ -849,6 +870,12 @@ HLAFederate::getObjectClass(const std::string& name) const return i->second.get(); } +HLAObjectClass* +HLAFederate::createObjectClass(const std::string& name) +{ + return new HLAObjectClass(name, *this); +} + HLAInteractionClass* HLAFederate::getInteractionClass(const std::string& name) { @@ -884,6 +911,14 @@ HLAFederate::readObjectModel() { /// Currently empty, but is called at the right time so that /// the object model is present when it is needed + // switch (getVersion()) { + // case RTI13: + // return readRTI13ObjectModelTemplate(getFederationObjectModel()); + // case RTI1516: + // return readRTI1516ObjectModelTemplate(getFederationObjectModel()); + // case RTI1516E: + // return readRTI1516EObjectModelTemplate(getFederationObjectModel()); + // } return true; } diff --git a/simgear/hla/HLAFederate.hxx b/simgear/hla/HLAFederate.hxx index 3083903c..2326a385 100644 --- a/simgear/hla/HLAFederate.hxx +++ b/simgear/hla/HLAFederate.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2009 - 2011 Mathias Froehlich - Mathias.Froehlich@web.de +// Copyright (C) 2009 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public @@ -161,7 +161,7 @@ public: /// a pending time advance is granted. bool processMessages(); - /// Legacy tick call + /// Legacy tick call - deprecated bool tick(const double& minimum, const double& maximum); class ObjectModelFactory { @@ -170,7 +170,7 @@ public: { } virtual HLAObjectClass* createObjectClass(const std::string& name, HLAFederate& federate) - { return new HLAObjectClass(name, federate); } + { return federate.createObjectClass(name); } virtual bool subscribeObjectClass(const std::string& objectClassName, const std::string& sharing) { return sharing.find("Subscribe") != std::string::npos; } virtual bool publishObjectClass(const std::string& objectClassName, const std::string& sharing) @@ -182,13 +182,22 @@ public: }; - /// Read an omt xml file + /// Read an omt xml file - deprecated bool readObjectModelTemplate(const std::string& objectModel, ObjectModelFactory& objectModelFactory); + /// Read an rti1.3 omt xml file + bool readRTI13ObjectModelTemplate(const std::string& objectModel); + /// Read an rti1516 omt xml file + bool readRTI1516ObjectModelTemplate(const std::string& objectModel); + /// Read an rti1516e omt xml file + bool readRTI1516EObjectModelTemplate(const std::string& objectModel); + /// Get the object class of a given name HLAObjectClass* getObjectClass(const std::string& name); const HLAObjectClass* getObjectClass(const std::string& name) const; + /// Default create function. Creates a default object class + virtual HLAObjectClass* createObjectClass(const std::string& name); /// Get the interaction class of a given name HLAInteractionClass* getInteractionClass(const std::string& name);