#include "AIGroundVehicle.hxx"
#include "AIEscort.hxx"
-FGAIManager::FGAIManager() {
+FGAIManager::FGAIManager() :
+ cb_ai_bare(SGPropertyChangeCallback<FGAIManager>(this,&FGAIManager::updateLOD,
+ fgGetNode("/sim/rendering/static-lod/ai-bare", true))),
+ cb_ai_detailed(SGPropertyChangeCallback<FGAIManager>(this,&FGAIManager::updateLOD,
+ fgGetNode("/sim/rendering/static-lod/ai-detailed", true)))
+{
_dt = 0.0;
mNumAiModels = 0;
user_latitude_node = fgGetNode("/position/latitude-deg", true);
user_longitude_node = fgGetNode("/position/longitude-deg", true);
user_altitude_node = fgGetNode("/position/altitude-ft", true);
+ user_altitude_agl_node = fgGetNode("/position/altitude-agl-ft", true);
user_heading_node = fgGetNode("/orientation/heading-deg", true);
user_pitch_node = fgGetNode("/orientation/pitch-deg", true);
user_yaw_node = fgGetNode("/orientation/side-slip-deg", true);
if (!enabled)
return;
- FGTrafficManager *tmgr = (FGTrafficManager*) globals->get_subsystem("Traffic Manager");
+ FGTrafficManager *tmgr = (FGTrafficManager*) globals->get_subsystem("traffic-manager");
_dt = dt;
ai_list_iterator ai_list_itr = ai_list.begin();
thermal_lift_node->setDoubleValue( strength ); // for thermals
}
+/** update LOD settings of all AI/MP models */
+void
+FGAIManager::updateLOD(SGPropertyNode* node)
+{
+ ai_list_iterator ai_list_itr = ai_list.begin();
+ while(ai_list_itr != ai_list.end())
+ {
+ (*ai_list_itr)->updateLOD();
+ ++ai_list_itr;
+ }
+}
+
void
FGAIManager::attach(FGAIBase *model)
{
void
FGAIManager::fetchUserState( void ) {
+
user_latitude = user_latitude_node->getDoubleValue();
user_longitude = user_longitude_node->getDoubleValue();
user_altitude = user_altitude_node->getDoubleValue();
user_speed = user_speed_node->getDoubleValue() * 0.592484;
user_roll = user_roll_node->getDoubleValue();
wind_from_east = wind_from_east_node->getDoubleValue();
- wind_from_north = wind_from_north_node->getDoubleValue();
+ wind_from_north = wind_from_north_node->getDoubleValue();
+ user_altitude_agl = user_altitude_agl_node->getDoubleValue();
+
}
// only keep the results from the nearest thermal
SGPropertyNode_ptr root = new SGPropertyNode;
readProperties(path.str(), root);
return root;
- } catch (const sg_exception &) {
- SG_LOG(SG_GENERAL, SG_DEBUG, "Incorrect path specified for AI "
- "scenario: \"" << path.str() << "\"");
+ } catch (const sg_exception &t) {
+ SG_LOG(SG_GENERAL, SG_ALERT, "Failed to load scenario '"
+ << path.str() << "': " << t.getFormattedMessage());
return 0;
}
}