]> git.mxchange.org Git - flightgear.git/blob - src/Instrumentation/gyro.cxx
Refactored some of the navlist code and removed the built in "fail to find"
[flightgear.git] / src / Instrumentation / gyro.cxx
1 // gyro.cxx - simple implementation of a spinning gyro model.
2
3 #include "gyro.hxx"
4
5 Gyro::Gyro ()
6     : _serviceable(true),
7       _power_norm(0.0),
8       _spin_norm(0.0)
9 {
10 }
11
12 Gyro::~Gyro ()
13 {
14 }
15
16 void
17 Gyro::update (double delta_time_sec)
18 {
19                                 // spin decays 0.5% every second
20     _spin_norm -= 0.005 * delta_time_sec;
21
22                                 // power can increase spin by 25%
23                                 // every second, but only up to the
24                                 // level of power available
25     if (_serviceable) {
26         double step = 0.25 * _power_norm * delta_time_sec;
27         if ((_spin_norm + step) <= _power_norm)
28             _spin_norm += step;
29     }
30
31                                 // clamp the spin to 0.0:1.0
32     if (_spin_norm < 0.0)
33         _spin_norm = 0.0;
34     else if (_spin_norm > 1.0)
35         _spin_norm = 1.0;
36 }
37
38 void
39 Gyro::set_power_norm (double power_norm)
40 {
41     _power_norm = power_norm;
42 }
43
44 double
45 Gyro::get_spin_norm () const
46 {
47     return _spin_norm;
48 }
49
50 void
51 Gyro::set_spin_norm (double spin_norm)
52 {
53     _spin_norm = spin_norm;
54 }
55
56 bool
57 Gyro::is_serviceable () const
58 {
59     return _serviceable;
60 }
61
62 void
63 Gyro::set_serviceable (bool serviceable)
64 {
65     _serviceable = serviceable;
66 }
67
68 // end of gyro.cxx
69