]> git.mxchange.org Git - flightgear.git/blob - src/FDM/YASim/Hitch.hpp
Port over remaining Point3D usage to the more type and unit safe SG* classes.
[flightgear.git] / src / FDM / YASim / Hitch.hpp
1 #ifndef _HITCH_HPP
2 #define _HITCH_HPP
3
4 #include <Main/fg_props.hxx>
5
6 namespace yasim {
7
8 class Ground;
9 class RigidBody;
10 struct State;
11
12 class Hitch {
13 public:
14     Hitch(const char *name);
15     ~Hitch();
16
17     // Externally set values
18     void setPosition(float* position);
19     void setOpen(bool isOpen);
20     //void setName(const char *text);
21
22     void setTowLength(float length);
23     void setTowElasticConstant(float sc);
24     void setTowBreakForce(float bf);
25     void setTowWeightPerM(float rw);
26     void setWinchMaxSpeed(float mws);
27     void setWinchRelSpeed(float rws);
28     void setWinchPosition(double *winchPosition); //in global coordinates!
29     void setWinchPositionAuto(bool doit);
30     void findBestAIObject(bool doit,bool running_as_autoconnect=false);
31     void setWinchInitialTowLength(float length);
32     void setWinchPower(float power);
33     void setWinchMaxForce(float force);
34     void setWinchMaxTowLength(float length);
35     void setWinchMinTowLength(float length);
36     void setMpAutoConnectPeriod(float dt);
37     void setForceIsCalculatedByOther(bool b);
38     
39     void setGlobalGround(double *global_ground, float *global_vel);
40
41     void getPosition(float* out);
42     float getTowLength(void);
43
44     void calcForce(Ground *g_cb, RigidBody* body, State* s);
45
46     // Computed values: total force
47     void getForce(float* force, float* off);
48
49     void integrate (float dt);
50
51     const char *getConnectedPropertyNode() const;
52     void setConnectedPropertyNode(const char *nodename);
53
54 private:
55     float _pos[3];
56     bool _open;
57     bool _oldOpen;
58     float _towLength;
59     float _towElasticConstant;
60     float _towBrakeForce;
61     float _towWeightPerM;
62     float _winchMaxSpeed;
63     float _winchRelSpeed;
64     float _winchInitialTowLength;
65     float _winchMaxTowLength;
66     float _winchMinTowLength;
67     float _winchPower;
68     float _winchMaxForce;
69     float _winchActualForce;
70     double _winchPos[3];
71     float _force[3];
72     float _towEndForce[3];
73     float _reportTowEndForce[3];
74     float _forceMagnitude;
75     double _global_ground[4];
76     float _global_vel[3];
77     char _name[256];
78     State* _state;
79     float _dist;
80     float _timeLagCorrectedDist;
81     SGPropertyNode_ptr _towEndNode;
82     const char *_towEndPropertyName;
83     bool _towEndIsConnectedToProperty;
84     bool _nodeIsMultiplayer;
85     bool _nodeIsAiAircraft;
86     bool _forceIsCalculatedByMaster;
87     int _nodeID;
88     //const char *_ai_MP_callsign;
89     bool _isSlave;
90     float _mpAutoConnectPeriod;
91     float _timeToNextAutoConnectTry;
92     float _timeToNextReConnectTry;
93     float _height_above_ground;
94     float _winch_height_above_ground;
95     float _loPosFrac;
96     float _lowest_tow_height;
97     float _speed_in_tow_direction;
98     float _mp_time_lag;
99     float _mp_last_reported_dist;
100     float _mp_last_reported_v;
101     float _mp_v;
102     float _mp_dist;
103     float _mp_lpos[3];
104     float _mp_force[3];
105     bool _mp_is_slave;
106     bool _mp_open_last_state;
107
108     bool _displayed_len_lower_dist_message;
109     bool _last_wish;
110
111     SGPropertyNode_ptr _node;
112 };
113
114 }; // namespace yasim
115 #endif // _HITCH_HPP