From a8b550ee95de254f0ec14cf404248112ed34dc2e Mon Sep 17 00:00:00 2001 From: ThomasS <thomass@yard.de> Date: Wed, 21 Nov 2018 09:28:44 +0100 Subject: [PATCH] fgcommands "add-aiobject" and "remove-aiobject" for adding/removing objects to the AI subsystem. --- src/AIModel/AIManager.cxx | 21 ++++++++++++++++++--- src/AIModel/AIManager.hxx | 3 ++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/AIModel/AIManager.cxx b/src/AIModel/AIManager.cxx index ddd14e538..aa3e53ef4 100644 --- a/src/AIModel/AIManager.cxx +++ b/src/AIModel/AIManager.cxx @@ -134,6 +134,8 @@ FGAIManager::init() { globals->get_commands()->addCommand("load-scenario", this, &FGAIManager::loadScenarioCommand); globals->get_commands()->addCommand("unload-scenario", this, &FGAIManager::unloadScenarioCommand); + globals->get_commands()->addCommand("add-aiobject", this, &FGAIManager::addObjectCommand); + globals->get_commands()->addCommand("remove-aiobject", this, &FGAIManager::removeObjectCommand); _environmentVisiblity = fgGetNode("/environment/visibility-m"); _groundSpeedKts_node = fgGetNode("/velocities/groundspeed-kt", true); @@ -213,6 +215,8 @@ FGAIManager::shutdown() globals->get_commands()->removeCommand("load-scenario"); globals->get_commands()->removeCommand("unload-scenario"); + globals->get_commands()->removeCommand("add-aiobject"); + globals->get_commands()->removeCommand("remove-aiobject"); } void @@ -418,16 +422,19 @@ bool FGAIManager::unloadScenarioCommand(const SGPropertyNode * arg, SGPropertyNo return unloadScenario(name); } -bool FGAIManager::addObjectCommand(const SGPropertyNode* definition) +bool FGAIManager::addObjectCommand(const SGPropertyNode* arg, const SGPropertyNode* root) { - addObject(definition); + if (!arg){ + return false; + } + addObject(arg); return true; } FGAIBasePtr FGAIManager::addObject(const SGPropertyNode* definition) { const std::string& type = definition->getStringValue("type", "aircraft"); - + FGAIBase* ai = NULL; if (type == "tanker") { // refueling scenarios ai = new FGAITanker; @@ -465,6 +472,14 @@ FGAIBasePtr FGAIManager::addObject(const SGPropertyNode* definition) return ai; } +bool FGAIManager::removeObjectCommand(const SGPropertyNode* arg, const SGPropertyNode* root) +{ + if (!arg) { + return false; + } + return removeObject(arg); +} + bool FGAIManager::removeObject(const SGPropertyNode* args) { int id = args->getIntValue("id"); diff --git a/src/AIModel/AIManager.hxx b/src/AIModel/AIManager.hxx index 9b58ede9e..cd9f79238 100644 --- a/src/AIModel/AIManager.hxx +++ b/src/AIModel/AIManager.hxx @@ -115,7 +115,8 @@ private: bool loadScenarioCommand(const SGPropertyNode* args, SGPropertyNode* root); bool unloadScenarioCommand(const SGPropertyNode* args, SGPropertyNode* root); - bool addObjectCommand(const SGPropertyNode* definition); + bool addObjectCommand(const SGPropertyNode* arg, const SGPropertyNode* root); + bool removeObjectCommand(const SGPropertyNode* arg, const SGPropertyNode* root); bool removeObject(const SGPropertyNode* args); bool unloadScenario( const std::string &filename );