X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIMultiplayer.cxx;h=a34a92775635f1bbd2353b9ce71a528e56d74f6b;hb=7e73a8788223c9c2af3c26435162e0667b412279;hp=9888d58efaeb54e1417bf6ca0757a3876be1edc0;hpb=729969990305db9cd6f376ee4e65437f7eaeb8ff;p=flightgear.git diff --git a/src/AIModel/AIMultiplayer.cxx b/src/AIModel/AIMultiplayer.cxx index 9888d58ef..a34a92775 100755 --- a/src/AIModel/AIMultiplayer.cxx +++ b/src/AIModel/AIMultiplayer.cxx @@ -43,12 +43,13 @@ FGAIMultiplayer::FGAIMultiplayer() : FGAIBase(otMultiplayer) { FGAIMultiplayer::~FGAIMultiplayer() { } -bool FGAIMultiplayer::init() { +bool FGAIMultiplayer::init(bool search_in_AI_path) { + props->setStringValue("sim/model/path", model_path.c_str()); //refuel_node = fgGetNode("systems/refuel/contact", true); isTanker = false; // do this until this property is // passed over the net - string str1 = mCallSign; + string str1 = _getCallsign(); string str2 = "MOBIL"; string::size_type loc1= str1.find( str2, 0 ); @@ -57,7 +58,7 @@ bool FGAIMultiplayer::init() { isTanker = true; // cout << "isTanker " << isTanker << " " << mCallSign <(*this, &FGAIMultiplayer::get##name) SGRawValueMethods(*this, \ &FGAIMultiplayer::get##name, &FGAIMultiplayer::set##name) - props->tie("callsign", AIMPROProp(const char *, CallSign)); + //props->tie("callsign", AIMPROProp(const char *, CallSign)); props->tie("controls/allow-extrapolation", AIMPRWProp(bool, AllowExtrapolation)); @@ -88,7 +89,7 @@ SGRawValueMethods(*this, \ void FGAIMultiplayer::unbind() { FGAIBase::unbind(); - props->untie("callsign"); + //props->untie("callsign"); props->untie("controls/allow-extrapolation"); props->untie("controls/lag-adjust-system-speed"); props->untie("refuel/contact"); @@ -276,8 +277,8 @@ void FGAIMultiplayer::update(double dt) case SGPropertyNode::INT: case SGPropertyNode::BOOL: case SGPropertyNode::LONG: - ival = (int) (1-tau)*((double) (*prevPropIt)->int_value) + - tau*((double) (*nextPropIt)->int_value); + ival = (int) (0.5+(1-tau)*((double) (*prevPropIt)->int_value) + + tau*((double) (*nextPropIt)->int_value)); pIt->second->setIntValue(ival); //cout << "Int: " << ival << "\n"; break; @@ -469,9 +470,18 @@ FGAIMultiplayer::addMotionInfo(const FGExternalMotionData& motionInfo, long stamp) { mLastTimestamp = stamp; - // Drop packets arriving out of order - if (!mMotionInfo.empty() && motionInfo.time < mMotionInfo.rbegin()->first) - return; + + if (!mMotionInfo.empty()) { + double diff = motionInfo.time - mMotionInfo.rbegin()->first; + + // packet is very old -- MP has probably reset (incl. his timebase) + if (diff < -10.0) + mMotionInfo.clear(); + + // drop packets arriving out of order + else if (diff < 0.0) + return; + } mMotionInfo[motionInfo.time] = motionInfo; }