]> git.mxchange.org Git - flightgear.git/blobdiff - src/ATC/AIMgr.hxx
Modified Files:
[flightgear.git] / src / ATC / AIMgr.hxx
index 3933348f88338b1dac7340095c3cb51321fc04b7..6bc81a10b9afd33da00cf5366e2415469d24d2d9 100644 (file)
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-/*****************************************************************
-*
-* WARNING - Curt has some ideas about AI traffic so anything in here
-* may get rewritten or scrapped.  Contact Curt curt@flightgear.org 
-* before spending any time or effort on this code!!!
-*
-******************************************************************/
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 #ifndef _FG_AIMGR_HXX
 #define _FG_AIMGR_HXX
 
-#include <Main/fgfs.hxx>
+#include <simgear/structure/subsystem_mgr.hxx>
+
 #include <Main/fg_props.hxx>
 
 #include <list>
 
+#include "ATCmgr.hxx"
 #include "AIEntity.hxx"
 
 SG_USING_STD(list);
 
-class FGAIMgr : public FGSubsystem
+
+class FGAIMgr : public SGSubsystem
 {
 
 private:
+       FGATCMgr* ATC;  
+       // This is purely for synactic convienience to avoid writing globals->get_ATC_mgr()-> all through the code!
 
     // A list of pointers to all currently active AI stuff
     typedef list <FGAIEntity*> ai_list_type;
@@ -56,22 +53,42 @@ private:
     // Any member function of FGATCMgr is permitted to leave this iterator pointing
     // at any point in or at the end of the list.
     // Hence any new access must explicitly first check for atc_list.end() before dereferencing.
+       
+       // A list of airport or airplane ID's
+       typedef list < string > ID_list_type;
+       typedef ID_list_type::iterator ID_list_iterator;
+
+       // Temporary storage of ID of planes scheduled for removeal
+       ID_list_type removalList;
+       
+       // A map of airport-IDs that have taxiway network files against bucket number
+       typedef map < int, ID_list_type* > ai_apt_map_type;
+       typedef ai_apt_map_type::iterator ai_apt_map_iterator;
+       ai_apt_map_type facilities;
+       
+       // A map of airport ID's that we've activated AI traffic at
+       typedef map < string, int > ai_activated_map_type;
+       typedef ai_activated_map_type::iterator ai_activated_map_iterator;
+       ai_activated_map_type activated;
+       
+       // AI traffic lists mapped by airport
+       typedef map < string, ai_list_type > ai_traffic_map_type;
+       typedef ai_traffic_map_type::iterator ai_traffic_map_iterator;
+       ai_traffic_map_type traffic;
+       
+       // A map of callsigns that we have used (eg CFGFS or N0546D - the code will generate Cessna-four-six-delta from this later)
+       typedef map < string, int > ai_callsigns_map_type;
+       typedef ai_callsigns_map_type::iterator ai_callsigns_map_iterator;
+       ai_callsigns_map_type ai_callsigns_used;
 
     // Position of the Users Aircraft
-    // (This may be needed to calculate the distance from the user when deciding which 3D model to render)
-    double current_lon;
-    double current_lat;
-    double current_elev;
+    double lon;
+    double lat;
+    double elev;
     // Pointers to current users position
-    SGPropertyNode *current_lon_node;
-    SGPropertyNode *current_lat_node;
-    SGPropertyNode *current_elev_node;
-
-    //FGATIS atis;
-    //FGGround ground;
-    //FGTower tower;
-    //FGApproach approach;
-    //FGDeparture departure;
+    SGPropertyNode_ptr lon_node;
+    SGPropertyNode_ptr lat_node;
+    SGPropertyNode_ptr elev_node;
 
 public:
 
@@ -84,13 +101,39 @@ public:
 
     void unbind();
 
-    void update(int dt);
+    void update(double dt);
+       
+       // Signal that it is OK to remove a plane of callsign s
+       // (To be called by the plane itself).
+       void ScheduleRemoval(const string& s);
 
 private:
+       
+        osg::ref_ptr<osg::Node> _defaultModel;  // Cessna 172!
+       osg::ref_ptr<osg::Node> _piperModel;    // pa28-161
+
+       bool initDone;  // Hack - guard against update getting called before init
 
     // Remove a class from the ai_list and delete it from memory
     //void RemoveFromList(const char* id, atc_type tp);
-
+       
+       // Activate AI traffic at an airport
+       void ActivateAirport(const string& ident);
+       
+       // Hack - Generate AI traffic at an airport with no facilities file, with the first plane being at least min_dist out.
+       void GenerateSimpleAirportTraffic(const string& ident, double min_dist = 0.0);
+       
+       // Search for valid airports in the vicinity of the user and activate them if necessary
+       void SearchByPos(double range);
+       
+       string GenerateCallsign();
+       
+       string GenerateUniqueCallsign();
+       
+       string GenerateShortForm(const string& callsign, const string& plane_str = "Cessna-", bool local = false);
+       
+       // TODO - implement a proper robust system for registering and loading AI GA aircraft models
+       bool _havePiperModel;
 };
 
 #endif  // _FG_AIMGR_HXX