out[0] = out[1] = out[2] = 0;
in[3] = out[3] = 1;
string contents_node;
+ contrail_altitude = 30000.0;
}
FGSubmodelMgr::~FGSubmodelMgr ()
FGSubmodelMgr::init ()
{
load();
- _serviceable_node = fgGetNode("/sim/systems/submodels/serviceable", true);
+ _serviceable_node = fgGetNode("/sim/submodels/serviceable", true);
_user_lat_node = fgGetNode("/position/latitude-deg", true);
_user_lon_node = fgGetNode("/position/longitude-deg", true);
_user_speed_east_fps_node = fgGetNode("/velocities/speed-east-fps",true);
_user_speed_north_fps_node = fgGetNode("/velocities/speed-north-fps",true);
- ai = (FGAIManager*)globals->get_subsystem("ai_model");
+ _contrail_altitude_node = fgGetNode("/environment/params/contrail-altitude", true);
+ contrail_altitude = _contrail_altitude_node->getDoubleValue();
+ _contrail_trigger = fgGetNode("ai/submodels/contrails", true);
+ _contrail_trigger->setBoolValue(false);
+ ai = (FGAIManager*)globals->get_subsystem("ai_model");
}
{
if (!(_serviceable_node->getBoolValue())) return;
int i=-1;
+
+ _contrail_trigger->setBoolValue(_user_alt_node->getDoubleValue() > contrail_altitude);
+
submodel_iterator = submodels.begin();
while(submodel_iterator != submodels.end()) {
i++;
entity.wind = sm->wind;
entity.cd = sm->cd;
entity.mass = IC.mass;
+ entity.aero_stabilised = sm->aero_stabilised;
ai->createBallistic( &entity );
if (sm->count > 0) (sm->count)--;
void
FGSubmodelMgr::load ()
{
-
- int i;
- SGPropertyNode *path = fgGetNode("/sim/systems/submodels/path");
+ SGPropertyNode *path = fgGetNode("/sim/submodels/path");
SGPropertyNode root;
if (path) {
}
}
- int count = root.nChildren();
- for (i = 0; i < count; i++) {
- // cout << "Reading submodel " << i << endl;
- SGPropertyNode *prop;
+ vector<SGPropertyNode_ptr> children = root.getChildren("submodel");
+ vector<SGPropertyNode_ptr>::iterator it = children.begin();
+ vector<SGPropertyNode_ptr>::iterator end = children.end();
+ for (int i = 0; it < end; ++it, i++) {
+
+ // cout << "Reading submodel " << (*it)->getPath() << endl;
submodel* sm = new submodel;
- SGPropertyNode * entry_node = root.getChild(i);
+ SGPropertyNode * entry_node = *it;
sm->trigger = fgGetNode(entry_node->getStringValue("trigger", "none"), true);
sm->name = entry_node->getStringValue("name", "none_defined");
sm->model = entry_node->getStringValue("model", "Models/Geometry/rocket.ac");
sm->first_time = false;
sm->cd = entry_node->getDoubleValue("cd", 0.193);
sm->weight = entry_node->getDoubleValue("weight", 0.25);
+ sm->aero_stabilised = entry_node->getBoolValue ("aero-stabilised", true);
sm->contents_node = fgGetNode(entry_node->getStringValue("contents", "none"), true);
sm->trigger->setBoolValue(false);
sm->contents = sm->contents_node->getDoubleValue();
- sm->prop = fgGetNode("/systems/submodels/submodel", i, true);
+ sm->prop = fgGetNode("/ai/submodels/submodel", i, true);
sm->prop->tie("count", SGRawValuePointer<int>(&(sm->count)));
// sm->prop->tie("contents", SGRawValuePointer<double>(&(sm->contents)));