FGAIBase::FGAIBase()
- : fp( NULL ),
+ : fp( NULL ),
model( NULL ),
props( NULL ),
- manager( NULL )
+ manager( NULL ),
+ _refID( _newAIModelID() )
{
_type_str = "model";
+ tgt_heading = tgt_altitude = tgt_speed = 0.0;
tgt_roll = roll = tgt_pitch = tgt_yaw = tgt_vs = vs = pitch = 0.0;
bearing = elevation = range = rdot = 0.0;
x_shift = y_shift = rotation = 0.0;
root->removeChild(_type_str.c_str(), index);
delete fp;
fp = NULL;
+ ssgDeRefDelete(model);
+ model = 0;
}
void FGAIBase::update(double dt) {
} else {
aip.setOrientation(roll, pitch, hdg);
}
- aip.update( globals->get_scenery()->get_center() );
+ aip.update();
}
}
prop_root,
sim_time_sec);
manager->setModel(path, model);
- model->ref();
}
//else
// {
// aip.setVisible(false);
// globals->get_scenery()->get_scene_graph()->addKid(aip.getSceneGraph());
// do some setModel stuff.
+
+ if (model)
+ model->ref();
+
return model;
}
void FGAIBase::bind() {
props->tie("id", SGRawValueMethods<FGAIBase,int>(*this,
- &FGAIBase::_getID));
+ &FGAIBase::getID));
props->tie("velocities/true-airspeed-kt", SGRawValuePointer<double>(&speed));
props->tie("velocities/vertical-speed-fps",
SGRawValueMethods<FGAIBase,double>(*this,
// Now transform to the wgs84 earth centeres system.
Point3D pos2(pos.lon()* SGD_DEGREES_TO_RADIANS,
pos.lat() * SGD_DEGREES_TO_RADIANS,
- pos.elev() * SG_FEET_TO_METER);
+ pos.elev());
Point3D cartPos3D = sgGeodToCart(pos2);
sgdMat4 ecTrans;
sgdMakeCoordMat4(ecTrans, cartPos3D.x(), cartPos3D.y(), cartPos3D.z(),
return (fgGetFloat("/sim/time/sun-angle-rad") > 1.57);
}
-int FGAIBase::_getID() const {
- return (int)(this);
+int FGAIBase::getID() const {
+ return _refID;
}
void FGAIBase::CalculateMach() {
// cout << "Speed(ft/s) "<< speed <<" Altitude(ft) "<< altitude << " Mach " << Mach;
}
+int FGAIBase::_newAIModelID() {
+ static int id = 0;
+ if (!++id) id++; // id = 0 is not allowed.
+ return id;
+}
+