]> git.mxchange.org Git - flightgear.git/blob - Controls/controls.cxx
058d76eb86b5cc90820c78a080f2e3b992e03400
[flightgear.git] / Controls / controls.cxx
1 // controls.cxx -- 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 #include <Controls/controls.hxx>
26 #include <Aircraft/aircraft.hxx>
27
28
29 fgCONTROLS cur_control_params;
30
31
32 void fgControlsInit( void ) {
33     int i;
34     fgCONTROLS *c;
35     c = current_aircraft.controls;
36
37     FG_Elevator = 0.0;
38     FG_Elev_Trim = 1.969572E-03;
39     FG_Aileron  = 0.0;
40     FG_Rudder   = 0.0;
41
42     for ( i = 0; i < FG_MAX_ENGINES; i++ ) {
43         FG_Throttle[i] = 0.0;
44     }
45
46     FG_Brake_Amt = 0.0;
47 }
48
49
50 void fgElevMove(double amt) {
51     fgCONTROLS *c;
52     c = current_aircraft.controls;
53
54     FG_Elevator += amt;
55
56     if ( FG_Elevator < -1.0 ) FG_Elevator = -1.0;
57     if ( FG_Elevator >  1.0 ) FG_Elevator =  1.0;
58 }
59
60 void fgElevSet(double pos) {
61     fgCONTROLS *c;
62     c = current_aircraft.controls;
63
64     FG_Elevator = pos;
65
66     if ( FG_Elevator < -1.0 ) FG_Elevator = -1.0;
67     if ( FG_Elevator >  1.0 ) FG_Elevator =  1.0;
68 }
69
70 void fgElevTrimMove(double amt) {
71     fgCONTROLS *c;
72     c = current_aircraft.controls;
73
74     FG_Elev_Trim += amt;
75
76     if ( FG_Elev_Trim < -1.0 ) FG_Elev_Trim = -1.0;
77     if ( FG_Elev_Trim >  1.0 ) FG_Elev_Trim =  1.0;
78 }
79
80 void fgElevTrimSet(double pos) {
81     fgCONTROLS *c;
82     c = current_aircraft.controls;
83
84     FG_Elev_Trim = pos;
85
86     if ( FG_Elev_Trim < -1.0 ) FG_Elev_Trim = -1.0;
87     if ( FG_Elev_Trim >  1.0 ) FG_Elev_Trim =  1.0;
88 }
89
90 void fgAileronMove(double amt) {
91     fgCONTROLS *c;
92     c = current_aircraft.controls;
93
94     FG_Aileron += amt;
95
96     if ( FG_Aileron < -1.0 ) FG_Aileron = -1.0;
97     if ( FG_Aileron >  1.0 ) FG_Aileron =  1.0;
98 }
99
100 void fgAileronSet(double pos) {
101     fgCONTROLS *c;
102     c = current_aircraft.controls;
103
104     FG_Aileron = pos;
105
106     if ( FG_Aileron < -1.0 ) FG_Aileron = -1.0;
107     if ( FG_Aileron >  1.0 ) FG_Aileron =  1.0;
108 }
109
110 void fgRudderMove(double amt) {
111     fgCONTROLS *c;
112     c = current_aircraft.controls;
113
114     FG_Rudder += amt;
115
116     if ( FG_Rudder < -1.0 ) FG_Rudder = -1.0;
117     if ( FG_Rudder >  1.0 ) FG_Rudder =  1.0;
118 }
119
120 void fgRudderSet(double pos) {
121     fgCONTROLS *c;
122     c = current_aircraft.controls;
123
124     FG_Rudder = pos;
125
126     if ( FG_Rudder < -1.0 ) FG_Rudder = -1.0;
127     if ( FG_Rudder >  1.0 ) FG_Rudder =  1.0;
128 }
129
130 void fgThrottleMove(int engine, double amt) {
131     int i;
132     fgCONTROLS *c;
133     c = current_aircraft.controls;
134
135     if ( engine == FG_Throttle_All ) {
136         for ( i = 0; i < FG_MAX_ENGINES; i++ ) {
137             FG_Throttle[i] += amt;
138             if ( FG_Throttle[i] < 0.0 ) FG_Throttle[i] = 0.0;
139             if ( FG_Throttle[i] > 1.0 ) FG_Throttle[i] = 1.0;
140         }
141     } else {
142         if ( (engine >= 0) && (engine < FG_MAX_ENGINES) ) {
143             FG_Throttle[engine] += amt;
144             if ( FG_Throttle[engine] < 0.0 ) FG_Throttle[engine] = 0.0;
145             if ( FG_Throttle[engine] > 1.0 ) FG_Throttle[engine] = 1.0;
146         }
147     }
148 }
149
150 void fgThrottleSet(int engine, double pos) {
151     int i;
152     fgCONTROLS *c;
153     c = current_aircraft.controls;
154
155     if ( engine == FG_Throttle_All ) {
156         for ( i = 0; i < FG_MAX_ENGINES; i++ ) {
157             FG_Throttle[i] = pos;
158             if ( FG_Throttle[i] < 0.0 ) FG_Throttle[i] = 0.0;
159             if ( FG_Throttle[i] > 1.0 ) FG_Throttle[i] = 1.0;
160         }
161     } else {
162         if ( (engine >= 0) && (engine < FG_MAX_ENGINES) ) {
163             FG_Throttle[engine] = pos;
164             if ( FG_Throttle[engine] < 0.0 ) FG_Throttle[engine] = 0.0;
165             if ( FG_Throttle[engine] > 1.0 ) FG_Throttle[engine] = 1.0;
166         }
167     }
168 }
169
170
171 double fgBrakeGet( void ) {
172     fgCONTROLS *c;
173     c = current_aircraft.controls;
174
175     return FG_Brake_Amt;
176 }
177
178
179 void fgBrakeSet( double brake_amt ) {
180     fgCONTROLS *c;
181     c = current_aircraft.controls;
182
183     FG_Brake_Amt = brake_amt;
184 }
185
186
187 // $Log$
188 // Revision 1.1  1998/10/18 01:51:05  curt
189 // c++-ifying ...
190 //
191 // Revision 1.8  1998/09/29 02:01:31  curt
192 // Added a brake.
193 //
194 // Revision 1.7  1998/02/07 15:29:36  curt
195 // Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
196 // <chotchkiss@namg.us.anritsu.com>
197 //
198 // Revision 1.6  1998/01/19 19:27:02  curt
199 // Merged in make system changes from Bob Kuehne <rpk@sgi.com>
200 // This should simplify things tremendously.
201 //
202 // Revision 1.5  1998/01/19 18:40:22  curt
203 // Tons of little changes to clean up the code and to remove fatal errors
204 // when building with the c++ compiler.
205 //
206 // Revision 1.4  1997/12/10 22:37:41  curt
207 // Prepended "fg" on the name of all global structures that didn't have it yet.
208 // i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
209 //
210 // Revision 1.3  1997/08/27 03:30:01  curt
211 // Changed naming scheme of basic shared structures.
212 //
213 // Revision 1.2  1997/06/21 17:12:48  curt
214 // Capitalized subdirectory names.
215 //
216 // Revision 1.1  1997/05/31 19:24:04  curt
217 // Initial revision.
218 //
219