1 // FGAIShip - AIBase derived class creates an AI ship
3 // Written by David Culp, started November 2003.
4 // with major amendments and additions by Vivian Meazza, 2004 - 2007
6 // Copyright (C) 2003 David P. Culp - davidculp2@comcast.net
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 #ifndef _FG_AISHIP_HXX
23 #define _FG_AISHIP_HXX
26 #include "AIFlightPlan.hxx"
27 #include <simgear/scene/material/mat.hxx>
31 class FGAIShip : public FGAIBase {
35 FGAIShip(object_type ot = otShip);
38 virtual void readFromScenario(SGPropertyNode* scFileNode);
40 virtual bool init(bool search_in_AI_path=false);
42 virtual void unbind();
43 virtual void update(double dt);
44 void setFlightPlan(FGAIFlightPlan* f);
45 void setName(const string&);
46 void setRudder(float r);
47 void setRoll(double rl);
48 void ProcessFlightPlan( double dt);
49 void AccelTo(double speed);
50 void PitchTo(double angle);
51 void RollTo(double angle);
52 void YawTo(double angle);
53 void ClimbTo(double altitude);
54 void TurnTo(double heading);
55 void setCurrName(const string&);
56 void setNextName(const string&);
57 void setPrevName(const string&);
58 void setLeadAngleGain(double g);
59 void setLeadAngleLimit(double l);
60 void setLeadAngleProp(double p);
61 void setRudderConstant(double rc);
62 void setSpeedConstant(double sc);
63 void setFixedTurnRadius(double ft);
64 void setTunnel(bool t);
65 void setInitialTunnel(bool t);
69 double sign(double x);
75 bool _tunnel, _initial_tunnel;
78 virtual const char* getTypeString(void) const { return "ship"; }
79 double _rudder_constant, _speed_constant, _hdg_constant, _limit ;
80 double _elevation_m, _elevation_ft;
81 double _missed_range, _tow_angle, _wait_count, _missed_count,_wp_range;
82 double _dt_count, _next_run;
84 FGAIFlightPlan::waypoint* prev; // the one behind you
85 FGAIFlightPlan::waypoint* curr; // the one ahead
86 FGAIFlightPlan::waypoint* next; // the next plus 1
90 string _name; // The name of this ship.
96 virtual void reinit() { init(); }
98 void setRepeat(bool r);
99 void setRestart(bool r);
100 void setMissed(bool m);
102 void setServiceable(bool s);
104 void setStartTime(const string&);
105 void setUntilTime(const string&);
108 void setXTrackError();
112 const SGMaterial* _material;
114 double getRange(double lat, double lon, double lat2, double lon2) const;
115 double getCourse(double lat, double lon, double lat2, double lon2) const;
116 double getDaySeconds();
117 double processTimeString(const string& time);
119 bool initFlightPlan();
120 bool advanceFlightPlan (double elapsed_sec, double day_sec);
122 float _rudder, _tgt_rudder;
124 double _roll_constant, _roll_factor;
125 double _sp_turn_radius_ft, _rd_turn_radius_ft, _fixed_turn_radius;
126 double _old_range, _range_rate;
127 double _missed_time_sec;
131 double _lead_angle_gain, _lead_angle_limit, _proportion;
133 double _xtrack_error;
134 double _curr_alt, _prev_alt;
136 string _prev_name, _curr_name, _next_name;
138 string _start_time, _until_time;
147 #endif // _FG_AISHIP_HXX