]> git.mxchange.org Git - flightgear.git/blob - src/Controls/controls.hxx
Load ground ATC frequency data, and map all stations by bucket index
[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 brake[MAX_WHEELS];
74     int magnetos[MAX_ENGINES];
75     bool throttle_idle;
76     bool starter[MAX_ENGINES];
77     bool fuel_selector[MAX_TANKS];
78     bool gear_down;
79
80     SGPropertyNode * auto_coordination;
81
82 public:
83
84     FGControls();
85     ~FGControls();
86
87     // Implementation of FGSubsystem.
88     void init ();
89     void bind ();
90     void unbind ();
91     void update (double dt);
92
93     // Reset function
94     void reset_all(void);
95         
96     // Query functions
97     inline double get_aileron() const { return aileron; }
98     inline double get_aileron_trim() const { return aileron_trim; }
99     inline double get_elevator() const { return elevator; }
100     inline double get_elevator_trim() const { return elevator_trim; }
101     inline double get_rudder() const { return rudder; }
102     inline double get_rudder_trim() const { return rudder_trim; }
103     inline double get_flaps() const { return flaps; }
104     inline double get_throttle(int engine) const { return throttle[engine]; }
105     inline double get_mixture(int engine) const { return mixture[engine]; }
106     inline bool get_fuel_pump(int engine) const { return fuel_pump[engine]; }
107     inline double get_prop_advance(int engine) const {
108         return prop_advance[engine];
109     }
110     inline double get_parking_brake() const { return parking_brake; }
111     inline double get_brake(int wheel) const { return brake[wheel]; }
112     inline int get_magnetos(int engine) const { return magnetos[engine]; }
113     inline bool get_starter(int engine) const { return starter[engine]; }
114     inline bool get_fuel_selector(int tank) const {
115         return fuel_selector[tank];
116     }
117     inline bool get_gear_down() const { return gear_down; }
118
119     // Update functions
120     void set_aileron( double pos );
121     void move_aileron( double amt );
122     void set_aileron_trim( double pos );
123     void move_aileron_trim( double amt );
124     void set_elevator( double pos );
125     void move_elevator( double amt );
126     void set_elevator_trim( double pos );
127     void move_elevator_trim( double amt );
128     void set_rudder( double pos );
129     void move_rudder( double amt );
130     void set_rudder_trim( double pos );
131     void move_rudder_trim( double amt );
132     void set_flaps( double pos );
133     void move_flaps( double amt );
134     void set_throttle( int engine, double pos );
135     void move_throttle( int engine, double amt );
136     void set_mixture( int engine, double pos );
137     void move_mixture( int engine, double amt );
138     void set_fuel_pump( int engine, bool val );
139     void set_prop_advance( int engine, double pos );
140     void move_prop_advance( int engine, double amt );
141     void set_magnetos( int engine, int pos );
142     void move_magnetos( int engine, int amt );
143     void set_starter( int engine, bool flag );
144     void set_fuel_selector( int tank, bool pos );
145     void set_parking_brake( double pos );
146     void set_brake( int wheel, double pos );
147     void move_brake( int wheel, double amt );
148     void set_gear_down( bool gear );
149 };
150
151
152 #endif // _CONTROLS_HXX
153
154