#include <osg/Node>
#include <osgDB/FileUtils>
-#include <simgear/math/SGMath.hxx>
#include <simgear/misc/sg_path.hxx>
#include <simgear/scene/model/modellib.hxx>
#include <simgear/scene/util/SGNodeMasks.hxx>
model_removed->setStringValue(props->getPath());
}
+ // refID=0 is supposedley impossible, refID=1 is the special ai_ac aircaft
+ // representing the current user, in the ATCManager. Maybe both these
+ // tests could die?
if (_fx && _refID != 0 && _refID != 1) {
SGSoundMgr *smgr = globals->get_soundmgr();
- stringstream name;
- name << "aifx:";
- name << _refID;
- smgr->remove(name.str());
+ if (smgr) {
+ stringstream name;
+ name << "aifx:";
+ name << _refID;
+ smgr->remove(name.str());
+ }
}
if (fp)
aip.init( 0 );
_model = 0;
// pass it on to the pager, to be be deleted in the pager thread
- pSceneryManager->getPagerSingleton()->queueDeleteRequest(temp);
+ pSceneryManager->getPager()->queueDeleteRequest(temp);
}
else
{
props->setStringValue("sim/sound/path", fxpath.c_str());
// initialize the sound configuration
- SGSoundMgr *smgr = globals->get_soundmgr();
stringstream name;
name << "aifx:";
name << _refID;
- _fx = new FGFX(smgr, name.str(), props);
+ _fx = new FGFX(name.str(), props);
_fx->init();
}
}
aip.setVisible(true);
invisible = false;
globals->get_scenery()->get_scene_graph()->addChild(aip.getSceneGraph());
-
- // Get the sound-path tag from the configuration file and store it
- // in the property tree.
_initialized = true;
+ SG_LOG(SG_AI, SG_DEBUG, "AIBase: Loaded model " << model_path);
+
} else if (!model_path.empty()) {
SG_LOG(SG_AI, SG_WARN, "AIBase: Could not load model " << model_path);
// not properly installed...
void FGAIBase::bind() {
- props->tie("id", SGRawValueMethods<FGAIBase,int>(*this,
+ _tiedProperties.setRoot(props);
+ tie("id", SGRawValueMethods<FGAIBase,int>(*this,
&FGAIBase::getID));
- props->tie("velocities/true-airspeed-kt", SGRawValuePointer<double>(&speed));
- props->tie("velocities/vertical-speed-fps",
+ tie("velocities/true-airspeed-kt", SGRawValuePointer<double>(&speed));
+ tie("velocities/vertical-speed-fps",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getVS_fps,
&FGAIBase::_setVS_fps));
- props->tie("position/altitude-ft",
+ tie("position/altitude-ft",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getAltitude,
&FGAIBase::_setAltitude));
- props->tie("position/latitude-deg",
+ tie("position/latitude-deg",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getLatitude,
&FGAIBase::_setLatitude));
- props->tie("position/longitude-deg",
+ tie("position/longitude-deg",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getLongitude,
&FGAIBase::_setLongitude));
- props->tie("position/global-x",
+ tie("position/global-x",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getCartPosX,
0));
- props->tie("position/global-y",
+ tie("position/global-y",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getCartPosY,
0));
- props->tie("position/global-z",
+ tie("position/global-z",
SGRawValueMethods<FGAIBase,double>(*this,
&FGAIBase::_getCartPosZ,
0));
- props->tie("callsign",
+ tie("callsign",
SGRawValueMethods<FGAIBase,const char*>(*this,
&FGAIBase::_getCallsign,
0));
- props->tie("orientation/pitch-deg", SGRawValuePointer<double>(&pitch));
- props->tie("orientation/roll-deg", SGRawValuePointer<double>(&roll));
- props->tie("orientation/true-heading-deg", SGRawValuePointer<double>(&hdg));
-
- props->tie("radar/in-range", SGRawValuePointer<bool>(&in_range));
- props->tie("radar/bearing-deg", SGRawValuePointer<double>(&bearing));
- props->tie("radar/elevation-deg", SGRawValuePointer<double>(&elevation));
- props->tie("radar/range-nm", SGRawValuePointer<double>(&range));
- props->tie("radar/h-offset", SGRawValuePointer<double>(&horiz_offset));
- props->tie("radar/v-offset", SGRawValuePointer<double>(&vert_offset));
- props->tie("radar/x-shift", SGRawValuePointer<double>(&x_shift));
- props->tie("radar/y-shift", SGRawValuePointer<double>(&y_shift));
- props->tie("radar/rotation", SGRawValuePointer<double>(&rotation));
- props->tie("radar/ht-diff-ft", SGRawValuePointer<double>(&ht_diff));
- props->tie("subID", SGRawValuePointer<int>(&_subID));
- props->tie("controls/lighting/nav-lights",
- SGRawValueFunctions<bool>(_isNight));
+ tie("orientation/pitch-deg", SGRawValuePointer<double>(&pitch));
+ tie("orientation/roll-deg", SGRawValuePointer<double>(&roll));
+ tie("orientation/true-heading-deg", SGRawValuePointer<double>(&hdg));
+
+ tie("radar/in-range", SGRawValuePointer<bool>(&in_range));
+ tie("radar/bearing-deg", SGRawValuePointer<double>(&bearing));
+ tie("radar/elevation-deg", SGRawValuePointer<double>(&elevation));
+ tie("radar/range-nm", SGRawValuePointer<double>(&range));
+ tie("radar/h-offset", SGRawValuePointer<double>(&horiz_offset));
+ tie("radar/v-offset", SGRawValuePointer<double>(&vert_offset));
+ tie("radar/x-shift", SGRawValuePointer<double>(&x_shift));
+ tie("radar/y-shift", SGRawValuePointer<double>(&y_shift));
+ tie("radar/rotation", SGRawValuePointer<double>(&rotation));
+ tie("radar/ht-diff-ft", SGRawValuePointer<double>(&ht_diff));
+ tie("subID", SGRawValuePointer<int>(&_subID));
+ tie("controls/lighting/nav-lights", SGRawValueFunctions<bool>(_isNight));
+
props->setBoolValue("controls/lighting/beacon", true);
props->setBoolValue("controls/lighting/strobe", true);
props->setBoolValue("controls/glide-path", true);
props->setDoubleValue("sim/sound/avionics/volume", 0.0);
props->setBoolValue("sim/sound/avionics/external-view", false);
props->setBoolValue("sim/current-view/internal", false);
-
}
void FGAIBase::unbind() {
- props->untie("id");
- props->untie("velocities/true-airspeed-kt");
- props->untie("velocities/vertical-speed-fps");
-
- props->untie("position/altitude-ft");
- props->untie("position/latitude-deg");
- props->untie("position/longitude-deg");
- props->untie("position/global-x");
- props->untie("position/global-y");
- props->untie("position/global-z");
- props->untie("callsign");
-
- props->untie("orientation/pitch-deg");
- props->untie("orientation/roll-deg");
- props->untie("orientation/true-heading-deg");
-
- props->untie("radar/in-range");
- props->untie("radar/bearing-deg");
- props->untie("radar/elevation-deg");
- props->untie("radar/range-nm");
- props->untie("radar/h-offset");
- props->untie("radar/v-offset");
- props->untie("radar/x-shift");
- props->untie("radar/y-shift");
- props->untie("radar/rotation");
- props->untie("radar/ht-diff-ft");
-
- props->untie("controls/lighting/nav-lights");
-
- props->setBoolValue("/sim/controls/radar/", true);
+ _tiedProperties.Untie();
+
+ props->setBoolValue("/sim/controls/radar", true);
// drop reference to sound effects now
_fx = 0;
}
bool FGAIBase::getGroundElevationM(const SGGeod& pos, double& elev,
- const SGMaterial** material) const {
+ const simgear::BVHMaterial** material) const {
return globals->get_scenery()->get_elevation_m(pos, elev, material,
_model.get());
}
double FGAIBase::_getAltitudeAGL(SGGeod inpos, double start){
getGroundElevationM(SGGeod::fromGeodM(inpos, start),
- _elevation_m, &_material);
+ _elevation_m, NULL);
return inpos.getElevationFt() - _elevation_m * SG_METER_TO_FEET;
}