FlightGear next
AIShip.hxx
Go to the documentation of this file.
1/*
2 * SPDX-FileName: AIShip.hxx
3 * SPDX-FileComment: AIBase derived class creates an AI ship
4 * SPDX-FileCopyrightText: Copyright (C) 2003 David P. Culp - davidculp2@comcast.net
5 * SPDX-FileContributor: with major amendments and additions by Vivian Meazza, 2004 - 2007
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#pragma once
10
11#include <string_view>
12
13#include <simgear/scene/material/mat.hxx>
14
15#include "AIBase.hxx"
16#include "AIFlightPlan.hxx"
17
18
19class FGAIManager;
20
21class FGAIShip : public FGAIBase
22{
23public:
25 virtual ~FGAIShip() = default;
26
27 std::string_view getTypeString(void) const override { return "ship"; }
28 void readFromScenario(SGPropertyNode* scFileNode) override;
29
30 bool init(ModelSearchOrder searchOrder) override;
31 void bind() override;
32 void update(double dt) override;
33 void reinit() override;
34 double getDefaultModelRadius() override { return 200.0; }
35
36 void setRudder(float r);
37 void setRoll(double rl);
38 void ProcessFlightPlan(double dt);
39 void AccelTo(double speed);
40 void PitchTo(double angle);
41 void RollTo(double angle);
42
43#if 0
44 void YawTo(double angle);
45#endif
46
47 void ClimbTo(double altitude);
48 void TurnTo(double heading);
49 void setCurrName(const std::string&);
50 void setNextName(const std::string&);
51 void setPrevName(const std::string&);
52 void setLeadAngleGain(double g);
53 void setLeadAngleLimit(double l);
54 void setLeadAngleProp(double p);
55 void setRudderConstant(double rc);
56 void setSpeedConstant(double sc);
57 void setFixedTurnRadius(double ft);
58 void setRollFactor(double rf);
59
60 void setTunnel(bool t);
61 void setInitialTunnel(bool t);
62
63 void setWPNames();
64 void setWPPos();
65
66 double sign(double x);
67
68 bool _hdg_lock = false;
69 bool _serviceable = false;
74
75 double _rudder_constant = 0.0;
76 double _speed_constant = 0.0;
79 double _missed_range = 0.0;
80 double _tow_angle;
81 double _wait_count = 0.0;
84
85 FGAIWaypoint* prev = nullptr; // the one behind you
86 FGAIWaypoint* curr = nullptr; // the one ahead
87 FGAIWaypoint* next = nullptr; // the next plus 1
88
89protected:
90
91private:
92 void setRepeat(bool r);
93 void setRestart(bool r);
94 void setMissed(bool m);
95
96 void setServiceable(bool s);
97 void Run(double dt);
98 void setStartTime(const std::string&);
99 void setUntilTime(const std::string&);
100 //void setWPPos();
101 void setWPAlt();
102 void setXTrackError();
103
104 SGGeod wppos;
105
106 double getRange(double lat, double lon, double lat2, double lon2) const;
107 double getCourse(double lat, double lon, double lat2, double lon2) const;
108 double getDaySeconds();
109 double processTimeString(const std::string& time);
110
111 bool initFlightPlan();
112 bool advanceFlightPlan(double elapsed_sec, double day_sec);
113
114 float _rudder = 0.0f;
115 float _tgt_rudder = 0.0f;
116
117 double _roll_constant, _roll_factor;
118 double _sp_turn_radius_ft = 0.0;
119 double _rd_turn_radius_ft = 0.0;
120 double _fixed_turn_radius = 0.0;
121 double _old_range, _range_rate;
122 double _missed_time_sec;
123 double _start_sec = 0.0;
124 double _day;
125 double _lead_angle;
126 double _lead_angle_gain = 0.0;
127 double _lead_angle_limit = 0.0;
128 double _proportion = 0.0;
129 double _course = 0.0;
130 double _xtrack_error;
131 double _curr_alt, _prev_alt;
132
133 std::string _prev_name, _curr_name, _next_name;
134 std::string _start_time, _until_time;
135
136 bool _repeat = false;
137 bool _fp_init;
138 bool _missed;
139};
double altitude
Definition ADA.cxx:46
#define p(x)
FGAIBase(object_type ot, bool enableHot)
Definition AIBase.cxx:146
double speed
Definition AIBase.hxx:216
ModelSearchOrder
Definition AIBase.hxx:63
void readFromScenario(SGPropertyNode *scFileNode) override
Definition AIShip.cxx:63
double _missed_range
Definition AIShip.hxx:79
double _tow_angle
Definition AIShip.hxx:80
void setLeadAngleProp(double p)
Definition AIShip.cxx:537
void PitchTo(double angle)
Definition AIShip.cxx:436
FGAIWaypoint * next
Definition AIShip.hxx:87
bool _waiting
Definition AIShip.hxx:70
double _next_run
Definition AIShip.hxx:83
void RollTo(double angle)
Definition AIShip.cxx:441
void setCurrName(const std::string &)
Definition AIShip.cxx:483
FGAIWaypoint * curr
Definition AIShip.hxx:86
void setSpeedConstant(double sc)
Definition AIShip.cxx:547
double _wp_range
Definition AIShip.hxx:82
void ClimbTo(double altitude)
Definition AIShip.cxx:451
void setWPNames()
Definition AIShip.cxx:573
void setRollFactor(double rf)
Definition AIShip.cxx:557
void setNextName(const std::string &)
Definition AIShip.cxx:489
bool _tunnel
Definition AIShip.hxx:72
bool _new_waypoint
Definition AIShip.hxx:71
void setLeadAngleLimit(double l)
Definition AIShip.cxx:532
void update(double dt) override
Definition AIShip.cxx:199
void bind() override
Definition AIShip.cxx:124
void TurnTo(double heading)
Definition AIShip.cxx:457
void AccelTo(double speed)
Definition AIShip.cxx:431
double getDefaultModelRadius() override
Definition AIShip.hxx:34
double _dt_count
Definition AIShip.hxx:83
bool _initial_tunnel
Definition AIShip.hxx:72
bool _restart
Definition AIShip.hxx:73
void ProcessFlightPlan(double dt)
Definition AIShip.cxx:622
FGAIShip(object_type ot=object_type::otShip)
Definition AIShip.cxx:30
double sign(double x)
Definition AIShip.cxx:464
void setLeadAngleGain(double g)
Definition AIShip.cxx:527
double _missed_count
Definition AIShip.hxx:82
virtual ~FGAIShip()=default
bool _serviceable
Definition AIShip.hxx:69
void setRudder(float r)
Definition AIShip.cxx:517
void setRudderConstant(double rc)
Definition AIShip.cxx:542
double _elevation_ft
Definition AIShip.hxx:78
void setPrevName(const std::string &)
Definition AIShip.cxx:495
bool init(ModelSearchOrder searchOrder) override
Definition AIShip.cxx:92
std::string_view getTypeString(void) const override
Definition AIShip.hxx:27
void setTunnel(bool t)
Definition AIShip.cxx:568
double _speed_constant
Definition AIShip.hxx:76
double _wait_count
Definition AIShip.hxx:81
double _limit
Definition AIShip.hxx:77
void setFixedTurnRadius(double ft)
Definition AIShip.cxx:552
void setWPPos()
Definition AIShip.cxx:1051
void setInitialTunnel(bool t)
Definition AIShip.cxx:562
double _hdg_constant
Definition AIShip.hxx:77
void reinit() override
Definition AIShip.cxx:98
bool _hdg_lock
Definition AIShip.hxx:68
FGAIWaypoint * prev
Definition AIShip.hxx:85
void setRoll(double rl)
Definition AIShip.cxx:522
double _rudder_constant
Definition AIShip.hxx:75