]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIEscort.cxx
Merge branch 'next' into durk-atc
[flightgear.git] / src / AIModel / AIEscort.cxx
index 760378e78e6155206f830bb425877e4bb385e5e1..2125b6ac478659513301e975e9f0c877ed7ccfc7 100644 (file)
@@ -35,7 +35,6 @@
 #include <Main/viewer.hxx>
 
 #include <Scenery/scenery.hxx>
-#include <Scenery/tilemgr.hxx>
 
 #include "AIEscort.hxx"
 
@@ -44,20 +43,18 @@ using std::string;
 FGAIEscort::FGAIEscort() :
 FGAIShip(otEscort),
 
-_selected_ac(0),
 _relbrg (0),
-_stn_truebrg(0),
 _parent_speed(0),
-_stn_limit(0),
-_stn_angle_limit(0),
-_stn_speed(0),
+_interval(0),
+_stn_truebrg(0),
 _stn_height(0),
+_stn_speed(0),
+_stn_angle_limit(0),
+_stn_limit(0),
 _max_speed(0),
-_interval(0),
 _MPControl(false),
 _patrol(false),
-_stn_deg_true(false),
-_parent("")
+_stn_deg_true(false)
 
 {
     invisible = false;
@@ -142,10 +139,13 @@ bool FGAIEscort::init(bool search_in_AI_path) {
     no_roll = false;
 
     props->setStringValue("controls/parent-name", _parent.c_str());
-    setParent();
-    pos = _tgtpos;
-    speed = _parent_speed;
-    hdg = _parent_hdg;
+
+    if (setParentNode()){
+        setParent();
+        pos = _tgtpos;
+        speed = _parent_speed;
+        hdg = _parent_hdg;
+    }
 
     return true;
 }
@@ -196,10 +196,6 @@ void FGAIEscort::setStnPatrol(bool p) {
     _patrol = p;
 }
 
-void FGAIEscort::setParentName(const string& p) {
-    _parent = p;
-}
-
 bool FGAIEscort::getGroundElev(SGGeod inpos) {
 
     double height_m ;
@@ -233,75 +229,41 @@ bool FGAIEscort::getGroundElev(SGGeod inpos) {
 
 }
 
-void FGAIEscort::setParent() {
-
-    const SGPropertyNode *ai = fgGetNode("/ai/models", true);
-
-    for (int i = ai->nChildren() - 1; i >= -1; i--) {
-        const SGPropertyNode *model;
-
-        if (i < 0) { // last iteration: selected model
-            model = _selected_ac;
-        } else {
-            model = ai->getChild(i);
-            string path = ai->getPath();
-            const string name = model->getStringValue("name");
-
-            if (!model->nChildren()){
-                continue;
-            }
-            if (name == _parent) {
-                _selected_ac = model;  // save selected model for last iteration
-                break;
-            }
-
-        }
-        if (!model)
-            continue;
-
-    }// end for loop
-
-    if (_selected_ac != 0){
-        const string name = _selected_ac->getStringValue("name");
-        double lat = _selected_ac->getDoubleValue("position/latitude-deg");
-        double lon = _selected_ac->getDoubleValue("position/longitude-deg");
-        double elevation = _selected_ac->getDoubleValue("position/altitude-ft");
-        _MPControl = _selected_ac->getBoolValue("controls/mp-control");
-
-        _selectedpos.setLatitudeDeg(lat);
-        _selectedpos.setLongitudeDeg(lon);
-        _selectedpos.setElevationFt(elevation);
-
-        _parent_speed    = _selected_ac->getDoubleValue("velocities/speed-kts");
-        _parent_hdg      = _selected_ac->getDoubleValue("orientation/true-heading-deg");
-
-        if(!_stn_deg_true){
-            _stn_truebrg = calcTrueBearingDeg(_stn_brg, _parent_hdg);
-            _stn_relbrg = _stn_brg;
-            //cout << _name <<" set rel"<<endl;
-        } else {
-            _stn_truebrg = _stn_brg;
-            _stn_relbrg = calcRelBearingDeg(_stn_brg, _parent_hdg); 
-            //cout << _name << " set true"<<endl;
-        }
-
-        double course2;
+void FGAIEscort::setParent()
+{
+    double lat = _selected_ac->getDoubleValue("position/latitude-deg");
+    double lon = _selected_ac->getDoubleValue("position/longitude-deg");
+    double elevation = _selected_ac->getDoubleValue("position/altitude-ft");
+    _MPControl = _selected_ac->getBoolValue("controls/mp-control");
+
+    _selectedpos.setLatitudeDeg(lat);
+    _selectedpos.setLongitudeDeg(lon);
+    _selectedpos.setElevationFt(elevation);
+
+    _parent_speed    = _selected_ac->getDoubleValue("velocities/speed-kts");
+    _parent_hdg      = _selected_ac->getDoubleValue("orientation/true-heading-deg");
+
+    if(!_stn_deg_true){
+        _stn_truebrg = calcTrueBearingDeg(_stn_brg, _parent_hdg);
+        _stn_relbrg = _stn_brg;
+        //cout << _name <<" set rel"<<endl;
+    } else {
+        _stn_truebrg = _stn_brg;
+        _stn_relbrg = calcRelBearingDeg(_stn_brg, _parent_hdg); 
+        //cout << _name << " set true"<<endl;
+    }
 
-        SGGeodesy::direct( _selectedpos, _stn_truebrg, _stn_range * SG_NM_TO_METER,
-            _tgtpos, course2);
+    double course2;
 
-        _tgtpos.setElevationFt(_stn_height);
+    SGGeodesy::direct( _selectedpos, _stn_truebrg, _stn_range * SG_NM_TO_METER,
+        _tgtpos, course2);
 
-        calcRangeBearing(pos.getLatitudeDeg(), pos.getLongitudeDeg(),
-            _tgtpos.getLatitudeDeg(), _tgtpos.getLongitudeDeg(), _tgtrange, _tgtbrg);
+    _tgtpos.setElevationFt(_stn_height);
 
-        _relbrg = calcRelBearingDeg(_tgtbrg, hdg);
+    calcRangeBearing(pos.getLatitudeDeg(), pos.getLongitudeDeg(),
+        _tgtpos.getLatitudeDeg(), _tgtpos.getLongitudeDeg(), _tgtrange, _tgtbrg);
 
-    } else {
-        SG_LOG(SG_GENERAL, SG_ALERT, "AIEscort: " << _name
-            << " parent not found: dying ");
-        setDie(true);
-    }
+    _relbrg = calcRelBearingDeg(_tgtbrg, hdg);
 
 }
 
@@ -314,13 +276,6 @@ void FGAIEscort::calcRangeBearing(double lat, double lon, double lat2, double lo
     range = distance * SG_METER_TO_NM;
 }
 
-double FGAIEscort::calcRelBearingDeg(double bearing, double heading)
-{
-    double angle = bearing - heading;
-    SG_NORMALIZE_RANGE(angle, -180.0, 180.0);
-    return angle;
-}
-
 double FGAIEscort::calcTrueBearingDeg(double bearing, double heading)
 {
     double angle = bearing + heading;
@@ -328,13 +283,6 @@ double FGAIEscort::calcTrueBearingDeg(double bearing, double heading)
     return angle;
 }
 
-double FGAIEscort::calcRecipBearingDeg(double bearing)
-{
-    double angle = bearing - 180;
-    SG_NORMALIZE_RANGE(angle, 0.0, 360.0);
-    return angle;
-}
-
 SGVec3d FGAIEscort::getCartHitchPosAt(const SGVec3d& _off) const {
     double hdg = _selected_ac->getDoubleValue("orientation/true-heading-deg");
     double pitch = _selected_ac->getDoubleValue("orientation/pitch-deg");
@@ -434,10 +382,9 @@ void FGAIEscort::RunEscort(double dt){
 
     setParent();
     setStationSpeed();
-    //getGroundElev(pos);
 
     _dt_count = 0;
 
 }
 
-// end AIGroundvehicle
+// end AIEscort