FGAIWingman::FGAIWingman() : FGAIBallistic(otWingman),
_formate_to_ac(true),
-_break_angle(-90),
_break(false),
_join(false),
+_break_angle(-90),
_coeff_hdg(5.0),
-_coeff_pch(5.0)
+_coeff_pch(5.0),
+_coeff_bnk(5.0),
+_coeff_spd(2.0)
{
invisible = false;
setNoRoll(scFileNode->getBoolValue("no-roll", false));
setName(scFileNode->getStringValue("name", "Wingman"));
setParentName(scFileNode->getStringValue("parent", ""));
- //setSMPath(scFileNode->getStringValue("submodel-path", ""));
setSubID(scFileNode->getIntValue("SubID", 0));
setXoffset(scFileNode->getDoubleValue("x-offset", 0.0));
setYoffset(scFileNode->getDoubleValue("y-offset", 0.0));
props->tie("controls/coefficients/speed",
SGRawValuePointer<double>(&_coeff_spd));
-
-
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("velocities/speed-north-fps",
SGRawValuePointer<double>(&_speed_north_fps));
-
props->tie("position/x-offset",
SGRawValueMethods<FGAIBase,double>(*this, &FGAIBase::_getXOffset, &FGAIBase::setXoffset));
props->tie("position/y-offset",
props->untie("orientation/true-heading-deg");
props->untie("controls/formate-to-ac");
+ props->untie("controls/break");
+ props->untie("controls/join");
props->untie("controls/tgt-heading-deg");
props->untie("controls/tgt-speed-kt");
props->untie("controls/break-deg-rel");
- props->untie("controls/break");
- props->untie("controls/join");
props->untie("controls/coefficients/heading");
props->untie("controls/coefficients/pitch");
props->untie("controls/coefficients/bank");
roll = _rotation;
_ht_agl_ft = 1e10;
- props->setStringValue("submodels/path", _path.c_str());
-
if(_parent != ""){
setParentNode();
}
setParentNodes(_selected_ac);
+
+ props->setStringValue("submodels/path", _path.c_str());
+ user_WoW_node = fgGetNode("gear/gear[1]/wow", true);
return true;
}
void FGAIWingman::update(double dt) {
+
// FGAIBallistic::update(dt);
if (_formate_to_ac){
void FGAIWingman::formateToAC(double dt){
- double p_hdg, p_pch, p_rll, p_agl, p_ht = 0;
+ double p_hdg, p_pch, p_rll, p_agl, p_ht, p_wow = 0;
setTgtOffsets(dt, 25);
p_hdg = _p_hdg_node->getDoubleValue();
p_pch = _p_pch_node->getDoubleValue();
p_rll = _p_rll_node->getDoubleValue();
- //agl = _p_agl_node->getDoubleValue();
p_ht = _p_alt_node->getDoubleValue();
setOffsetPos(_parentpos, p_hdg, p_pch, p_rll);
setSpeed(_p_spd_node->getDoubleValue());
p_hdg = manager->get_user_heading();
p_pch = manager->get_user_pitch();
p_rll = manager->get_user_roll();
- //agl = manager->get_user_agl();
p_ht = manager->get_user_altitude();
setOffsetPos(userpos, p_hdg,p_pch, p_rll);
setSpeed(manager->get_user_speed());
double h_feet = 3 * factor;
p_agl = manager->get_user_agl();
+ p_wow = user_WoW_node->getDoubleValue();
- if(p_agl <= 10) {
+ if(p_agl <= 10 || p_wow == 1) {
_height = p_ht;
//cout << "ht case1 " ;
} else if (p_agl > 10 && p_agl <= 150 ) {
pos.setLongitudeDeg(_offsetpos.getLongitudeDeg());
// these calculations are unreliable at slow speeds
- if(speed >= 10) {
+ // and we don't want random movement on the ground
+ if(speed >= 10 && p_wow != 1) {
setHdg(p_hdg + h_angle, dt, 0.9);
setPch(p_pch + p_angle + _pitch_offset, dt, 0.9);