From 229fe3bff98f56fecc6bd646861cab2c64068147 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Tue, 1 May 2012 10:32:30 +0200 Subject: [PATCH] Support disabling AI traffic at run-time. --- src/Traffic/Schedule.cxx | 9 +++++++++ src/Traffic/TrafficMgr.cxx | 19 ++++++++++++++++++- src/Traffic/TrafficMgr.hxx | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Traffic/Schedule.cxx b/src/Traffic/Schedule.cxx index 5f1dc9f31..017e2b0d5 100644 --- a/src/Traffic/Schedule.cxx +++ b/src/Traffic/Schedule.cxx @@ -158,6 +158,15 @@ FGAISchedule::FGAISchedule(const FGAISchedule &other) FGAISchedule::~FGAISchedule() { + // remove related object from AI manager + if (AIManagerRef) + { + FGAIManager* aimgr = (FGAIManager *) globals-> get_subsystem("ai-model"); + if (aimgr) + aimgr->destroyObject(AIManagerRef); + AIManagerRef = 0; + } + /* for (FGScheduledFlightVecIterator flt = flights.begin(); flt != flights.end(); flt++) { delete (*flt); diff --git a/src/Traffic/TrafficMgr.cxx b/src/Traffic/TrafficMgr.cxx index bfcb732fd..0f9dbc0b3 100644 --- a/src/Traffic/TrafficMgr.cxx +++ b/src/Traffic/TrafficMgr.cxx @@ -90,6 +90,11 @@ FGTrafficManager::FGTrafficManager() : } FGTrafficManager::~FGTrafficManager() +{ + shutdown(); +} + +void FGTrafficManager::shutdown() { // Save the heuristics data bool saveData = false; @@ -129,6 +134,11 @@ FGTrafficManager::~FGTrafficManager() } scheduledAircraft.clear(); flights.clear(); + releaseList.clear(); + + currAircraft = scheduledAircraft.begin(); + doingInit = false; + inited = false; } @@ -261,7 +271,14 @@ void FGTrafficManager::loadHeuristics() void FGTrafficManager::update(double /*dt */ ) { - if (!enabled || (realWxEnabled && !metarValid)) { + if (!enabled) + { + if (inited || doingInit) + shutdown(); + return; + } + + if ((realWxEnabled && !metarValid)) { return; } diff --git a/src/Traffic/TrafficMgr.hxx b/src/Traffic/TrafficMgr.hxx index aab3c8ae3..f417a95cf 100644 --- a/src/Traffic/TrafficMgr.hxx +++ b/src/Traffic/TrafficMgr.hxx @@ -108,6 +108,7 @@ private: void initStep(); void finishInit(); + void shutdown(); // during incremental init, contains the XML files still be read in simgear::PathList schedulesToRead; -- 2.39.5