From: Vivian Meazza Date: Thu, 28 Oct 2010 16:29:41 +0000 (+0100) Subject: More rationalization of methods, and other clean-ups X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=b88d0988cdcc5e1f3043bbea051c4c9e77008c3c;p=flightgear.git More rationalization of methods, and other clean-ups Signed-off-by: Vivian Meazza --- diff --git a/src/AIModel/AIBallistic.cxx b/src/AIModel/AIBallistic.cxx index fa06b291e..0f7aeb7be 100644 --- a/src/AIModel/AIBallistic.cxx +++ b/src/AIModel/AIBallistic.cxx @@ -152,11 +152,11 @@ bool FGAIBallistic::init(bool search_in_AI_path) { props->setStringValue("contents/path", _contents_path.c_str()); } - if(_parent != ""){ - setParentNode(); - } + //if(_parent != ""){ + // setParentNode(); + //} - setParentNodes(_selected_ac); + //setParentNodes(_selected_ac); //props->setStringValue("vector/path", _vector_path.c_str()); @@ -168,7 +168,11 @@ bool FGAIBallistic::init(bool search_in_AI_path) { Transform(); - //cout << _name << " speed init: " << speed << endl; + if(_parent != ""){ + setParentNode(); + } + + setParentNodes(_selected_ac); return true; } diff --git a/src/AIModel/AIBallistic.hxx b/src/AIModel/AIBallistic.hxx index b2b140c17..739f76671 100644 --- a/src/AIModel/AIBallistic.hxx +++ b/src/AIModel/AIBallistic.hxx @@ -44,6 +44,7 @@ public: void readFromScenario(SGPropertyNode* scFileNode); bool init(bool search_in_AI_path=false); + virtual void bind(); virtual void unbind(); diff --git a/src/AIModel/AIBase.cxx b/src/AIModel/AIBase.cxx index 8a073eb6d..514c6abb0 100644 --- a/src/AIModel/AIBase.cxx +++ b/src/AIModel/AIBase.cxx @@ -194,18 +194,27 @@ void FGAIBase::Transform() { } bool FGAIBase::init(bool search_in_AI_path) { - osg::ref_ptr opt= - new osgDB::ReaderWriter::Options(*osgDB::Registry::instance()->getOptions()); - + + string f; if(search_in_AI_path) { - SGPath ai_path(globals->get_fg_root()); - ai_path.append("AI"); - opt->getDatabasePathList().push_front(ai_path.str()); + // setup a modified Options strucutre, with only the $fg-root/AI defined; + // we'll check that first, then give the normal search logic a chance. + // this ensures that models in AI/ are preferred to normal models, where + // both exist. + osg::ref_ptr + opt(osg::clone(osgDB::Registry::instance()->getOptions(), osg::CopyOp::SHALLOW_COPY)); + + SGPath ai_path(globals->get_fg_root(), "AI"); + opt->setDatabasePath(ai_path.str()); + + f = osgDB::findDataFile(model_path, opt.get()); } - string f = osgDB::findDataFile(model_path, opt.get()); - + if (f.empty()) { + f = simgear::SGModelLib::findDataFile(model_path); + } + if(f.empty()) f = fgGetString("/sim/multiplay/default-model", default_model); diff --git a/src/AIModel/AIWingman.cxx b/src/AIModel/AIWingman.cxx index 6c93f3955..59617b097 100644 --- a/src/AIModel/AIWingman.cxx +++ b/src/AIModel/AIWingman.cxx @@ -215,13 +215,14 @@ bool FGAIWingman::init(bool search_in_AI_path) { 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; } @@ -277,7 +278,7 @@ double FGAIWingman::calcAngle(double range, SGGeod pos1, SGGeod pos2){ 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); @@ -312,8 +313,9 @@ void FGAIWingman::formateToAC(double dt){ 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 ) { @@ -332,7 +334,8 @@ void FGAIWingman::formateToAC(double dt){ 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); diff --git a/src/AIModel/AIWingman.hxx b/src/AIModel/AIWingman.hxx index 038df5d08..42c51094c 100644 --- a/src/AIModel/AIWingman.hxx +++ b/src/AIModel/AIWingman.hxx @@ -67,7 +67,7 @@ private: double _coeff_bnk; //dimensionless coefficient double _coeff_spd; //dimensionless coefficient - + SGPropertyNode_ptr user_WoW_node; inline void setFormate(bool f); inline void setTgtHdg(double hdg);