1
0
Fork 0

AI Traffic - better integration with terrasync.

- allow on demand update

new property traffic-manager/active indicating that AI Traffic is running
This commit is contained in:
Richard Harrison 2019-04-07 09:00:01 +02:00
parent ff12994554
commit 8e1e6c8254
2 changed files with 39 additions and 16 deletions

View file

@ -427,7 +427,9 @@ FGTrafficManager::FGTrafficManager() :
enabled("/sim/traffic-manager/enabled"),
aiEnabled("/sim/ai/enabled"),
realWxEnabled("/environment/realwx/enabled"),
metarValid("/environment/metar/valid")
metarValid("/environment/metar/valid"),
active("/sim/traffic-manager/active"),
aiDataUpdateNow("/sim/terrasync/ai-data-update-now")
{
}
@ -442,6 +444,7 @@ void FGTrafficManager::shutdown()
if (doingInit) {
scheduleParser.reset();
doingInit = false;
active = false;
}
return;
@ -497,6 +500,30 @@ void FGTrafficManager::shutdown()
doingInit = false;
inited = false;
trafficSyncRequested = false;
active = false;
}
bool FGTrafficManager::doDataSync()
{
simgear::SGTerraSync* terraSync = static_cast<simgear::SGTerraSync*>(globals->get_subsystem("terrasync"));
bool doDataSync = fgGetBool("/sim/terrasync/ai-data-enabled");
if (doDataSync && terraSync) {
if (!trafficSyncRequested) {
SG_LOG(SG_AI, SG_INFO, "Sync of AI traffic via TerraSync enabled");
terraSync->scheduleDataDir("AI/Traffic");
trafficSyncRequested = true;
}
if (terraSync->isDataDirPending("AI/Traffic")) {
return false; // remain in the init state
}
trafficSyncRequested = false;
return true;
SG_LOG(SG_AI, SG_INFO, "Traffic files sync complete");
}
return true;
}
void FGTrafficManager::init()
@ -512,21 +539,9 @@ void FGTrafficManager::init()
return;
assert(!doingInit);
simgear::SGTerraSync* terraSync = static_cast<simgear::SGTerraSync*>(globals->get_subsystem("terrasync"));
bool doDataSync = fgGetBool("/sim/terrasync/ai-data-enabled");
if (doDataSync && terraSync) {
if (!trafficSyncRequested) {
SG_LOG(SG_AI, SG_INFO, "Sync of AI traffic via TerraSync enabled");
terraSync->scheduleDataDir("AI/Traffic");
trafficSyncRequested = true;
}
if (terraSync->isDataDirPending("AI/Traffic")) {
return; // remain in the init state
}
SG_LOG(SG_AI, SG_INFO, "Traffic files sync complete");
}
if (!doDataSync())
return; // remain in the init state whilst updating
doingInit = true;
if (string(fgGetString("/sim/traffic-manager/datafile")).empty()) {
@ -575,6 +590,7 @@ void FGTrafficManager::init()
}
//exit(1);
}
active = true;
}
@ -600,6 +616,7 @@ void FGTrafficManager::finishInit()
doingInit = false;
inited = true;
active = true;
}
void FGTrafficManager::loadHeuristics()
@ -697,6 +714,11 @@ void FGTrafficManager::update(double dt)
if (!metarReady(dt))
return;
if (aiDataUpdateNow)
{
aiDataUpdateNow = false;
shutdown();
}
if (!aiEnabled)
{
// traffic depends on AI module

View file

@ -93,10 +93,11 @@ private:
void readTimeTableFromFile(SGPath infilename);
void Tokenize(const std::string& str, std::vector<std::string>& tokens, const std::string& delimiters = " ");
simgear::PropertyObject<bool> enabled, aiEnabled, realWxEnabled, metarValid;
simgear::PropertyObject<bool> enabled, aiEnabled, realWxEnabled, metarValid, active, aiDataUpdateNow;
void loadHeuristics();
bool doDataSync();
void finishInit();
void shutdown();