#include "AIBallistic.hxx"
#include <Main/util.hxx>
+#include <Environment/gravity.hxx>
using namespace simgear;
const double FGAIBallistic::slugs_to_lbs = 32.1740485564;
FGAIBallistic::FGAIBallistic(object_type ot) :
-FGAIBase(ot),
+FGAIBase(ot, false),
_height(0.0),
_speed(0),
_ht_agl_ft(0.0),
_aero_stabilised(false),
_drag_area(0.007),
_life_timer(0.0),
-_gravity(32.1740485564),
_buoyancy(0),
_wind(true),
_mass(0),
_elapsed_time += (sg_random() * 100);
+ _life_timer = 0;
+
props->setStringValue("material/name", "");
props->setStringValue("name", _name.c_str());
props->setStringValue("submodels/path", _path.c_str());
props->setStringValue("contents/path", _contents_path.c_str());
}
+ //cout << "init: name " << _name.c_str() << " _life_timer " << _life_timer
+ // << endl;
+
//if(_parent != ""){
// setParentNode();
//}
if (_random){
life = seconds * _randomness + (seconds * (1 -_randomness) * sg_random());
- //cout << "life " << life << endl;
+ //cout << " set life " << life << endl;
} else
life = seconds;
}
void FGAIBallistic::Run(double dt) {
_life_timer += dt;
+
+ //_pass += 1;
+ //cout<<"AIBallistic run: name " << _name.c_str()
+ // << " dt " << dt << " _life_timer " << _life_timer << " pass " << _pass << endl;
// if life = -1 the object does not die
if (_life_timer > life && life != -1){
if (_report_expiry && !_expiry_reported && !_impact_reported && !_collision_reported){
- //cout<<"AIBallistic: expiry"<< endl;
+ //cout<<"AIBallistic run: name " << _name.c_str() << " expiry "
+ //<< " _life_timer " << _life_timer<< endl;
handle_expiry();
- } else
+ } else{
+ //cout<<"AIBallistic run: name " << _name.c_str()
+ // << " die " << " _life_timer " << _life_timer << endl;
setDie(true);
+ }
+ setTime(0);
}
//set the contents in the appropriate tank or other property in the parent to zero
if ( speed < 0.0 )
speed = 0.0;
- double speed_fps = speed * SG_KT_TO_FPS;
+// double speed_fps = speed * SG_KT_TO_FPS;
// calculate vertical and horizontal speed components
calcVSHS();
hs = 0;
// adjust vertical speed for acceleration of gravity, buoyancy, and vertical force
- vs -= (_gravity - _buoyancy - v_force_acc_fpss - normal_force_fpss) * dt;
+ double gravity = Environment::Gravity::instance()->getGravity(pos);
+ vs -= (gravity - _buoyancy - v_force_acc_fpss - normal_force_fpss) * dt;
if (vs <= 0.00001 && vs >= -0.00001)
vs = 0;
void FGAIBallistic::handle_expiry() {
- SG_LOG(SG_GENERAL, SG_DEBUG, "AIBallistic: handle_expiry " << pos.getElevationM());
+ //SG_LOG(SG_GENERAL, SG_DEBUG, "AIBallistic: handle_expiry " << pos.getElevationM());
report_impact(pos.getElevationM());
_expiry_reported = true;
n->setStringValue("type", "terrain");
SG_LOG(SG_GENERAL, SG_DEBUG, "AIBallistic: object impact " << _name
- << " lon " <<_impact_lon << " lat " <<_impact_lat);
+ << " lon " <<_impact_lon << " lat " <<_impact_lat << " sec " << _life_timer);
n->setDoubleValue("longitude-deg", _impact_lon);
n->setDoubleValue("latitude-deg", _impact_lat);