X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FAIModel%2FAIScenario.cxx;h=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hb=4bfd1722df24f5be89459b25010e5d7352720a7b;hp=8f4e22b8c7c8cc114b17b9e8056c6a171ffe9b41;hpb=15f3ef3cfbed9ce830be444011fbc959af1b0fa6;p=flightgear.git diff --git a/src/AIModel/AIScenario.cxx b/src/AIModel/AIScenario.cxx index 8f4e22b8c..e69de29bb 100644 --- a/src/AIModel/AIScenario.cxx +++ b/src/AIModel/AIScenario.cxx @@ -1,184 +0,0 @@ -// FGAIScenario.cxx - class for loading an AI scenario -// Written by David Culp, started May 2004 -// - davidculp2@comcast.net -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -#include - -#include -#include -#include -#include -#ifdef __BORLANDC__ -# define exception c_exception -#endif -#include - -#include
-#include
- -#include "AIScenario.hxx" -#include "AIFlightPlan.hxx" - -static list -getAllStringNodeVals(const char* name, SGPropertyNode * entry_node); -static list -getAllOffsetNodeVals(const char* name, SGPropertyNode * entry_node); - -FGAIScenario::FGAIScenario(const string &filename) -{ - int i; - SGPath path( globals->get_fg_root() ); - -// cout << "/Data/AI/" << filename << endl; - - path.append( ("/Data/AI/" + filename + ".xml").c_str() ); - SGPropertyNode root; - -// cout <<"path " << path.str() << endl; - - try { - readProperties(path.str(), &root); - } catch (const sg_exception &e) { - SG_LOG(SG_GENERAL, SG_ALERT, - "Incorrect path specified for AI scenario: "); - - cout << path.str() << endl; - - return; - } - - entries.clear(); - SGPropertyNode * node = root.getNode("scenario"); - for (i = 0; i < node->nChildren(); i++) { - -// cout << "Reading entity data entry " << i << endl; - - SGPropertyNode * entry_node = node->getChild(i); - - FGAIModelEntity* en = new FGAIModelEntity; - en->callsign = entry_node->getStringValue("callsign", "none"); - en->m_type = entry_node->getStringValue("type", "aircraft"); - en->m_class = entry_node->getStringValue("class", "jet_transport"); - en->path = entry_node->getStringValue("model", "Models/Geometry/glider.ac"); - en->flightplan = entry_node->getStringValue("flightplan", ""); - en->repeat = entry_node->getDoubleValue("repeat", 0.0); - en->latitude = entry_node->getDoubleValue("latitude", 0.0); - en->longitude = entry_node->getDoubleValue("longitude", 0.0); - en->altitude = entry_node->getDoubleValue("altitude", 0.0); - en->speed = entry_node->getDoubleValue("speed", 0.0); - en->heading = entry_node->getDoubleValue("heading", 0.0); - en->roll = entry_node->getDoubleValue("roll", 0.0); - en->azimuth = entry_node->getDoubleValue("azimuth", 0.0); - en->elevation = entry_node->getDoubleValue("elevation", 0.0); - en->rudder = entry_node->getDoubleValue("rudder", 0.0); - en->strength = entry_node->getDoubleValue("strength-fps", 8.0); - en->strength = entry_node->getDoubleValue("strength-norm", 1.0); - en->diameter = entry_node->getDoubleValue("diameter-ft", 0.0); - en->height_msl = entry_node->getDoubleValue("height-msl", 5000.0); - en->eda = entry_node->getDoubleValue("eda", 0.007); - en->life = entry_node->getDoubleValue("life", 900.0); - en->buoyancy = entry_node->getDoubleValue("buoyancy", 0); - en->wind_from_east = entry_node->getDoubleValue("wind_from_east", 0); - en->wind_from_north = entry_node->getDoubleValue("wind_from_north", 0); - en->wind = entry_node->getBoolValue ("wind", false); - en->cd = entry_node->getDoubleValue("cd", 0.029); - en->mass = entry_node->getDoubleValue("mass", 0.007); - en->radius = entry_node->getDoubleValue("turn-radius-ft", 2000); - en->name = entry_node->getStringValue("name", ""); - en->pennant_number = entry_node->getStringValue("pennant-number", ""); - en->wire_objects = getAllStringNodeVals("wire", entry_node); - en->catapult_objects = getAllStringNodeVals("catapult", entry_node); - en->solid_objects = getAllStringNodeVals("solid", entry_node); - en->ppositions = getAllOffsetNodeVals("parking-pos", entry_node); - list flolspos = getAllOffsetNodeVals("flols-pos", entry_node); - en->flols_offset = flolspos.front().offset; - - en->fp = NULL; - if (en->flightplan != ""){ - en->fp = new FGAIFlightPlan( en->flightplan ); - } - entries.push_back( en ); - } - - entry_iterator = entries.begin(); - //cout << entries.size() << " entries read." << endl; -} - - -FGAIScenario::~FGAIScenario() -{ - entries.clear(); -} - - -FGAIModelEntity* -FGAIScenario::getNextEntry( void ) -{ - if (entries.size() == 0) return 0; - if (entry_iterator != entries.end()) { - return *entry_iterator++; - } else { - return 0; - } -} - -int FGAIScenario::nEntries( void ) -{ - return entries.size(); -} - -static list -getAllStringNodeVals(const char* name, SGPropertyNode * entry_node) -{ - list retval; - int i=0; - do { - char nodename[100]; - snprintf(nodename, sizeof(nodename), "%s[%d]", name, i); - const char* objname = entry_node->getStringValue(nodename, 0); - if (objname == 0) - return retval; - - retval.push_back(string(objname)); - ++i; - } while (1); - - return retval; -} - -static list -getAllOffsetNodeVals(const char* name, SGPropertyNode * entry_node) -{ - list retval; - - vector::iterator it; - vector children = entry_node->getChildren(name); - for (it = children.begin(); it != children.end(); ++it) { - string name = (*it)->getStringValue("name", "unnamed"); - double offset_x = (*it)->getDoubleValue("x-offset-m", 0); - double offset_y = (*it)->getDoubleValue("y-offset-m", 0); - double offset_z = (*it)->getDoubleValue("z-offset-m", 0); - double hd = (*it)->getDoubleValue("heading-offset-deg", 0); - ParkPosition pp(name, Point3D(offset_x, offset_y, offset_z), hd); - retval.push_back(pp); - } - - return retval; -} - -// end scenario.cxx -