X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAICarrier.hxx;h=da3380502fc44e5e045b7c48b5e9b39071052162;hb=04f09258c4042105044e9095a0dbbbdc87a3b505;hp=0beb52010086f9145ee1ee9b08a4d6a85a2c3ed6;hpb=9c28ed02577e6d32e1365567107adbd048f3d743;p=flightgear.git diff --git a/src/AIModel/AICarrier.hxx b/src/AIModel/AICarrier.hxx index 0beb52010..da3380502 100644 --- a/src/AIModel/AICarrier.hxx +++ b/src/AIModel/AICarrier.hxx @@ -16,18 +16,18 @@ // // 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. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #ifndef _FG_AICARRIER_HXX #define _FG_AICARRIER_HXX #include #include -#include + #include -SG_USING_STD(string); -SG_USING_STD(list); +using std::string; +using std::list; #include "AIShip.hxx" @@ -37,60 +37,19 @@ SG_USING_STD(list); class FGAIManager; class FGAICarrier; -class FGAICarrierHardware : public ssgBase { +class FGAICarrier : public FGAIShip { public: - enum Type { Catapult, Wire, Solid }; - - FGAICarrier *carrier; - int id; - Type type; - - static FGAICarrierHardware* newCatapult(FGAICarrier *c) { - FGAICarrierHardware* ch = new FGAICarrierHardware; - ch->carrier = c; - ch->type = Catapult; - ch->id = unique_id++; - return ch; - } - static FGAICarrierHardware* newWire(FGAICarrier *c) { - FGAICarrierHardware* ch = new FGAICarrierHardware; - ch->carrier = c; - ch->type = Wire; - ch->id = unique_id++; - return ch; - } - static FGAICarrierHardware* newSolid(FGAICarrier *c) { - FGAICarrierHardware* ch = new FGAICarrierHardware; - ch->carrier = c; - ch->type = Solid; - ch->id = unique_id++; - return ch; - } + FGAICarrier(); + virtual ~FGAICarrier(); -private: - static int unique_id; -}; + virtual void readFromScenario(SGPropertyNode* scFileNode); -class FGAICarrier : public FGAIShip { - -public: - - FGAICarrier(FGAIManager* mgr); - ~FGAICarrier(); - - void setSolidObjects(const list& solid_objects); - void setWireObjects(const list& wire_objects); - void setCatapultObjects(const list& catapult_objects); - void setParkingPositions(const list& p); - void setSign(const string& ); - void setFlolsOffset(const Point3D& off); - void setTACANChannelID(const string &); - - void getVelocityWrtEarth(sgdVec3& v, sgdVec3& omega, sgdVec3& pivot); - virtual void bind(); + void setSign(const string& ); + void setTACANChannelID(const string &); + + virtual void bind(); virtual void unbind(); - void UpdateFlols ( const sgdMat3& trans ); void UpdateWind ( double dt ); void setWind_from_east( double fps ); void setWind_from_north( double fps ); @@ -98,57 +57,60 @@ public: void setMinLat( double deg ); void setMaxLong( double deg ); void setMinLong( double deg ); + void setMPControl( bool c ); + void setAIControl( bool c ); void TurnToLaunch(); + void TurnToRecover(); void TurnToBase(); void ReturnToBox(); - float Horizon(float h); + bool OutsideBox(); - bool OutsideBox(); - - - bool init(); + bool init(bool search_in_AI_path=false); - bool getParkPosition(const string& id, Point3D& geodPos, - double& hdng, sgdVec3 uvw); + virtual const char* getTypeString(void) const { return "carrier"; } -private: + bool getParkPosition(const string& id, SGGeod& geodPos, + double& hdng, SGVec3d& uvw); - void update(double dt); - void mark_nohot(ssgEntity*); - - bool mark_wires(ssgEntity*, const list&, bool = false); - bool mark_cat(ssgEntity*, const list&, bool = false); - bool mark_solid(ssgEntity*, const list&, bool = false); - double wind_from_east; // fps +private: + /// Is sufficient to be private, stores a possible position to place an + /// aircraft on start + struct ParkPosition { + ParkPosition(const ParkPosition& pp) + : name(pp.name), offset(pp.offset), heading_deg(pp.heading_deg) + {} + ParkPosition(const string& n, const SGVec3d& off = SGVec3d(), double heading = 0) + : name(n), offset(off), heading_deg(heading) + {} + string name; + SGVec3d offset; + double heading_deg; + }; + + + void update(double dt); + double wind_from_east; // fps double wind_from_north; // fps double rel_wind_speed_kts; double rel_wind_from_deg; - - - list solid_objects; // List of solid object names - list wire_objects; // List of wire object names - list catapult_objects; // List of catapult object names - list ppositions; // List of positions where an aircraft can start. - string sign; // The sign of this carrier. - - // Velocity wrt earth. - sgdVec3 vel_wrt_earth; - sgdVec3 rot_wrt_earth; - sgdVec3 rot_pivot_wrt_earth; - - - // these describe the flols - Point3D flols_off; - - double dist; // the distance of the eyepoint from the flols - double angle; - int source; // the flols light which is visible at the moment + + + + list ppositions; // List of positions where an aircraft can start. + string sign; // The sign of this carrier. + + // these describe the flols + SGVec3d flols_off; + + double dist; // the distance of the eyepoint from the flols + double angle; + int source; // the flols light which is visible at the moment bool wave_off_lights; - - // these are for manoeuvring the carrier - Point3D carrierpos; - Point3D initialpos; - + bool in_to_wind; + + // these are for maneuvering the carrier + SGGeod mOpBoxPos; + double wind_speed_from_north_kts ; double wind_speed_from_east_kts ; double wind_speed_kts; //true wind speed @@ -156,10 +118,13 @@ private: double rel_wind; double max_lat, min_lat, max_long, min_long; double base_course, base_speed; - + bool turn_to_launch_hdg; + bool turn_to_recovery_hdg; + bool turn_to_base_course; bool returning; // set if the carrier is returning to an operating box - bool InToWind(); // set if the carrier is in to wind + bool InToWind(); // set if the carrier is in to wind + bool MPControl, AIControl; SGPropertyNode_ptr _longitude_node; @@ -167,17 +132,22 @@ private: SGPropertyNode_ptr _altitude_node; SGPropertyNode_ptr _surface_wind_from_deg_node; SGPropertyNode_ptr _surface_wind_speed_node; - + SGPropertyNode_ptr _launchbar_state_node; // this is for tacan - + string TACAN_channel_id; - + // these are for moving the elevators void UpdateElevator( double dt, double transition_time); - double step; double pos_norm, raw_pos_norm; double transition_time, time_constant; bool elevators; + + // these are for moving the jet blast deflectors + void UpdateJBD( double dt, double jbd_transition_time); + double jbd_pos_norm, raw_jbd_pos_norm; + double jbd_transition_time, jbd_time_constant; + bool jbd; }; #endif // _FG_AICARRIER_HXX