]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGControls.h
5/26/2000 updated from Jon and Tony.
[flightgear.git] / src / FDM / JSBSim / FGControls.h
1 // controls.hxx -- defines a standard interface to all flight sim controls
2 //
3 // Written by Curtis Olson, started May 1997.
4 //
5 // Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22 // (Log is kept at end of this file)
23
24
25 #ifndef _CONTROLS_HXX
26 #define _CONTROLS_HXX
27
28
29 #ifndef __cplusplus                                                          
30 # error This library requires C++
31 #endif                                   
32
33 // Define a structure containing the control parameters
34
35 class FGControls {
36
37 public:
38
39     static const int ALL_ENGINES = -1;
40     static const int MAX_ENGINES = 10;
41
42     static const int ALL_WHEELS = -1;
43     static const int MAX_WHEELS = 3;
44
45 private:
46
47     double aileron;
48     double elevator;
49     double elevator_trim;
50     double rudder;
51     double throttle[MAX_ENGINES];
52     double brake[MAX_WHEELS];
53
54 public:
55
56     FGControls();
57     ~FGControls();
58
59     // Query functions
60     inline double get_aileron() const { return aileron; }
61     inline double get_elevator() const { return elevator; }
62     inline double get_elevator_trim() const { return elevator_trim; }
63     inline double get_rudder() const { return rudder; }
64     inline double get_throttle(int engine) const { return throttle[engine]; }
65     inline double get_brake(int wheel) const { return brake[wheel]; }
66
67     // Update functions
68     inline void set_aileron( double pos ) {
69         aileron = pos;
70         if ( aileron < -1.0 ) aileron = -1.0;
71         if ( aileron >  1.0 ) aileron =  1.0;
72     }
73     inline void move_aileron( double amt ) {
74         aileron += amt;
75         if ( aileron < -1.0 ) aileron = -1.0;
76         if ( aileron >  1.0 ) aileron =  1.0;
77     }
78     inline void set_elevator( double pos ) {
79         elevator = pos;
80         if ( elevator < -1.0 ) elevator = -1.0;
81         if ( elevator >  1.0 ) elevator =  1.0;
82     }
83     inline void move_elevator( double amt ) {
84         elevator += amt;
85         if ( elevator < -1.0 ) elevator = -1.0;
86         if ( elevator >  1.0 ) elevator =  1.0;
87     }
88     inline void set_elevator_trim( double pos ) {
89         elevator_trim = pos;
90         if ( elevator_trim < -1.0 ) elevator_trim = -1.0;
91         if ( elevator_trim >  1.0 ) elevator_trim =  1.0;
92     }
93     inline void move_elevator_trim( double amt ) {
94         elevator_trim += amt;
95         if ( elevator_trim < -1.0 ) elevator_trim = -1.0;
96         if ( elevator_trim >  1.0 ) elevator_trim =  1.0;
97     }
98     inline void set_rudder( double pos ) {
99         rudder = pos;
100         if ( rudder < -1.0 ) rudder = -1.0;
101         if ( rudder >  1.0 ) rudder =  1.0;
102     }
103     inline void move_rudder( double amt ) {
104         rudder += amt;
105         if ( rudder < -1.0 ) rudder = -1.0;
106         if ( rudder >  1.0 ) rudder =  1.0;
107     }
108     inline void set_throttle( int engine, double pos ) {
109         if ( engine == ALL_ENGINES ) {
110             for ( int i = 0; i < MAX_ENGINES; i++ ) {
111                 throttle[i] = pos;
112                 if ( throttle[i] < 0.0 ) throttle[i] = 0.0;
113                 if ( throttle[i] >  1.0 ) throttle[i] =  1.0;
114             }
115         } else {
116             if ( (engine >= 0) && (engine < MAX_ENGINES) ) {
117                 throttle[engine] = pos;
118                 if ( throttle[engine] < 0.0 ) throttle[engine] = 0.0;
119                 if ( throttle[engine] >  1.0 ) throttle[engine] =  1.0;
120             }
121         }
122     }
123     inline void move_throttle( int engine, double amt ) {
124         if ( engine == ALL_ENGINES ) {
125             for ( int i = 0; i < MAX_ENGINES; i++ ) {
126                 throttle[i] += amt;
127                 if ( throttle[i] < 0.0 ) throttle[i] = 0.0;
128                 if ( throttle[i] >  1.0 ) throttle[i] =  1.0;
129             }
130         } else {
131             if ( (engine >= 0) && (engine < MAX_ENGINES) ) {
132                 throttle[engine] += amt;
133                 if ( throttle[engine] < 0.0 ) throttle[engine] = 0.0;
134                 if ( throttle[engine] >  1.0 ) throttle[engine] =  1.0;
135             }
136         }
137     }
138     inline void set_brake( int wheel, double pos ) {
139         if ( wheel == ALL_WHEELS ) {
140             for ( int i = 0; i < MAX_WHEELS; i++ ) {
141                 brake[i] = pos;
142                 if ( brake[i] < 0.0 ) brake[i] = 0.0;
143                 if ( brake[i] >  1.0 ) brake[i] =  1.0;
144             }
145         } else {
146             if ( (wheel >= 0) && (wheel < MAX_WHEELS) ) {
147                 brake[wheel] = pos;
148                 if ( brake[wheel] < 0.0 ) brake[wheel] = 0.0;
149                 if ( brake[wheel] >  1.0 ) brake[wheel] =  1.0;
150             }
151         }
152     }
153     inline void move_brake( int wheel, double amt ) {
154         if ( wheel == ALL_WHEELS ) {
155             for ( int i = 0; i < MAX_WHEELS; i++ ) {
156                 brake[i] += amt;
157                 if ( brake[i] < 0.0 ) brake[i] = 0.0;
158                 if ( brake[i] >  1.0 ) brake[i] =  1.0;
159             }
160         } else {
161             if ( (wheel >= 0) && (wheel < MAX_WHEELS) ) {
162                 brake[wheel] += amt;
163                 if ( brake[wheel] < 0.0 ) brake[wheel] = 0.0;
164                 if ( brake[wheel] >  1.0 ) brake[wheel] =  1.0;
165             }
166         }
167     }
168 };
169
170
171 extern FGControls controls;
172
173
174 #endif // _CONTROLS_HXX
175
176
177 // $Log$
178 // Revision 1.10  2000/05/27 03:48:15  curt
179 // 5/26/2000 updated from Jon and Tony.
180 //
181 // Revision 1.5  2000/05/12 22:45:35  jsb
182 // Removed extraneous namespace identifiers and header files
183 //
184 // Revision 1.4  2000/04/26 10:55:57  jsb
185 // Made changes as required by Curt to install JSBSim into FGFS
186 //
187 // Revision 1.7  2000/04/24 21:49:07  curt
188 // Updated JSBsim code.
189 //
190 // Revision 1.3  2000/04/15 13:16:54  jsb
191 // In good shape, now, changes to Coefficient and aircraft, mostly, with new commands added and inputs and outputs separated.
192 //
193 // Revision 1.6  1999/09/07 21:15:45  curt
194 // Updates to get engine working.
195 //
196 // Revision 1.1  1999/02/13 01:12:03  curt
197 // Initial Revision.
198 //
199 // Revision 1.3  1998/12/05 16:13:13  curt
200 // Renamed class fgCONTROLS to class FGControls.
201 //
202 // Revision 1.2  1998/10/25 14:08:42  curt
203 // Turned "struct fgCONTROLS" into a class, with inlined accessor functions.
204 //
205 // Revision 1.1  1998/10/18 01:51:07  curt
206 // c++-ifying ...
207 //
208 // Revision 1.17  1998/09/29 14:57:00  curt
209 // c++-ified some comments.
210 //
211 // Revision 1.16  1998/09/29 02:01:32  curt
212 // Added a brake.
213 //
214 // Revision 1.15  1998/04/25 22:06:27  curt
215 // Edited cvs log messages in source files ... bad bad bad!
216 //
217 // Revision 1.14  1998/04/22 13:26:19  curt
218 // C++ - ifing the code a bit.
219 //
220 // Revision 1.13  1998/04/21 17:02:35  curt
221 // Prepairing for C++ integration.
222 //
223 // Revision 1.12  1998/02/09 22:56:48  curt
224 // Removed "depend" files from cvs control.  Other minor make tweaks.
225 //
226 // Revision 1.11  1998/02/07 15:29:36  curt
227 // Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
228 // <chotchkiss@namg.us.anritsu.com>
229 //
230 // Revision 1.10  1998/01/27 00:47:52  curt
231 // Incorporated Paul Bleisch's <pbleisch@acm.org> new debug message
232 // system and commandline/config file processing code.
233 //
234 // Revision 1.9  1998/01/22 02:59:31  curt
235 // Changed #ifdef FILE_H to #ifdef _FILE_H
236 //
237 // Revision 1.8  1998/01/19 18:40:22  curt
238 // Tons of little changes to clean up the code and to remove fatal errors
239 // when building with the c++ compiler.
240 //
241 // Revision 1.7  1997/12/15 23:54:36  curt
242 // Add xgl wrappers for debugging.
243 // Generate terrain normals on the fly.
244 //
245 // Revision 1.6  1997/12/10 22:37:41  curt
246 // Prepended "fg" on the name of all global structures that didn't have it yet.
247 // i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
248 //
249 // Revision 1.5  1997/08/27 03:30:02  curt
250 // Changed naming scheme of basic shared structures.
251 //
252 // Revision 1.4  1997/07/23 21:52:18  curt
253 // Put comments around the text after an #endif for increased portability.
254 //
255 // Revision 1.3  1997/05/31 19:16:27  curt
256 // Elevator trim added.
257 //
258 // Revision 1.2  1997/05/23 15:40:33  curt
259 // Added GNU copyright headers.
260 //
261 // Revision 1.1  1997/05/16 15:59:48  curt
262 // Initial revision.
263 //