]> git.mxchange.org Git - flightgear.git/blob - src/Instrumentation/slip_skid_ball.cxx
Clean-up some SGMath dependencies.
[flightgear.git] / src / Instrumentation / slip_skid_ball.cxx
1 // slip_skid_ball.cxx - an electric-powered turn indicator.
2 // Written by David Megginson, started 2003.
3 //
4 // This file is in the Public Domain and comes with no warranty.
5
6 #ifdef HAVE_CONFIG_H
7 #  include "config.h"
8 #endif
9
10 #include "slip_skid_ball.hxx"
11 #include <Main/fg_props.hxx>
12 #include <Main/util.hxx>
13
14 using std::string;
15
16 SlipSkidBall::SlipSkidBall ( SGPropertyNode *node)
17     :
18     _name(node->getStringValue("name", "slip-skid-ball")),
19     _num(node->getIntValue("number", 0))
20 {
21 }
22
23 SlipSkidBall::~SlipSkidBall ()
24 {
25 }
26
27 void
28 SlipSkidBall::init ()
29 {
30     string branch;
31     branch = "/instrumentation/" + _name;
32
33     SGPropertyNode *node = fgGetNode(branch.c_str(), _num, true );
34     _serviceable_node = node->getChild("serviceable", 0, true);
35     _y_accel_node = fgGetNode("/accelerations/pilot/y-accel-fps_sec", true);
36     _z_accel_node = fgGetNode("/accelerations/pilot/z-accel-fps_sec", true);
37     _out_node = node->getChild("indicated-slip-skid", 0, true);
38     _override_node = node->getChild("override", 0, true);
39 }
40
41 void
42 SlipSkidBall::update (double delta_time_sec)
43 {
44     if (_serviceable_node->getBoolValue() && !_override_node->getBoolValue()) {
45         double d = -_z_accel_node->getDoubleValue();
46         if (d < 1.0)
47             d = 1.0;
48         double pos = _y_accel_node->getDoubleValue() / d * 10.0;
49         pos = fgGetLowPass(_out_node->getDoubleValue(), pos, delta_time_sec);
50         _out_node->setDoubleValue(pos);
51     }
52 }
53
54 // end of slip_skid_ball.cxx