25 std::string_view
getTypeString()
const override {
return "multiplayer"; }
28 void update(
double dt)
override;
33 void setDoubleProperty(
const std::string& prop,
double val);
38 return mLastTimestamp;
43 mAllowExtrapolation = allowExtrapolation;
47 return mAllowExtrapolation;
52 if (lagAdjustSystemSpeed < 0)
53 lagAdjustSystemSpeed = 0;
54 mLagAdjustSystemSpeed = lagAdjustSystemSpeed;
59 return mLagAdjustSystemSpeed;
64 mPropertyMap[id] =
props->getNode(
name,
true);
74 playerLag = mplayerLag;
84 compensateLag = mcompensateLag;
96 typedef std::map<double, FGExternalMotionData> MotionInfo;
97 MotionInfo mMotionInfo;
101 typedef std::map<unsigned, SGSharedPtr<SGPropertyNode>> PropertyMap;
102 PropertyMap mPropertyMap;
110 void FGAIMultiplayerInterpolate(
111 MotionInfo::iterator prevIt,
112 MotionInfo::iterator nextIt,
116 SGVec3f& ecLinearVel);
121 void FGAIMultiplayerExtrapolate(
122 MotionInfo::iterator nextIt,
127 SGVec3f& ecLinearVel);
129 bool mTimeOffsetSet =
false;
130 bool realTime =
false;
131 int compensateLag = 1;
132 double playerLag = 0.03;
133 double mTimeOffset = 0.0;
134 double lastUpdateTime = 0.0;
135 double lastTime = 0.0;
136 double lagPpsAveraged = 1.0;
138 double rawLagMod = 0.0;
139 double lagModAveraged = 0.0;
142 bool mAllowExtrapolation =
true;
143 double mLagAdjustSystemSpeed = 10.0;
145 long mLastTimestamp = 0;
148 SGPropertyNode_ptr refuel_node;
149 bool isTanker =
false;
150 bool contact =
false;
153 SGPropertyNode_ptr _uBodyNode;
154 SGPropertyNode_ptr _vBodyNode;
155 SGPropertyNode_ptr _wBodyNode;
159 SGPropertyNode_ptr m_simple_time_enabled;
161 SGPropertyNode_ptr m_sim_replay_replay_state;
162 SGPropertyNode_ptr m_sim_replay_time;
164 bool m_simple_time_first_time =
true;
165 double m_simple_time_offset = 0.0;
166 double m_simple_time_offset_smoothed = 0.0;
167 double m_simple_time_compensation = 0.0;
168 double m_simple_time_recent_packet_time = 0.0;
170 SGPropertyNode_ptr m_lagPPSAveragedNode;
171 SGPropertyNode_ptr m_lagModAveragedNode;
173 SGPropertyNode_ptr m_node_simple_time_latest;
174 SGPropertyNode_ptr m_node_simple_time_offset;
175 SGPropertyNode_ptr m_node_simple_time_offset_smoothed;
176 SGPropertyNode_ptr m_node_simple_time_compensation;
179 SGPropertyNode_ptr mLogRawSpeedMultiplayer;
181 SGPropertyNode_ptr m_node_ai_latch;
182 std::string m_ai_latch;
183 SGPropertyNode_ptr m_node_ai_latch_latitude;
184 SGPropertyNode_ptr m_node_ai_latch_longitude;
185 SGPropertyNode_ptr m_node_ai_latch_altitude;
186 SGPropertyNode_ptr m_node_ai_latch_heading;
187 SGPropertyNode_ptr m_node_ai_latch_pitch;
188 SGPropertyNode_ptr m_node_ai_latch_roll;
189 SGPropertyNode_ptr m_node_ai_latch_ubody_fps;
190 SGPropertyNode_ptr m_node_ai_latch_vbody_fps;
191 SGPropertyNode_ptr m_node_ai_latch_wbody_fps;
192 SGPropertyNode_ptr m_node_ai_latch_speed_kts;
194 SGPropertyNode_ptr m_node_log_multiplayer;