1
0
Fork 0

Harald JOHNSEN:

- AIManager.cxx :
  - we can now have multiple <scenario> entries in the sim/ai entry in preferences.xml
- AIBase.cxx :
  - added an exception handler around the loading of the 3D model to not exit FG
    if the model is not found
- AIScenario.cxx :
  - removed a duplicated read of the xml file, this was also exiting FG is the xml file
    does not exist
This commit is contained in:
ehofman 2005-07-24 14:05:28 +00:00
parent 7e024c549f
commit 15f3ef3cfb
3 changed files with 40 additions and 29 deletions

View file

@ -111,10 +111,14 @@ bool FGAIBase::init() {
props = root->getNode(_type_str.c_str(), index, true);
if (model_path != "") {
try {
model = load3DModel( globals->get_fg_root(),
SGPath(model_path).c_str(),
props,
globals->get_sim_time_sec() );
} catch (const sg_exception &e) {
model = NULL;
}
}
if (model) {
aip.init( model );
@ -125,7 +129,7 @@ bool FGAIBase::init() {
globals->get_scenery()->register_placement_transform(aip.getTransform());
} else {
if (model_path != "") {
SG_LOG(SG_INPUT, SG_WARN, "AIBase: Could not load model.");
SG_LOG(SG_INPUT, SG_WARN, "AIBase: Could not load model " << model_path);
}
}

View file

@ -83,9 +83,13 @@ void FGAIManager::init() {
user_yaw_node = fgGetNode("/orientation/side-slip-deg", true);
user_speed_node = fgGetNode("/velocities/uBody-fps", true);
scenario_filename = root->getNode("scenario", true)->getStringValue();
if (scenario_filename != "") processScenario( scenario_filename );
for(int i = 0 ; i < root->nChildren() ; i++) {
SGPropertyNode *aiEntry = root->getChild( i );
if( !strcmp( aiEntry->getName(), "scenario" ) ) {
scenario_filename = aiEntry->getStringValue();
if (scenario_filename != "") processScenario( scenario_filename );
}
}
initDone = true;
}
@ -169,8 +173,8 @@ FGAIManager::createAircraft( FGAIModelEntity *entity, FGAISchedule *ref) {
} else {
ai_plane->SetPerformance(&FGAIAircraft::settings[FGAIAircraft::JET_TRANSPORT]);
}
ai_plane->setAcType(entity->acType);
ai_plane->setCompany(entity->company);
ai_plane->setAcType(entity->acType);
ai_plane->setCompany(entity->company);
ai_plane->setHeading(entity->heading);
ai_plane->setSpeed(entity->speed);
ai_plane->setPath(entity->path.c_str());
@ -437,32 +441,36 @@ bool FGAIManager::getStartPosition(const string& id, const string& pid,
return 0;
bool found = false;
string filename = root->getNode("scenario", true)->getStringValue();
FGAIScenario* s = new FGAIScenario( filename );
for (int i=0; i<s->nEntries(); i++) {
FGAIModelEntity* en = s->getNextEntry();
if (en && en->m_type == "carrier" &&
(en->pennant_number == id || en->name == id)) {
FGAICarrier* ai_carrier = new FGAICarrier(0);
ai_carrier->setHeading(en->heading);
ai_carrier->setSpeed(en->speed);
ai_carrier->setAltitude(en->altitude);
ai_carrier->setLongitude(en->longitude);
ai_carrier->setLatitude(en->latitude);
ai_carrier->setBank(en->rudder);
ai_carrier->setParkingPositions(en->ppositions);
for(int i = 0 ; (!found) && i < root->nChildren() ; i++) {
SGPropertyNode *aiEntry = root->getChild( i );
if( !strcmp( aiEntry->getName(), "scenario" ) ) {
string filename = aiEntry->getStringValue();
FGAIScenario* s = new FGAIScenario( filename );
for (int i=0; i<s->nEntries(); i++) {
FGAIModelEntity* en = s->getNextEntry();
if (en && en->m_type == "carrier" &&
(en->pennant_number == id || en->name == id)) {
FGAICarrier* ai_carrier = new FGAICarrier(0);
ai_carrier->setHeading(en->heading);
ai_carrier->setSpeed(en->speed);
ai_carrier->setAltitude(en->altitude);
ai_carrier->setLongitude(en->longitude);
ai_carrier->setLatitude(en->latitude);
ai_carrier->setBank(en->rudder);
ai_carrier->setParkingPositions(en->ppositions);
if (ai_carrier->getParkPosition(pid, geodPos, heading, uvw)) {
delete ai_carrier;
found = true;
break;
if (ai_carrier->getParkPosition(pid, geodPos, heading, uvw)) {
delete ai_carrier;
found = true;
break;
}
delete ai_carrier;
}
}
delete ai_carrier;
delete s;
}
}
delete s;
return found;
}

View file

@ -47,7 +47,6 @@ FGAIScenario::FGAIScenario(const string &filename)
path.append( ("/Data/AI/" + filename + ".xml").c_str() );
SGPropertyNode root;
readProperties(path.str(), &root);
// cout <<"path " << path.str() << endl;