{
}
+FGAIManager* FGSubmodelMgr::aiManager()
+{
+ return (FGAIManager*)globals->get_subsystem("ai_model");
+}
+
void FGSubmodelMgr::init()
{
index = 0;
_contrail_trigger = fgGetNode("ai/submodels/contrails", true);
_contrail_trigger->setBoolValue(false);
- ai = (FGAIManager*)globals->get_subsystem("ai_model");
-
load();
}
_expiry = false;
// check if the submodel hit an object or terrain
- sm_list = ai->get_ai_list();
- sm_list_iterator sm_list_itr = sm_list.begin();
- sm_list_iterator end = sm_list.end();
+ FGAIManager::ai_list_type sm_list(aiManager()->get_ai_list());
+ FGAIManager::ai_list_iterator sm_list_itr = sm_list.begin(),
+ end = sm_list.end();
for (; sm_list_itr != end; ++sm_list_itr) {
FGAIBase::object_type object_type =(*sm_list_itr)->getType();
ballist->setParentNodes(_selected_ac);
ballist->setContentsNode(sm->contents_node);
ballist->setWeight(sm->weight);
- ai->attach(ballist);
+
+ aiManager()->attach(ballist);
if (sm->count > 0)
sm->count--;
} else {
// set the data for a submodel tied to an AI Object
//cout << " set the data for a submodel tied to an AI Object " << id << endl;
- sm_list_iterator sm_list_itr = sm_list.begin();
- sm_list_iterator end = sm_list.end();
setParentNode(id);
}
{
SG_LOG(SG_GENERAL, SG_DEBUG, "Submodels: Loading AI submodels ");
- sm_list = ai->get_ai_list();
+ FGAIManager::ai_list_type sm_list(aiManager()->get_ai_list());
if (sm_list.empty()) {
SG_LOG(SG_GENERAL, SG_ALERT, "Submodels: Unable to read AI submodel list");
return;
}
- sm_list_iterator sm_list_itr = sm_list.begin();
- sm_list_iterator end = sm_list.end();
+ FGAIManager::ai_list_iterator sm_list_itr = sm_list.begin(),
+ end = sm_list.end();
while (sm_list_itr != end) {
string path = (*sm_list_itr)->_getSMPath();
#include <simgear/props/props.hxx>
#include <simgear/structure/subsystem_mgr.hxx>
-#include <AIModel/AIBase.hxx>
+#include <simgear/math/SGMath.hxx>
+
#include <vector>
#include <string>
-#include <Main/fg_props.hxx>
-
-using std::vector;
-using std::string;
-using std::list;
-
class FGAIBase;
+class FGAIManager;
class FGSubmodelMgr : public SGSubsystem, public SGPropertyChangeListener
{
SGPropertyNode_ptr submodel_node;
SGPropertyNode_ptr speed_node;
- string name;
- string model;
+ std::string name;
+ std::string model;
double speed;
bool slaved;
bool repeat;
bool collision;
bool expiry;
bool impact;
- string impact_report;
+ std::string impact_report;
double fuse_range;
- string submodel;
+ std::string submodel;
int sub_id;
bool force_stabilised;
bool ext_force;
- string force_path;
+ std::string force_path;
} submodel;
typedef struct {
private:
- typedef vector <submodel*> submodel_vector_type;
+ typedef std::vector <submodel*> submodel_vector_type;
typedef submodel_vector_type::iterator submodel_vector_iterator;
submodel_vector_type submodels;
SGPropertyNode_ptr _path_node;
SGPropertyNode_ptr _selected_ac;
-
- FGAIManager* ai;
IC_struct IC;
-
- // A list of pointers to AI objects
- typedef list <SGSharedPtr<FGAIBase> > sm_list_type;
- typedef sm_list_type::iterator sm_list_iterator;
- typedef sm_list_type::const_iterator sm_list_const_iterator;
-
- sm_list_type sm_list;
-
-
+
+ /**
+ * Helper to retrieve the AI manager, if it currently exists
+ */
+ FGAIManager* aiManager();
+
void loadAI();
void loadSubmodels();
- void setData(int id, string& path, bool serviceable);
- void setSubData(int id, string& path, bool serviceable);
+ void setData(int id, std::string& path, bool serviceable);
+ void setSubData(int id, std::string& path, bool serviceable);
void valueChanged (SGPropertyNode *);
void transform(submodel *);
void setParentNode(int parent_id);