]> git.mxchange.org Git - flightgear.git/blob - src/Controls/controls.hxx
Add speed-brake and spoilers controlls
[flightgear.git] / src / Controls / controls.hxx
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
23
24 #ifndef _CONTROLS_HXX
25 #define _CONTROLS_HXX
26
27 #include <simgear/misc/props.hxx>
28
29 #include <Main/fgfs.hxx>
30 #include <Main/globals.hxx>
31
32 #ifndef __cplusplus                                                          
33 # error This library requires C++
34 #endif                                   
35
36
37 // Define a structure containing the control parameters
38
39 class FGControls : public FGSubsystem
40 {
41
42 public:
43
44     enum {
45         ALL_ENGINES = -1,
46         MAX_ENGINES = 10
47     };
48
49     enum {
50         ALL_WHEELS = -1,
51         MAX_WHEELS = 3
52     };
53
54     enum {
55         ALL_TANKS = -1,
56         MAX_TANKS = 4
57     };
58
59 private:
60
61     double aileron;
62     double aileron_trim;
63     double elevator;
64     double elevator_trim;
65     double rudder;
66     double rudder_trim;
67     double flaps;
68     double throttle[MAX_ENGINES];
69     double mixture[MAX_ENGINES];
70     bool fuel_pump[MAX_ENGINES];
71     double prop_advance[MAX_ENGINES];
72     double parking_brake;
73     double speed_brake;
74     double spoilers;
75     double brake[MAX_WHEELS];
76     int magnetos[MAX_ENGINES];
77     bool throttle_idle;
78     bool starter[MAX_ENGINES];
79     bool fuel_selector[MAX_TANKS];
80     bool gear_down;
81
82     SGPropertyNode * auto_coordination;
83
84 public:
85
86     FGControls();
87     ~FGControls();
88
89     // Implementation of FGSubsystem.
90     void init ();
91     void bind ();
92     void unbind ();
93     void update (double dt);
94
95     // Reset function
96     void reset_all(void);
97         
98     // Query functions
99     inline double get_aileron() const { return aileron; }
100     inline double get_aileron_trim() const { return aileron_trim; }
101     inline double get_elevator() const { return elevator; }
102     inline double get_elevator_trim() const { return elevator_trim; }
103     inline double get_rudder() const { return rudder; }
104     inline double get_rudder_trim() const { return rudder_trim; }
105     inline double get_flaps() const { return flaps; }
106     inline double get_throttle(int engine) const { return throttle[engine]; }
107     inline double get_mixture(int engine) const { return mixture[engine]; }
108     inline bool get_fuel_pump(int engine) const { return fuel_pump[engine]; }
109     inline double get_prop_advance(int engine) const {
110         return prop_advance[engine];
111     }
112     inline double get_parking_brake() const { return parking_brake; }
113     inline double get_speed_brake() const { return speed_brake; }
114     inline double get_spoilers() const { return spoilers; }
115     inline double get_brake(int wheel) const { return brake[wheel]; }
116     inline int get_magnetos(int engine) const { return magnetos[engine]; }
117     inline bool get_starter(int engine) const { return starter[engine]; }
118     inline bool get_fuel_selector(int tank) const {
119         return fuel_selector[tank];
120     }
121     inline bool get_gear_down() const { return gear_down; }
122
123     // Update functions
124     void set_aileron( double pos );
125     void move_aileron( double amt );
126     void set_aileron_trim( double pos );
127     void move_aileron_trim( double amt );
128     void set_elevator( double pos );
129     void move_elevator( double amt );
130     void set_elevator_trim( double pos );
131     void move_elevator_trim( double amt );
132     void set_rudder( double pos );
133     void move_rudder( double amt );
134     void set_rudder_trim( double pos );
135     void move_rudder_trim( double amt );
136     void set_flaps( double pos );
137     void move_flaps( double amt );
138     void set_throttle( int engine, double pos );
139     void move_throttle( int engine, double amt );
140     void set_mixture( int engine, double pos );
141     void move_mixture( int engine, double amt );
142     void set_fuel_pump( int engine, bool val );
143     void set_prop_advance( int engine, double pos );
144     void move_prop_advance( int engine, double amt );
145     void set_magnetos( int engine, int pos );
146     void move_magnetos( int engine, int amt );
147     void set_starter( int engine, bool flag );
148     void set_fuel_selector( int tank, bool pos );
149     void set_parking_brake( double pos );
150     void set_speed_brake( double pos );
151     void set_spoilers( double pos );
152     void set_brake( int wheel, double pos );
153     void move_brake( int wheel, double amt );
154     void set_gear_down( bool gear );
155 };
156
157
158 #endif // _CONTROLS_HXX
159
160