]> git.mxchange.org Git - flightgear.git/blob - src/Instrumentation/gyro.cxx
Prepare and implement reinit methods for instruments
[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 Gyro::reinit(void)
17 {
18     _power_norm = 0.0;
19     _spin_norm = 0.0;
20 }
21
22 void
23 Gyro::update (double delta_time_sec)
24 {
25                                 // spin decays 0.5% every second
26     _spin_norm -= 0.005 * delta_time_sec;
27
28                                 // power can increase spin by 25%
29                                 // every second, but only up to the
30                                 // level of power available
31     if (_serviceable) {
32         double step = 0.25 * _power_norm * delta_time_sec;
33         if ((_spin_norm + step) <= _power_norm)
34             _spin_norm += step;
35     } else {
36         _spin_norm = 0;         // stop right away if the gyro breaks
37     }
38
39                                 // clamp the spin to 0.0:1.0
40     if (_spin_norm < 0.0)
41         _spin_norm = 0.0;
42     else if (_spin_norm > 1.0)
43         _spin_norm = 1.0;
44 }
45
46 void
47 Gyro::set_power_norm (double power_norm)
48 {
49     _power_norm = power_norm;
50 }
51
52 double
53 Gyro::get_spin_norm () const
54 {
55     return _spin_norm;
56 }
57
58 void
59 Gyro::set_spin_norm (double spin_norm)
60 {
61     _spin_norm = spin_norm;
62 }
63
64 bool
65 Gyro::is_serviceable () const
66 {
67     return _serviceable;
68 }
69
70 void
71 Gyro::set_serviceable (bool serviceable)
72 {
73     _serviceable = serviceable;
74 }
75
76 // end of gyro.cxx
77