#include <algorithm>
#include <cstring>
#include <errno.h>
-#include <osg/Math> // isNaN
#include <simgear/misc/stdint.hxx>
#include <simgear/timing/timestamp.hxx>
{1300, "tanker", simgear::props::INT},
+ {1400, "scenery/events", simgear::props::STRING},
+
{10001, "sim/multiplay/transmission-freq-hz", simgear::props::STRING},
{10002, "sim/multiplay/chat", simgear::props::STRING},
case props::DOUBLE:
{
float val = XDR_decode_float(*xdr);
- if (osg::isNaN(val))
+ if (SGMisc<float>::isNaN(val))
return false;
xdr++;
break;
SG_LOG(SG_NETWORK, SG_WARN, "FGMultiplayMgr::init - already initialised");
return;
}
-
- fgSetBool("/sim/multiplay/online", false);
-
+
+ SGPropertyNode* propOnline = fgGetNode("/sim/multiplay/online", true);
+ propOnline->setBoolValue(false);
+ propOnline->setAttribute(SGPropertyNode::PRESERVE, true);
+
//////////////////////////////////////////////////
// Set members from property values
//////////////////////////////////////////////////
if (strncmp (mServer.getHost(), "0.0.0.0", 8) == 0) {
mHaveServer = false;
SG_LOG(SG_NETWORK, SG_ALERT,
- "FGMultiplayMgr - Could not resolve '"
- << txAddress << "'. Multiplayer mode disabled.");
+ "Cannot enable multiplayer mode: resolving MP server address '"
+ << txAddress << "' failed.");
return;
} else {
- SG_LOG(SG_NETWORK, SG_INFO, "FGMultiplayMgr - have server");
+ SG_LOG(SG_NETWORK, SG_INFO, "FGMultiplayMgr - have server");
mHaveServer = true;
}
if (rxPort <= 0)
rxPort = txPort;
+ } else {
+ SG_LOG(SG_NETWORK, SG_INFO, "FGMultiplayMgr - multiplayer mode disabled (no MP server specificed).");
+ return;
}
+
if (rxPort <= 0) {
SG_LOG(SG_NETWORK, SG_ALERT,
- "FGMultiplayMgr - No receiver port. Multiplayer mode disabled.");
+ "Cannot enable multiplayer mode: No receiver port specified.");
return;
}
if (mCallsign.empty())
mSocket.reset(new simgear::Socket());
if (!mSocket->open(false)) {
- SG_LOG( SG_NETWORK, SG_WARN,
- "FGMultiplayMgr - Failed to create data socket." );
+ SG_LOG( SG_NETWORK, SG_ALERT,
+ "Cannot enable multiplayer mode: creating data socket failed." );
return;
}
mSocket->setBlocking(false);
if (mSocket->bind(rxAddress.c_str(), rxPort) != 0) {
SG_LOG( SG_NETWORK, SG_ALERT,
- "FGMultiplayMgr - Failed to bind receive socket. Multiplayer mode disabled. "
+ "Cannot enable multiplayer mode: binding receive socket failed. "
<< strerror(errno) << "(errno " << errno << ")");
return;
}
fgSetBool("/sim/multiplay/online", true);
mInitialised = true;
+
+ SG_LOG(SG_NETWORK, SG_ALERT, "Multiplayer mode active!");
+
+ if (!fgGetBool("/sim/ai/enabled"))
+ {
+ // multiplayer depends on AI module
+ fgSetBool("/sim/ai/enabled", true);
+ }
} // FGMultiplayMgr::init()
//////////////////////////////////////////////////////////////////////
{
// check for corrupted data (NaNs)
bool isCorrupted = false;
- isCorrupted |= ((osg::isNaN(motionInfo.time )) ||
- (osg::isNaN(motionInfo.lag )) ||
+ isCorrupted |= ((SGMisc<double>::isNaN(motionInfo.time )) ||
+ (SGMisc<double>::isNaN(motionInfo.lag )) ||
(osg::isNaN(motionInfo.orientation(3) )));
for (unsigned i = 0; (i < 3)&&(!isCorrupted); ++i)
{
strncpy(PosMsg->Model, fgGetString("/sim/model/path"), MAX_MODEL_NAME_LEN);
PosMsg->Model[MAX_MODEL_NAME_LEN - 1] = '\0';
- if (fgGetBool("/sim/freeze/replay-state", true))
+ if (fgGetBool("/sim/freeze/replay-state", true)&&
+ fgGetBool("/sim/multiplay/freeze-on-replay",true))
{
// do not send position updates during replay
for (unsigned i = 0 ; i < 3; ++i)
}
double sim_time = globals->get_sim_time_sec();
- static double lastTime = 0.0;
+// static double lastTime = 0.0;
// SG_LOG(SG_GENERAL, SG_INFO, "actual dt=" << sim_time - lastTime);
- lastTime = sim_time;
+// lastTime = sim_time;
FlightProperties ifce;
mp->setCallSign(callsign);
mMultiPlayerMap[callsign] = mp;
- FGAIManager *aiMgr = (FGAIManager*)globals->get_subsystem("ai_model");
+ FGAIManager *aiMgr = (FGAIManager*)globals->get_subsystem("ai-model");
if (aiMgr) {
aiMgr->attach(mp);