diff --git a/src/Aircraft/controls.cxx b/src/Aircraft/controls.cxx index a37150c44..dcd4a553b 100644 --- a/src/Aircraft/controls.cxx +++ b/src/Aircraft/controls.cxx @@ -24,35 +24,10 @@ # include "config.h" #endif -#include -#include #include
- +#include #include "controls.hxx" - -static const int MAX_NAME_LEN = 128; - - -//////////////////////////////////////////////////////////////////////// -// Inline utility methods. -//////////////////////////////////////////////////////////////////////// - -static inline void -CLAMP(double *x, double min, double max ) -{ - if ( *x < min ) { *x = min; } - if ( *x > max ) { *x = max; } -} - -static inline void -CLAMP(int *i, int min, int max ) -{ - if ( *i < min ) { *i = min; } - if ( *i > max ) { *i = max; } -} - - //////////////////////////////////////////////////////////////////////// // Implementation of FGControls. //////////////////////////////////////////////////////////////////////// @@ -198,13 +173,13 @@ FGControls::init () { throttle_idle = true; for ( int engine = 0; engine < MAX_ENGINES; engine++ ) { - throttle[engine] = 0.0; - mixture[engine] = 1.0; - fuel_pump[engine] = false; - prop_advance[engine] = 1.0; - magnetos[engine] = 0; - feed_tank[engine] = -1; // set to -1 to turn off all tanks 0 feeds all engines from center body tank - starter[engine] = false; + throttle[engine] = 0.0; + mixture[engine] = 1.0; + fuel_pump[engine] = false; + prop_advance[engine] = 1.0; + magnetos[engine] = 0; + feed_tank[engine] = -1; // set to -1 to turn off all tanks 0 feeds all engines from center body tank + starter[engine] = false; feather[engine] = false; ignition[engine] = false; fire_switch[engine] = false; @@ -243,829 +218,426 @@ FGControls::init () auto_coordination = fgGetNode("/sim/auto-coordination", true); } +static inline void _SetRoot( simgear::TiedPropertyList & tiedProperties, const char * root, int index = 0 ) +{ + tiedProperties.setRoot( fgGetNode( root, index, true ) ); +} void FGControls::bind () { - int index, i; + int index, i; - // flight controls - fgTie("/controls/flight/aileron", this, - &FGControls::get_aileron, &FGControls::set_aileron); - fgSetArchivable("/controls/flight/aileron"); + // flight controls + _SetRoot( _tiedProperties, "/controls/flight" ); - fgTie("/controls/flight/aileron-trim", this, - &FGControls::get_aileron_trim, &FGControls::set_aileron_trim); - fgSetArchivable("/controls/flight/aileron-trim"); + _tiedProperties.Tie( "aileron", this, &FGControls::get_aileron, &FGControls::set_aileron ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/elevator", this, - &FGControls::get_elevator, &FGControls::set_elevator); - fgSetArchivable("/controls/flight/elevator"); + _tiedProperties.Tie( "aileron-trim", this, &FGControls::get_aileron_trim, &FGControls::set_aileron_trim ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/elevator-trim", this, - &FGControls::get_elevator_trim, &FGControls::set_elevator_trim); - fgSetArchivable("/controls/flight/elevator-trim"); + _tiedProperties.Tie( "elevator", this, &FGControls::get_elevator, &FGControls::set_elevator ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/rudder", this, - &FGControls::get_rudder, &FGControls::set_rudder); - fgSetArchivable("/controls/flight/rudder"); + _tiedProperties.Tie( "elevator-trim", this, &FGControls::get_elevator_trim, &FGControls::set_elevator_trim ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/rudder-trim", this, - &FGControls::get_rudder_trim, &FGControls::set_rudder_trim); - fgSetArchivable("/controls/flight/rudder-trim"); + _tiedProperties.Tie( "rudder", this, &FGControls::get_rudder, &FGControls::set_rudder ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/flaps", this, - &FGControls::get_flaps, &FGControls::set_flaps); - fgSetArchivable("/controls/flight/flaps"); + _tiedProperties.Tie( "rudder-trim", this, &FGControls::get_rudder_trim, &FGControls::set_rudder_trim ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/slats", this, - &FGControls::get_slats, &FGControls::set_slats); - fgSetArchivable("/controls/flight/slats"); + _tiedProperties.Tie( "flaps", this, &FGControls::get_flaps, &FGControls::set_flaps ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/BLC", this, - &FGControls::get_BLC, &FGControls::set_BLC); - fgSetArchivable("/controls/flight/BLC"); + _tiedProperties.Tie( "slats", this, &FGControls::get_slats, &FGControls::set_slats ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/spoilers", this, - &FGControls::get_spoilers, &FGControls::set_spoilers); - fgSetArchivable("/controls/flight/spoilers"); + _tiedProperties.Tie( "BLC", this, &FGControls::get_BLC, &FGControls::set_BLC ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/speedbrake", this, - &FGControls::get_speedbrake, &FGControls::set_speedbrake); - fgSetArchivable("/controls/flight/speedbrake"); + _tiedProperties.Tie( "spoilers", this, &FGControls::get_spoilers, &FGControls::set_spoilers ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/wing-sweep", this, - &FGControls::get_wing_sweep, &FGControls::set_wing_sweep); - fgSetArchivable("/controls/flight/wing-sweep"); + _tiedProperties.Tie( "speedbrake", this, &FGControls::get_speedbrake, &FGControls::set_speedbrake ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/wing-fold", this, - &FGControls::get_wing_fold, &FGControls::set_wing_fold); - fgSetArchivable("/controls/flight/wing-fold"); + _tiedProperties.Tie( "wing-sweep", this, &FGControls::get_wing_sweep, &FGControls::set_wing_sweep ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/flight/drag-chute", this, - &FGControls::get_drag_chute, &FGControls::set_drag_chute); - fgSetArchivable("/controls/flight/drag-chute"); + _tiedProperties.Tie( "wing-fold", this, &FGControls::get_wing_fold, &FGControls::set_wing_fold ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // engines - fgTie("/controls/engines/throttle_idle", this, - &FGControls::get_throttle_idle, &FGControls::set_throttle_idle); - fgSetArchivable("/controls/engines/throttle_idle"); + _tiedProperties.Tie( "drag-chute", this, &FGControls::get_drag_chute, &FGControls::set_drag_chute ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/throttle", index); - fgTie(name, this, index, - &FGControls::get_throttle, &FGControls::set_throttle); - fgSetArchivable(name); + // engines + _tiedProperties.setRoot( fgGetNode("/controls/engines", true ) ); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/starter", index); - fgTie(name, this, index, - &FGControls::get_starter, &FGControls::set_starter); - fgSetArchivable(name); + _tiedProperties.Tie( "throttle_idle", this, &FGControls::get_throttle_idle, &FGControls::set_throttle_idle ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fuel-pump", index); - fgTie(name, this, index, - &FGControls::get_fuel_pump, &FGControls::set_fuel_pump); - fgSetArchivable(name); + for (index = 0; index < MAX_ENGINES; index++) { + _SetRoot(_tiedProperties, "/controls/engines/engine", index ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fire-switch", index); - fgTie(name, this, index, - &FGControls::get_fire_switch, &FGControls::set_fire_switch); - fgSetArchivable(name); + _tiedProperties.Tie( "throttle", this, index, &FGControls::get_throttle, &FGControls::set_throttle ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fire-bottle-discharge", index); - fgTie(name, this, index, - &FGControls::get_fire_bottle_discharge, - &FGControls::set_fire_bottle_discharge); - fgSetArchivable(name); + _tiedProperties.Tie( "starter", this, index, &FGControls::get_starter, &FGControls::set_starter ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/cutoff", index); - fgTie(name, this, index, - &FGControls::get_cutoff, &FGControls::set_cutoff); - fgSetArchivable(name); + _tiedProperties.Tie( "fuel-pump", this, index, &FGControls::get_fuel_pump, &FGControls::set_fuel_pump ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/mixture", index); - fgTie(name, this, index, - &FGControls::get_mixture, &FGControls::set_mixture); - fgSetArchivable(name); + _tiedProperties.Tie( "fire-switch", this, index, &FGControls::get_fire_switch, &FGControls::set_fire_switch ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/propeller-pitch", index); - fgTie(name, this, index, - &FGControls::get_prop_advance, - &FGControls::set_prop_advance); - fgSetArchivable(name); + _tiedProperties.Tie( "fire-bottle-discharge", this, index, &FGControls::get_fire_bottle_discharge, &FGControls::set_fire_bottle_discharge ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/magnetos", index); - fgTie(name, this, index, - &FGControls::get_magnetos, &FGControls::set_magnetos); - fgSetArchivable(name); - - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/feed_tank", index); - fgTie(name, this, index, - &FGControls::get_feed_tank, &FGControls::set_feed_tank); - fgSetArchivable(name); + _tiedProperties.Tie( "cutoff", this, index, &FGControls::get_cutoff, &FGControls::set_cutoff ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + _tiedProperties.Tie( "mixture", this, index, &FGControls::get_mixture, &FGControls::set_mixture ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/WEP", index); - fgTie(name, this, index, - &FGControls::get_nitrous_injection, - &FGControls::set_nitrous_injection); - fgSetArchivable(name); + _tiedProperties.Tie( "propeller-pitch", this, index, &FGControls::get_prop_advance, &FGControls::set_prop_advance ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/cowl-flaps-norm", index); - fgTie(name, this, index, - &FGControls::get_cowl_flaps_norm, - &FGControls::set_cowl_flaps_norm); - fgSetArchivable(name); + _tiedProperties.Tie( "magnetos", this, index, &FGControls::get_magnetos, &FGControls::set_magnetos ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/propeller-feather", index); - fgTie(name, this, index, - &FGControls::get_feather, &FGControls::set_feather); - fgSetArchivable(name); + _tiedProperties.Tie( "feed_tank", this, index, &FGControls::get_feed_tank, &FGControls::set_feed_tank ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/ignition", index); - fgTie(name, this, index, - &FGControls::get_ignition, &FGControls::set_ignition); - fgSetArchivable(name); + _tiedProperties.Tie( "WEP", this, index, &FGControls::get_nitrous_injection, &FGControls::set_nitrous_injection ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/augmentation", index); - fgTie(name, this, index, - &FGControls::get_augmentation, - &FGControls::set_augmentation); - fgSetArchivable(name); + _tiedProperties.Tie( "cowl-flaps-norm", this, index, &FGControls::get_cowl_flaps_norm, &FGControls::set_cowl_flaps_norm ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/reverser", index); - fgTie(name, this, index, - &FGControls::get_reverser, &FGControls::set_reverser); - fgSetArchivable(name); + _tiedProperties.Tie( "propeller-feather", this, index, &FGControls::get_feather, &FGControls::set_feather ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/water-injection", index); - fgTie(name, this, index, - &FGControls::get_water_injection, - &FGControls::set_water_injection); - fgSetArchivable(name); + _tiedProperties.Tie( "ignition", this, index, &FGControls::get_ignition, &FGControls::set_ignition ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/condition", index); - fgTie(name, this, index, - &FGControls::get_condition, &FGControls::set_condition); - fgSetArchivable(name); - } + _tiedProperties.Tie( "augmentation", this, index, &FGControls::get_augmentation, &FGControls::set_augmentation ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // fuel - fgTie("/controls/fuel/dump-valve", this, - &FGControls::get_dump_valve, &FGControls::set_dump_valve); - fgSetArchivable("/controls/fuel/dump-valve"); + _tiedProperties.Tie( "reverser", this, index, &FGControls::get_reverser, &FGControls::set_reverser ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_TANKS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/fuel/tank[%d]/fuel_selector", index); - fgTie(name, this, index, - &FGControls::get_fuel_selector, - &FGControls::set_fuel_selector); - fgSetArchivable(name); + _tiedProperties.Tie( "water-injection", this, index, &FGControls::get_water_injection, &FGControls::set_water_injection ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, "/controls/fuel/tank[%d]/to_engine", index); - fgTie(name, this, index, - &FGControls::get_to_engine, &FGControls::set_to_engine); - fgSetArchivable(name); - - snprintf(name, MAX_NAME_LEN, "/controls/fuel/tank[%d]/to_tank", index); - fgTie(name, this, index, - &FGControls::get_to_tank, &FGControls::set_to_tank); - fgSetArchivable(name); - - for (i = 0; i < MAX_BOOSTPUMPS; i++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/fuel/tank[%d]/boost-pump[%d]", index, i); - fgTie(name, this, index * 2 + i, - &FGControls::get_boost_pump, - &FGControls::set_boost_pump); - fgSetArchivable(name); + _tiedProperties.Tie( "condition", this, index, &FGControls::get_condition, &FGControls::set_condition ) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); } - } - // gear - fgTie("/controls/gear/brake-left", this, - &FGControls::get_brake_left, - &FGControls::set_brake_left); - fgSetArchivable("/controls/gear/brake-left"); + // fuel + _SetRoot( _tiedProperties, "/controls/fuel" ); - fgTie("/controls/gear/brake-right", this, - &FGControls::get_brake_right, - &FGControls::set_brake_right); - fgSetArchivable("/controls/gear/brake-right"); + _tiedProperties.Tie( "dump-valve", this, &FGControls::get_dump_valve, &FGControls::set_dump_valve) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/copilot-brake-left", this, - &FGControls::get_copilot_brake_left, - &FGControls::set_copilot_brake_left); - fgSetArchivable("/controls/gear/copilot-brake-left"); + for (index = 0; index < MAX_TANKS; index++) { + _SetRoot( _tiedProperties, "/controls/fuel/tank", index ); - fgTie("/controls/gear/copilot-brake-right", this, - &FGControls::get_copilot_brake_right, - &FGControls::set_copilot_brake_right); - fgSetArchivable("/controls/gear/copilot-brake-right"); + _tiedProperties.Tie( "fuel_selector", this, index, &FGControls::get_fuel_selector, &FGControls::set_fuel_selector) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/brake-parking", this, - &FGControls::get_brake_parking, - &FGControls::set_brake_parking); - fgSetArchivable("/controls/gear/brake-parking"); + _tiedProperties.Tie( "to_engine", this, index, &FGControls::get_to_engine, &FGControls::set_to_engine) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/steering", this, - &FGControls::get_steering, &FGControls::set_steering); - fgSetArchivable("/controls/gear/steering"); + _tiedProperties.Tie( "to_tank", this, index, &FGControls::get_to_tank, &FGControls::set_to_tank) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/nose-wheel-steering", this, - &FGControls::get_nose_wheel_steering, - &FGControls::set_nose_wheel_steering); - fgSetArchivable("/controls/gear/nose-wheel-steering"); + for (i = 0; i < MAX_BOOSTPUMPS; i++) { + _tiedProperties.Tie( "boost-pump", i, + this, index * 2 + i, &FGControls::get_boost_pump, &FGControls::set_boost_pump) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } + } - fgTie("/controls/gear/gear-down", this, - &FGControls::get_gear_down, &FGControls::set_gear_down); - fgSetArchivable("/controls/gear/gear-down"); + // gear + _SetRoot( _tiedProperties, "/controls/gear" ); - fgTie("/controls/gear/antiskid", this, - &FGControls::get_antiskid, &FGControls::set_antiskid); - fgSetArchivable("/controls/gear/antiskid"); + _tiedProperties.Tie( "brake-left", this, &FGControls::get_brake_left, &FGControls::set_brake_left) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/tailhook", this, - &FGControls::get_tailhook, &FGControls::set_tailhook); - fgSetArchivable("/controls/gear/tailhook"); + _tiedProperties.Tie( "brake-right", this, &FGControls::get_brake_right, &FGControls::set_brake_right) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/launchbar", this, - &FGControls::get_launchbar, &FGControls::set_launchbar); - fgSetArchivable("/controls/gear/launchbar"); + _tiedProperties.Tie( "copilot-brake-left", this, &FGControls::get_copilot_brake_left, &FGControls::set_copilot_brake_left) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/catapult-launch-cmd", this, - &FGControls::get_catapult_launch_cmd, &FGControls::set_catapult_launch_cmd); - fgSetArchivable("/controls/gear/catapult-launch-cmd"); + _tiedProperties.Tie( "copilot-brake-right", this, &FGControls::get_copilot_brake_right, &FGControls::set_copilot_brake_right) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/gear/tailwheel-lock", this, - &FGControls::get_tailwheel_lock, - &FGControls::set_tailwheel_lock); - fgSetArchivable("/controls/gear/tailwheel-lock"); + _tiedProperties.Tie( "brake-parking", this, &FGControls::get_brake_parking, &FGControls::set_brake_parking) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_WHEELS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/gear/wheel[%d]/alternate-extension", index); - fgTie(name, this, index, - &FGControls::get_alternate_extension, - &FGControls::set_alternate_extension); - fgSetArchivable(name); - } + _tiedProperties.Tie( "steering", this, &FGControls::get_steering, &FGControls::set_steering) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // anti-ice - fgTie("/controls/anti-ice/wing-heat", this, - &FGControls::get_wing_heat, &FGControls::set_wing_heat); - fgSetArchivable("/controls/anti-ice/wing-heat"); + _tiedProperties.Tie( "nose-wheel-steering", this, &FGControls::get_nose_wheel_steering, &FGControls::set_nose_wheel_steering) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/anti-ice/pitot-heat", this, - &FGControls::get_pitot_heat, &FGControls::set_pitot_heat); - fgSetArchivable("/controls/anti-ice/pitot-heat"); + _tiedProperties.Tie( "gear-down", this, &FGControls::get_gear_down, &FGControls::set_gear_down) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/anti-ice/wiper", this, - &FGControls::get_wiper, &FGControls::set_wiper); - fgSetArchivable("/controls/anti-ice/wiper"); + _tiedProperties.Tie( "antiskid", this, &FGControls::get_antiskid, &FGControls::set_antiskid) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/anti-ice/window-heat", this, - &FGControls::get_window_heat, &FGControls::set_window_heat); - fgSetArchivable("/controls/anti-ice/window-heat"); + _tiedProperties.Tie( "tailhook", this, &FGControls::get_tailhook, &FGControls::set_tailhook) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/anti-ice/engine[%d]/carb-heat", index); - fgTie(name, this, index, - &FGControls::get_carb_heat, &FGControls::set_carb_heat); - fgSetArchivable(name); + _tiedProperties.Tie( "launchbar", this, &FGControls::get_launchbar, &FGControls::set_launchbar) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/anti-ice/engine[%d]/inlet-heat", index); - fgTie(name, this, index, - &FGControls::get_inlet_heat, &FGControls::set_inlet_heat); - fgSetArchivable(name); - } + _tiedProperties.Tie( "catapult-launch-cmd", this, &FGControls::get_catapult_launch_cmd, &FGControls::set_catapult_launch_cmd) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // hydraulics - for (index = 0; index < MAX_HYD_SYSTEMS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/hydraulic/system[%d]/engine-pump", index); - fgTie(name, this, index, - &FGControls::get_engine_pump, &FGControls::set_engine_pump); - fgSetArchivable(name); + _tiedProperties.Tie( "tailwheel-lock", this, &FGControls::get_tailwheel_lock, &FGControls::set_tailwheel_lock) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/hydraulic/system[%d]/electric-pump", index); - fgTie(name, this, index, - &FGControls::get_electric_pump, - &FGControls::set_electric_pump); - fgSetArchivable(name); - } + for (index = 0; index < MAX_WHEELS; index++) { + _SetRoot( _tiedProperties, "/controls/gear/wheel", index ); + _tiedProperties.Tie( "alternate-extension", this, index, &FGControls::get_alternate_extension, &FGControls::set_alternate_extension) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - // electric - fgTie("/controls/electric/battery-switch", this, - &FGControls::get_battery_switch, - &FGControls::set_battery_switch); - fgSetArchivable("/controls/electric/battery-switch"); - - fgTie("/controls/electric/external-power", this, - &FGControls::get_external_power, - &FGControls::set_external_power); - fgSetArchivable("/controls/electric/external-power"); + // anti-ice + _SetRoot( _tiedProperties, "/controls/anti-ice" ); - fgTie("/controls/electric/APU-generator", this, - &FGControls::get_APU_generator, - &FGControls::set_APU_generator); - fgSetArchivable("/controls/electric/APU-generator"); + _tiedProperties.Tie( "wing-heat", this, &FGControls::get_wing_heat, &FGControls::set_wing_heat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/electric/engine[%d]/generator", index); - fgTie(name, this, index, - &FGControls::get_generator_breaker, - &FGControls::set_generator_breaker); - fgSetArchivable(name); + _tiedProperties.Tie( "pitot-heat", this, &FGControls::get_pitot_heat, &FGControls::set_pitot_heat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/electric/engine[%d]/bus-tie", index); - fgTie(name, this, index, - &FGControls::get_bus_tie, - &FGControls::set_bus_tie); - fgSetArchivable(name); - } + _tiedProperties.Tie( "wiper", this, &FGControls::get_wiper, &FGControls::set_wiper) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // pneumatic - fgTie("/controls/pneumatic/APU-bleed", this, - &FGControls::get_APU_bleed, - &FGControls::set_APU_bleed); - fgSetArchivable("/controls/pneumatic/APU-bleed"); + _tiedProperties.Tie( "window-heat", this, &FGControls::get_window_heat, &FGControls::set_window_heat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/pneumatic/engine[%d]/bleed", index); - fgTie(name, this, index, - &FGControls::get_engine_bleed, - &FGControls::set_engine_bleed); - fgSetArchivable(name); - } + for (index = 0; index < MAX_ENGINES; index++) { + _SetRoot( _tiedProperties, "/controls/anti-ice/engine", index ); - // pressurization - fgTie("/controls/pressurization/mode", this, - &FGControls::get_mode, &FGControls::set_mode); - fgSetArchivable("/controls/pressurization/mode"); + _tiedProperties.Tie( "carb-heat", this, index, &FGControls::get_carb_heat, &FGControls::set_carb_heat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/pressurization/dump", this, - &FGControls::get_dump, &FGControls::set_dump); - fgSetArchivable("/controls/pressurization/dump"); + _tiedProperties.Tie( "inlet-heat", this, index, &FGControls::get_inlet_heat, &FGControls::set_inlet_heat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - fgTie("/controls/pressurization/outflow-valve", this, - &FGControls::get_outflow_valve, - &FGControls::set_outflow_valve); - fgSetArchivable("/controls/pressurization/outflow-valve"); + // hydraulics + for (index = 0; index < MAX_HYD_SYSTEMS; index++) { + _SetRoot( _tiedProperties, "/controls/hydraulic/system", index ); - for (index = 0; index < MAX_PACKS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/pressurization/pack[%d]/pack-on", index); - fgTie(name, this, index, - &FGControls::get_pack_on, &FGControls::set_pack_on); - fgSetArchivable(name); - } - - // lights - fgTie("/controls/lighting/landing-lights", this, - &FGControls::get_landing_lights, - &FGControls::set_landing_lights); - fgSetArchivable("/controls/lighting/landing-lights"); + _tiedProperties.Tie( "engine-pump", this, index, &FGControls::get_engine_pump, &FGControls::set_engine_pump) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/lighting/turn-off-lights", this, - &FGControls::get_turn_off_lights, - &FGControls::set_turn_off_lights); - fgSetArchivable("/controls/lighting/turn-off-lights"); - - fgTie("/controls/lighting/taxi-light", this, - &FGControls::get_taxi_light, &FGControls::set_taxi_light); - fgSetArchivable("/controls/lighting/taxi-light"); - - fgTie("/controls/lighting/logo-lights", this, - &FGControls::get_logo_lights, &FGControls::set_logo_lights); - fgSetArchivable("/controls/lighting/logo-lights"); - - fgTie("/controls/lighting/nav-lights", this, - &FGControls::get_nav_lights, &FGControls::set_nav_lights); - fgSetArchivable("/controls/lighting/nav-lights"); + _tiedProperties.Tie( "electric-pump", this, index, &FGControls::get_electric_pump, &FGControls::set_electric_pump) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - fgTie("/controls/lighting/beacon", this, - &FGControls::get_beacon, &FGControls::set_beacon); - fgSetArchivable("/controls/lighting/beacon"); - - fgTie("/controls/lighting/strobe", this, - &FGControls::get_strobe, &FGControls::set_strobe); - fgSetArchivable("/controls/lighting/strobe"); + // electric + _SetRoot( _tiedProperties, "/controls/electric" ); - fgTie("/controls/lighting/panel-norm", this, - &FGControls::get_panel_norm, &FGControls::set_panel_norm); - fgSetArchivable("/controls/lighting/panel-norm"); - - fgTie("/controls/lighting/instruments-norm", this, - &FGControls::get_instruments_norm, - &FGControls::set_instruments_norm); - fgSetArchivable("/controls/lighting/instruments-norm"); + _tiedProperties.Tie( "battery-switch", this, &FGControls::get_battery_switch, &FGControls::set_battery_switch) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/lighting/dome-norm", this, - &FGControls::get_dome_norm, &FGControls::set_dome_norm); - fgSetArchivable("/controls/lighting/dome-norm"); - - // armament - fgTie("/controls/armament/master-arm", this, - &FGControls::get_master_arm, &FGControls::set_master_arm); - fgSetArchivable("/controls/armament/master-arm"); + _tiedProperties.Tie( "external-power", this, &FGControls::get_external_power, &FGControls::set_external_power) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/armament/station-select", this, - &FGControls::get_station_select, - &FGControls::set_station_select); - fgSetArchivable("/controls/armament/station-select"); + _tiedProperties.Tie( "APU-generator", this, &FGControls::get_APU_generator, &FGControls::set_APU_generator) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/armament/release-all", this, - &FGControls::get_release_ALL, - &FGControls::set_release_ALL); - fgSetArchivable("/controls/armament/release-all"); + for (index = 0; index < MAX_ENGINES; index++) { + _SetRoot( _tiedProperties, "/controls/electric/engine", index ); - for (index = 0; index < MAX_STATIONS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/stick-size", index); - fgTie(name, this, index, - &FGControls::get_stick_size, &FGControls::set_stick_size); - fgSetArchivable(name); + _tiedProperties.Tie( "generator", this, index, &FGControls::get_generator_breaker, &FGControls::set_generator_breaker) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/release-stick", index); - fgTie(name, this, index, - &FGControls::get_release_stick, &FGControls::set_release_stick); - fgSetArchivable(name); + _tiedProperties.Tie( "bus-tie", this, index, &FGControls::get_bus_tie, &FGControls::set_bus_tie) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/release-all", index); - fgTie(name, this, index, - &FGControls::get_release_all, &FGControls::set_release_all); - fgSetArchivable(name); + // pneumatic + _SetRoot( _tiedProperties, "/controls/pneumatic" ); - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/jettison-all", index); - fgTie(name, this, index, - &FGControls::get_jettison_all, &FGControls::set_jettison_all); - fgSetArchivable(name); - } + _tiedProperties.Tie( "APU-bleed", this, &FGControls::get_APU_bleed, &FGControls::set_APU_bleed) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // seat - fgTie("/controls/seat/vertical-adjust", this, - &FGControls::get_vertical_adjust, - &FGControls::set_vertical_adjust); - fgSetArchivable("/controls/seat/vertical-adjust"); + for (index = 0; index < MAX_ENGINES; index++) { + _SetRoot( _tiedProperties, "/controls/pneumatic/engine", index ); - fgTie("/controls/seat/fore-aft-adjust", this, - &FGControls::get_fore_aft_adjust, - &FGControls::set_fore_aft_adjust); - fgSetArchivable("/controls/seat/fore-aft-adjust"); - - for (index = 0; index < MAX_EJECTION_SEATS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/seat/eject[%d]/initiate", index); - fgTie(name, this, index, - &FGControls::get_ejection_seat, - &FGControls::set_ejection_seat); - fgSetArchivable(name); + _tiedProperties.Tie( "bleed", this, index, &FGControls::get_engine_bleed, &FGControls::set_engine_bleed) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - snprintf(name, MAX_NAME_LEN, - "/controls/seat/eject[%d]/status", index); + // pressurization + _SetRoot( _tiedProperties, "/controls/pressurization" ); - fgTie(name, this, index, - &FGControls::get_eseat_status, - &FGControls::set_eseat_status); + _tiedProperties.Tie( "mode", this, &FGControls::get_mode, &FGControls::set_mode) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgSetArchivable(name); - } - - fgTie("/controls/seat/cmd_selector_valve", this, - &FGControls::get_cmd_selector_valve, - &FGControls::set_cmd_selector_valve); - fgSetArchivable("/controls/seat/eject/cmd_selector_valve"); + _tiedProperties.Tie( "dump", this, &FGControls::get_dump, &FGControls::set_dump) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + _tiedProperties.Tie( "outflow-valve", this, &FGControls::get_outflow_valve, &FGControls::set_outflow_valve) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - // APU - fgTie("/controls/APU/off-start-run", this, - &FGControls::get_off_start_run, - &FGControls::set_off_start_run); - fgSetArchivable("/controls/APU/off-start-run"); + for (index = 0; index < MAX_PACKS; index++) { + _SetRoot( _tiedProperties, "/controls/pressurization/pack", index ); - fgTie("/controls/APU/fire-switch", this, - &FGControls::get_APU_fire_switch, - &FGControls::set_APU_fire_switch); - fgSetArchivable("/controls/APU/fire-switch"); + _tiedProperties.Tie( "pack-on", this, index, &FGControls::get_pack_on, &FGControls::set_pack_on) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } - // autoflight - for (index = 0; index < MAX_AUTOPILOTS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/autoflight/autopilot[%d]/engage", index); - fgTie(name, this, index, - &FGControls::get_autopilot_engage, - &FGControls::set_autopilot_engage); - fgSetArchivable(name); - } - - fgTie("/controls/autoflight/autothrottle-arm", this, - &FGControls::get_autothrottle_arm, - &FGControls::set_autothrottle_arm); - fgSetArchivable("/controls/autoflight/autothrottle-arm"); + // lights + _SetRoot( _tiedProperties, "/controls/lighting" ); - fgTie("/controls/autoflight/autothrottle-engage", this, - &FGControls::get_autothrottle_engage, - &FGControls::set_autothrottle_engage); - fgSetArchivable("/controls/autoflight/autothrottle-engage"); + _tiedProperties.Tie( "landing-lights", this, &FGControls::get_landing_lights, &FGControls::set_landing_lights) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/heading-select", this, - &FGControls::get_heading_select, - &FGControls::set_heading_select); - fgSetArchivable("/controls/autoflight/heading-select"); + _tiedProperties.Tie( "turn-off-lights", this, &FGControls::get_turn_off_lights, &FGControls::set_turn_off_lights) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/altitude-select", this, - &FGControls::get_altitude_select, - &FGControls::set_altitude_select); - fgSetArchivable("/controls/autoflight/altitude-select"); + _tiedProperties.Tie( "taxi-light", this, &FGControls::get_taxi_light, &FGControls::set_taxi_light) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/bank-angle-select", this, - &FGControls::get_bank_angle_select, - &FGControls::set_bank_angle_select); - fgSetArchivable("/controls/autoflight/bank-angle-select"); + _tiedProperties.Tie( "logo-lights", this, &FGControls::get_logo_lights, &FGControls::set_logo_lights) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/vertical-speed-select", this, - &FGControls::get_vertical_speed_select, - &FGControls::set_vertical_speed_select); - fgSetArchivable("/controls/autoflight/vertical-speed-select"); + _tiedProperties.Tie( "nav-lights", this, &FGControls::get_nav_lights, &FGControls::set_nav_lights) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/speed-select", this, - &FGControls::get_speed_select, - &FGControls::set_speed_select); - fgSetArchivable("/controls/autoflight/speed-select"); + _tiedProperties.Tie( "beacon", this, &FGControls::get_beacon, &FGControls::set_beacon) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/mach-select", this, - &FGControls::get_mach_select, - &FGControls::set_mach_select); - fgSetArchivable("/controls/autoflight/mach-select"); + _tiedProperties.Tie( "strobe", this, &FGControls::get_strobe, &FGControls::set_strobe) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/vertical-mode", this, - &FGControls::get_vertical_mode, - &FGControls::set_vertical_mode); - fgSetArchivable("/controls/autoflight/vertical-mode"); + _tiedProperties.Tie( "panel-norm", this, &FGControls::get_panel_norm, &FGControls::set_panel_norm) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); - fgTie("/controls/autoflight/lateral-mode", this, - &FGControls::get_lateral_mode, - &FGControls::set_lateral_mode); - fgSetArchivable("/controls/autoflight/lateral-mode"); + _tiedProperties.Tie( "instruments-norm", this, &FGControls::get_instruments_norm, &FGControls::set_instruments_norm) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + _tiedProperties.Tie( "dome-norm", this, &FGControls::get_dome_norm, &FGControls::set_dome_norm) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + // armament + _SetRoot( _tiedProperties, "/controls/armament" ); + + _tiedProperties.Tie( "master-arm", this, &FGControls::get_master_arm, &FGControls::set_master_arm) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "station-select", this, &FGControls::get_station_select, &FGControls::set_station_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "release-all", this, &FGControls::get_release_ALL, &FGControls::set_release_ALL) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + for (index = 0; index < MAX_STATIONS; index++) { + _SetRoot( _tiedProperties, "/controls/armament/station", index ); + + _tiedProperties.Tie( "stick-size", this, index, &FGControls::get_stick_size, &FGControls::set_stick_size) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "release-stick", this, index, &FGControls::get_release_stick, &FGControls::set_release_stick) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "release-all", this, index, &FGControls::get_release_all, &FGControls::set_release_all) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "jettison-all", this, index, &FGControls::get_jettison_all, &FGControls::set_jettison_all) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } + + // seat + _SetRoot( _tiedProperties, "/controls/seat" ); + + _tiedProperties.Tie( "vertical-adjust", this, &FGControls::get_vertical_adjust, &FGControls::set_vertical_adjust) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "fore-aft-adjust", this, &FGControls::get_fore_aft_adjust, &FGControls::set_fore_aft_adjust) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "cmd_selector_valve", this, &FGControls::get_cmd_selector_valve, &FGControls::set_cmd_selector_valve) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + for (index = 0; index < MAX_EJECTION_SEATS; index++) { + _SetRoot( _tiedProperties, "/controls/seat/eject", index ); + + _tiedProperties.Tie( "initiate", this, index, &FGControls::get_ejection_seat, &FGControls::set_ejection_seat) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "status", this, index, &FGControls::get_eseat_status, &FGControls::set_eseat_status) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } + + // APU + _SetRoot( _tiedProperties, "/controls/APU" ); + + _tiedProperties.Tie( "off-start-run", this, &FGControls::get_off_start_run, &FGControls::set_off_start_run) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "fire-switch", this, &FGControls::get_APU_fire_switch, &FGControls::set_APU_fire_switch) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + // autoflight + for (index = 0; index < MAX_AUTOPILOTS; index++) { + + _SetRoot( _tiedProperties, "/controls/autoflight/autopilot", index ); + + _tiedProperties.Tie( "engage", this, index, &FGControls::get_autopilot_engage, &FGControls::set_autopilot_engage) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + } + + _SetRoot( _tiedProperties, "/controls/autoflight/" ); + + _tiedProperties.Tie( "autothrottle-arm", this, &FGControls::get_autothrottle_arm, &FGControls::set_autothrottle_arm) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "autothrottle-engage", this, &FGControls::get_autothrottle_engage, &FGControls::set_autothrottle_engage) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "heading-select", this, &FGControls::get_heading_select, &FGControls::set_heading_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "altitude-select", this, &FGControls::get_altitude_select, &FGControls::set_altitude_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "bank-angle-select", this, &FGControls::get_bank_angle_select, &FGControls::set_bank_angle_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "vertical-speed-select", this, &FGControls::get_vertical_speed_select, &FGControls::set_vertical_speed_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "speed-select", this, &FGControls::get_speed_select, &FGControls::set_speed_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "mach-select", this, &FGControls::get_mach_select, &FGControls::set_mach_select) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "vertical-mode", this, &FGControls::get_vertical_mode, &FGControls::set_vertical_mode) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); + + _tiedProperties.Tie( "lateral-mode", this, &FGControls::get_lateral_mode, &FGControls::set_lateral_mode) + ->setAttribute( SGPropertyNode::ARCHIVE, true ); } void FGControls::unbind () { - int index, i; - //Tie control properties. - fgUntie("/controls/flight/aileron"); - fgUntie("/controls/flight/aileron-trim"); - fgUntie("/controls/flight/elevator"); - fgUntie("/controls/flight/elevator-trim"); - fgUntie("/controls/flight/rudder"); - fgUntie("/controls/flight/rudder-trim"); - fgUntie("/controls/flight/flaps"); - fgUntie("/controls/flight/slats"); - fgUntie("/controls/flight/BLC"); - fgUntie("/controls/flight/spoilers"); - fgUntie("/controls/flight/speedbrake"); - fgUntie("/controls/flight/wing-sweep"); - fgUntie("/controls/flight/wing-fold"); - fgUntie("/controls/flight/drag-chute"); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/throttle", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/feed_tank", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/starter", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fuel-pump", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fire-switch", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/fire-bottle-discharge", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/throttle_idle", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/cutoff", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/mixture", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/propeller-pitch", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/magnetos", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, "/controls/engines/engine[%d]/WEP", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/cowl-flaps-norm", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/propeller-feather", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/ignition", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/augmentation", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/reverser", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/water-injection", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/engines/engine[%d]/condition", index); - fgUntie(name); - } - fgUntie("/controls/fuel/dump-valve"); - for (index = 0; index < MAX_TANKS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/fuel/tank[%d]/fuel_selector", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, "/controls/fuel/tank[%d]/to_engine", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, "/controls/fuel/tank[%d]/to_tank", index); - fgUntie(name); - for (i = 0; index < MAX_BOOSTPUMPS; i++) { - snprintf(name, MAX_NAME_LEN, - "/controls/fuel/tank[%d]/boost-pump[%d]", index, i); - fgUntie(name); - } - } - fgUntie("/controls/gear/brake-left"); - fgUntie("/controls/gear/brake-right"); - fgUntie("/controls/gear/brake-parking"); - fgUntie("/controls/gear/steering"); - fgUntie("/controls/gear/nose-wheel-steering"); - fgUntie("/controls/gear/gear-down"); - fgUntie("/controls/gear/antiskid"); - fgUntie("/controls/gear/tailhook"); - fgUntie("/controls/gear/launchbar"); - fgUntie("/controls/gear/catapult-launch-cmd"); - fgUntie("/controls/gear/tailwheel-lock"); - for (index = 0; index < MAX_WHEELS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/gear/wheel[%d]/alternate-extension", index); - fgUntie(name); - } - fgUntie("/controls/anti-ice/wing-heat"); - fgUntie("/controls/anti-ice/pitot-heat"); - fgUntie("/controls/anti-ice/wiper"); - fgUntie("/controls/anti-ice/window-heat"); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/anti-ice/engine[%d]/carb-heat", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/anti-ice/engine[%d]/inlet-heat", index); - fgUntie(name); - } - for (index = 0; index < MAX_HYD_SYSTEMS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/hydraulic/system[%d]/engine-pump", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/hydraulic/system[%d]/electric-pump", index); - fgUntie(name); - } - fgUntie("/controls/electric/battery-switch"); - fgUntie("/controls/electric/external-power"); - fgUntie("/controls/electric/APU-generator"); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/electric/engine[%d]/generator", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/electric/engine[%d]/bus-tie", index); - fgUntie(name); - } - fgUntie("/controls/pneumatic/APU-bleed"); - for (index = 0; index < MAX_ENGINES; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/pneumatic/engine[%d]/bleed", index); - fgUntie(name); - } - fgUntie("/controls/pressurization/mode"); - fgUntie("/controls/pressurization/dump"); - for (index = 0; index < MAX_PACKS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/pressurization/pack[%d]/pack-on", index); - fgUntie(name); - } - fgUntie("/controls/lighting/landing-lights"); - fgUntie("/controls/lighting/turn-off-lights"); - fgUntie("/controls/lighting/taxi-light"); - fgUntie("/controls/lighting/logo-lights"); - fgUntie("/controls/lighting/nav-lights"); - fgUntie("/controls/lighting/beacon"); - fgUntie("/controls/lighting/strobe"); - fgUntie("/controls/lighting/panel-norm"); - fgUntie("/controls/lighting/instruments-norm"); - fgUntie("/controls/lighting/dome-norm"); - - fgUntie("/controls/armament/master-arm"); - fgUntie("/controls/armament/station-select"); - fgUntie("/controls/armament/release-all"); - for (index = 0; index < MAX_STATIONS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/stick-size", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/release-stick", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/release-all", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/armament/station[%d]/jettison-all", index); - fgUntie(name); - } - - fgUntie("/controls/seat/vertical-adjust"); - fgUntie("/controls/seat/fore-aft-adjust"); - for (index = 0; index < MAX_EJECTION_SEATS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/seat/eject[%d]/initiate", index); - fgUntie(name); - snprintf(name, MAX_NAME_LEN, - "/controls/seat/eject[%d]/status", index); - fgUntie(name); - } - fgUntie("/controls/seat/cmd_selector_valve"); - - fgUntie("/controls/APU/off-start-run"); - fgUntie("/controls/APU/fire-switch"); - for (index = 0; index < MAX_AUTOPILOTS; index++) { - char name[MAX_NAME_LEN]; - snprintf(name, MAX_NAME_LEN, - "/controls/autoflight/autopilot[%d]/engage", index); - fgUntie(name); - } - fgUntie("/controls/autoflight/autothrottle-arm"); - fgUntie("/controls/autoflight/autothrottle-engage"); - fgUntie("/controls/autoflight/heading-select"); - fgUntie("/controls/autoflight/altitude-select"); - fgUntie("/controls/autoflight/bank-angle-select"); - fgUntie("/controls/autoflight/vertical-speed-select"); - fgUntie("/controls/autoflight/speed-select"); - fgUntie("/controls/autoflight/mach-select"); - fgUntie("/controls/autoflight/vertical-mode"); - fgUntie("/controls/autoflight/lateral-mode"); -} + _tiedProperties.Untie(); +} void @@ -1082,220 +654,220 @@ FGControls::update (double dt) void FGControls::set_aileron (double pos) { - aileron = pos; - CLAMP( &aileron, -1.0, 1.0 ); - - // check for autocoordination - if ( auto_coordination->getBoolValue() ) { - set_rudder( aileron / 2.0 ); - } + aileron = pos; + SG_CLAMP_RANGE( aileron, -1.0, 1.0 ); + + // check for autocoordination + if ( auto_coordination->getBoolValue() ) { + set_rudder( aileron / 2.0 ); + } } void FGControls::move_aileron (double amt) { - aileron += amt; - CLAMP( &aileron, -1.0, 1.0 ); - - // check for autocoordination - if ( auto_coordination->getBoolValue() ) { - set_rudder( aileron / 2.0 ); - } + aileron += amt; + SG_CLAMP_RANGE( aileron, -1.0, 1.0 ); + + // check for autocoordination + if ( auto_coordination->getBoolValue() ) { + set_rudder( aileron / 2.0 ); + } } void FGControls::set_aileron_trim( double pos ) { aileron_trim = pos; - CLAMP( &aileron_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( aileron_trim, -1.0, 1.0 ); } void FGControls::move_aileron_trim( double amt ) { aileron_trim += amt; - CLAMP( &aileron_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( aileron_trim, -1.0, 1.0 ); } void FGControls::set_elevator( double pos ) { elevator = pos; - CLAMP( &elevator, -1.0, 1.0 ); + SG_CLAMP_RANGE( elevator, -1.0, 1.0 ); } void FGControls::move_elevator( double amt ) { elevator += amt; - CLAMP( &elevator, -1.0, 1.0 ); + SG_CLAMP_RANGE( elevator, -1.0, 1.0 ); } void FGControls::set_elevator_trim( double pos ) { elevator_trim = pos; - CLAMP( &elevator_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( elevator_trim, -1.0, 1.0 ); } void FGControls::move_elevator_trim( double amt ) { elevator_trim += amt; - CLAMP( &elevator_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( elevator_trim, -1.0, 1.0 ); } void FGControls::set_rudder( double pos ) { rudder = pos; - CLAMP( &rudder, -1.0, 1.0 ); + SG_CLAMP_RANGE( rudder, -1.0, 1.0 ); } void FGControls::move_rudder( double amt ) { rudder += amt; - CLAMP( &rudder, -1.0, 1.0 ); + SG_CLAMP_RANGE( rudder, -1.0, 1.0 ); } void FGControls::set_rudder_trim( double pos ) { rudder_trim = pos; - CLAMP( &rudder_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( rudder_trim, -1.0, 1.0 ); } void FGControls::move_rudder_trim( double amt ) { rudder_trim += amt; - CLAMP( &rudder_trim, -1.0, 1.0 ); + SG_CLAMP_RANGE( rudder_trim, -1.0, 1.0 ); } void FGControls::set_flaps( double pos ) { flaps = pos; - CLAMP( &flaps, 0.0, 1.0 ); + SG_CLAMP_RANGE( flaps, 0.0, 1.0 ); } void FGControls::move_flaps( double amt ) { flaps += amt; - CLAMP( &flaps, 0.0, 1.0 ); + SG_CLAMP_RANGE( flaps, 0.0, 1.0 ); } void FGControls::set_slats( double pos ) { slats = pos; - CLAMP( &slats, 0.0, 1.0 ); + SG_CLAMP_RANGE( slats, 0.0, 1.0 ); } void FGControls::move_slats( double amt ) { slats += amt; - CLAMP( &slats, 0.0, 1.0 ); + SG_CLAMP_RANGE( slats, 0.0, 1.0 ); } void FGControls::set_BLC( bool val ) { - BLC = val; + BLC = val; } void FGControls::set_spoilers( double pos ) { spoilers = pos; - CLAMP( &spoilers, 0.0, 1.0 ); + SG_CLAMP_RANGE( spoilers, 0.0, 1.0 ); } void FGControls::move_spoilers( double amt ) { spoilers += amt; - CLAMP( &spoilers, 0.0, 1.0 ); + SG_CLAMP_RANGE( spoilers, 0.0, 1.0 ); } void FGControls::set_speedbrake( double pos ) { speedbrake = pos; - CLAMP( &speedbrake, 0.0, 1.0 ); + SG_CLAMP_RANGE( speedbrake, 0.0, 1.0 ); } void FGControls::move_speedbrake( double amt ) { speedbrake += amt; - CLAMP( &speedbrake, 0.0, 1.0 ); + SG_CLAMP_RANGE( speedbrake, 0.0, 1.0 ); } void FGControls::set_wing_sweep( double pos ) { wing_sweep = pos; - CLAMP( &wing_sweep, 0.0, 1.0 ); + SG_CLAMP_RANGE( wing_sweep, 0.0, 1.0 ); } void FGControls::move_wing_sweep( double amt ) { wing_sweep += amt; - CLAMP( &wing_sweep, 0.0, 1.0 ); + SG_CLAMP_RANGE( wing_sweep, 0.0, 1.0 ); } void FGControls::set_wing_fold( bool val ) { - wing_fold = val; + wing_fold = val; } void FGControls::set_drag_chute( bool val ) { - drag_chute = val; + drag_chute = val; } void FGControls::set_throttle_idle( bool val ) { - throttle_idle = val; + throttle_idle = val; } void FGControls::set_throttle( int engine, double pos ) { - if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - throttle[i] = pos; - CLAMP( &throttle[i], 0.0, 1.0 ); + if ( engine == ALL_ENGINES ) { + for ( int i = 0; i < MAX_ENGINES; i++ ) { + throttle[i] = pos; + SG_CLAMP_RANGE( throttle[i], 0.0, 1.0 ); + } + } else { + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + throttle[engine] = pos; + SG_CLAMP_RANGE( throttle[engine], 0.0, 1.0 ); + } } - } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - throttle[engine] = pos; - CLAMP( &throttle[engine], 0.0, 1.0 ); - } - } } void FGControls::move_throttle( int engine, double amt ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - throttle[i] += amt; - CLAMP( &throttle[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + throttle[i] += amt; + SG_CLAMP_RANGE( throttle[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - throttle[engine] += amt; - CLAMP( &throttle[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + throttle[engine] += amt; + SG_CLAMP_RANGE( throttle[engine], 0.0, 1.0 ); + } } } @@ -1303,13 +875,13 @@ void FGControls::set_starter( int engine, bool flag ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - starter[i] = flag; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + starter[i] = flag; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - starter[engine] = flag; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + starter[engine] = flag; + } } } @@ -1317,13 +889,13 @@ void FGControls::set_fuel_pump( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - fuel_pump[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + fuel_pump[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - fuel_pump[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + fuel_pump[engine] = val; + } } } @@ -1331,13 +903,13 @@ void FGControls::set_fire_switch( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - fire_switch[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + fire_switch[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - fire_switch[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + fire_switch[engine] = val; + } } } @@ -1345,13 +917,13 @@ void FGControls::set_fire_bottle_discharge( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - fire_bottle_discharge[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + fire_bottle_discharge[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - fire_bottle_discharge[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + fire_bottle_discharge[engine] = val; + } } } @@ -1359,13 +931,13 @@ void FGControls::set_cutoff( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - cutoff[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + cutoff[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - cutoff[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + cutoff[engine] = val; + } } } @@ -1373,17 +945,17 @@ void FGControls::set_feed_tank( int engine, int tank ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - feed_tank[i] = tank; - CLAMP( &feed_tank[i], -1, 4 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + feed_tank[i] = tank; + SG_CLAMP_RANGE( feed_tank[i], -1, 4 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - feed_tank[engine] = tank; - CLAMP( &feed_tank[engine], -1, 4 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + feed_tank[engine] = tank; + SG_CLAMP_RANGE( feed_tank[engine], -1, 4 ); + } } - // feed_tank[engine] = engine; + // feed_tank[engine] = engine; } @@ -1391,15 +963,15 @@ void FGControls::set_mixture( int engine, double pos ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - mixture[i] = pos; - CLAMP( &mixture[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + mixture[i] = pos; + SG_CLAMP_RANGE( mixture[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - mixture[engine] = pos; - CLAMP( &mixture[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + mixture[engine] = pos; + SG_CLAMP_RANGE( mixture[engine], 0.0, 1.0 ); + } } } @@ -1407,15 +979,15 @@ void FGControls::move_mixture( int engine, double amt ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - mixture[i] += amt; - CLAMP( &mixture[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + mixture[i] += amt; + SG_CLAMP_RANGE( mixture[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - mixture[engine] += amt; - CLAMP( &mixture[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + mixture[engine] += amt; + SG_CLAMP_RANGE( mixture[engine], 0.0, 1.0 ); + } } } @@ -1423,15 +995,15 @@ void FGControls::set_prop_advance( int engine, double pos ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - prop_advance[i] = pos; - CLAMP( &prop_advance[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + prop_advance[i] = pos; + SG_CLAMP_RANGE( prop_advance[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - prop_advance[engine] = pos; - CLAMP( &prop_advance[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + prop_advance[engine] = pos; + SG_CLAMP_RANGE( prop_advance[engine], 0.0, 1.0 ); + } } } @@ -1439,15 +1011,15 @@ void FGControls::move_prop_advance( int engine, double amt ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - prop_advance[i] += amt; - CLAMP( &prop_advance[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + prop_advance[i] += amt; + SG_CLAMP_RANGE( prop_advance[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - prop_advance[engine] += amt; - CLAMP( &prop_advance[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + prop_advance[engine] += amt; + SG_CLAMP_RANGE( prop_advance[engine], 0.0, 1.0 ); + } } } @@ -1455,15 +1027,15 @@ void FGControls::set_magnetos( int engine, int pos ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - magnetos[i] = pos; - CLAMP( &magnetos[i], 0, 3 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + magnetos[i] = pos; + SG_CLAMP_RANGE( magnetos[i], 0, 3 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - magnetos[engine] = pos; - CLAMP( &magnetos[engine], 0, 3 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + magnetos[engine] = pos; + SG_CLAMP_RANGE( magnetos[engine], 0, 3 ); + } } } @@ -1471,15 +1043,15 @@ void FGControls::move_magnetos( int engine, int amt ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - magnetos[i] += amt; - CLAMP( &magnetos[i], 0, 3 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + magnetos[i] += amt; + SG_CLAMP_RANGE( magnetos[i], 0, 3 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - magnetos[engine] += amt; - CLAMP( &magnetos[engine], 0, 3 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + magnetos[engine] += amt; + SG_CLAMP_RANGE( magnetos[engine], 0, 3 ); + } } } @@ -1487,13 +1059,13 @@ void FGControls::set_nitrous_injection( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - nitrous_injection[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + nitrous_injection[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - nitrous_injection[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + nitrous_injection[engine] = val; + } } } @@ -1502,15 +1074,15 @@ void FGControls::set_cowl_flaps_norm( int engine, double pos ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - cowl_flaps_norm[i] = pos; - CLAMP( &cowl_flaps_norm[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + cowl_flaps_norm[i] = pos; + SG_CLAMP_RANGE( cowl_flaps_norm[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - cowl_flaps_norm[engine] = pos; - CLAMP( &cowl_flaps_norm[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + cowl_flaps_norm[engine] = pos; + SG_CLAMP_RANGE( cowl_flaps_norm[engine], 0.0, 1.0 ); + } } } @@ -1518,15 +1090,15 @@ void FGControls::move_cowl_flaps_norm( int engine, double amt ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - cowl_flaps_norm[i] += amt; - CLAMP( &cowl_flaps_norm[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + cowl_flaps_norm[i] += amt; + SG_CLAMP_RANGE( cowl_flaps_norm[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - cowl_flaps_norm[engine] += amt; - CLAMP( &cowl_flaps_norm[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + cowl_flaps_norm[engine] += amt; + SG_CLAMP_RANGE( cowl_flaps_norm[engine], 0.0, 1.0 ); + } } } @@ -1534,13 +1106,13 @@ void FGControls::set_feather( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - feather[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + feather[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - feather[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + feather[engine] = val; + } } } @@ -1548,15 +1120,15 @@ void FGControls::set_ignition( int engine, int pos ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - ignition[i] = pos; - CLAMP( &ignition[i], 0, 3 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + ignition[i] = pos; + SG_CLAMP_RANGE( ignition[i], 0, 3 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - ignition[engine] = pos; - CLAMP( &ignition[engine], 0, 3 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + ignition[engine] = pos; + SG_CLAMP_RANGE( ignition[engine], 0, 3 ); + } } } @@ -1564,13 +1136,13 @@ void FGControls::set_augmentation( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - augmentation[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + augmentation[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - augmentation[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + augmentation[engine] = val; + } } } @@ -1578,13 +1150,13 @@ void FGControls::set_reverser( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - reverser[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + reverser[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - reverser[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + reverser[engine] = val; + } } } @@ -1592,13 +1164,13 @@ void FGControls::set_water_injection( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - water_injection[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + water_injection[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - water_injection[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + water_injection[engine] = val; + } } } @@ -1606,15 +1178,15 @@ void FGControls::set_condition( int engine, double val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - condition[i] = val; - CLAMP( &condition[i], 0.0, 1.0 ); - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + condition[i] = val; + SG_CLAMP_RANGE( condition[i], 0.0, 1.0 ); + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - condition[engine] = val; - CLAMP( &condition[engine], 0.0, 1.0 ); - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + condition[engine] = val; + SG_CLAMP_RANGE( condition[engine], 0.0, 1.0 ); + } } } @@ -1629,13 +1201,13 @@ void FGControls::set_fuel_selector( int tank, bool pos ) { if ( tank == ALL_TANKS ) { - for ( int i = 0; i < MAX_TANKS; i++ ) { - fuel_selector[i] = pos; - } + for ( int i = 0; i < MAX_TANKS; i++ ) { + fuel_selector[i] = pos; + } } else { - if ( (tank >= 0) && (tank < MAX_TANKS) ) { - fuel_selector[tank] = pos; - } + if ( (tank >= 0) && (tank < MAX_TANKS) ) { + fuel_selector[tank] = pos; + } } } @@ -1643,13 +1215,13 @@ void FGControls::set_to_engine( int tank, int engine ) { if ( tank == ALL_TANKS ) { - for ( int i = 0; i < MAX_TANKS; i++ ) { - to_engine[i] = engine; - } + for ( int i = 0; i < MAX_TANKS; i++ ) { + to_engine[i] = engine; + } } else { - if ( (tank >= 0) && (tank < MAX_TANKS) ) { - to_engine[tank] = engine; - } + if ( (tank >= 0) && (tank < MAX_TANKS) ) { + to_engine[tank] = engine; + } } } @@ -1657,13 +1229,13 @@ void FGControls::set_to_tank( int tank, int dest_tank ) { if ( tank == ALL_TANKS ) { - for ( int i = 0; i < MAX_TANKS; i++ ) { - to_tank[i] = dest_tank; - } + for ( int i = 0; i < MAX_TANKS; i++ ) { + to_tank[i] = dest_tank; + } } else { - if ( (tank >= 0) && (tank < MAX_TANKS) ) { - to_tank[tank] = dest_tank; - } + if ( (tank >= 0) && (tank < MAX_TANKS) ) { + to_tank[tank] = dest_tank; + } } } @@ -1671,13 +1243,13 @@ void FGControls::set_boost_pump( int index, bool val ) { if ( index == -1 ) { - for ( int i = 0; i < (MAX_TANKS * MAX_BOOSTPUMPS); i++ ) { - boost_pump[i] = val; - } + for ( int i = 0; i < (MAX_TANKS * MAX_BOOSTPUMPS); i++ ) { + boost_pump[i] = val; + } } else { - if ( (index >= 0) && (index < (MAX_TANKS * MAX_BOOSTPUMPS)) ) { - boost_pump[index] = val; - } + if ( (index >= 0) && (index < (MAX_TANKS * MAX_BOOSTPUMPS)) ) { + boost_pump[index] = val; + } } } @@ -1686,56 +1258,56 @@ void FGControls::set_brake_left( double pos ) { brake_left = pos; - CLAMP(&brake_left, 0.0, 1.0); + SG_CLAMP_RANGE(brake_left, 0.0, 1.0); } void FGControls::move_brake_left( double amt ) { brake_left += amt; - CLAMP( &brake_left, 0.0, 1.0 ); + SG_CLAMP_RANGE( brake_left, 0.0, 1.0 ); } void FGControls::set_brake_right( double pos ) { brake_right = pos; - CLAMP(&brake_right, 0.0, 1.0); + SG_CLAMP_RANGE(brake_right, 0.0, 1.0); } void FGControls::move_brake_right( double amt ) { brake_right += amt; - CLAMP( &brake_right, 0.0, 1.0 ); + SG_CLAMP_RANGE( brake_right, 0.0, 1.0 ); } void FGControls::set_copilot_brake_left( double pos ) { copilot_brake_left = pos; - CLAMP(&brake_left, 0.0, 1.0); + SG_CLAMP_RANGE(brake_left, 0.0, 1.0); } void FGControls::set_copilot_brake_right( double pos ) { copilot_brake_right = pos; - CLAMP(&brake_right, 0.0, 1.0); + SG_CLAMP_RANGE(brake_right, 0.0, 1.0); } void FGControls::set_brake_parking( double pos ) { brake_parking = pos; - CLAMP(&brake_parking, 0.0, 1.0); + SG_CLAMP_RANGE(brake_parking, 0.0, 1.0); } void FGControls::set_steering( double angle ) { steering = angle; - CLAMP(&steering, -80.0, 80.0); + SG_CLAMP_RANGE(steering, -80.0, 80.0); } void @@ -1748,43 +1320,43 @@ void FGControls::move_steering( double angle ) { steering += angle; - CLAMP(&steering, -80.0, 80.0); + SG_CLAMP_RANGE(steering, -80.0, 80.0); } void FGControls::set_gear_down( bool gear ) { - gear_down = gear; + gear_down = gear; } void FGControls::set_antiskid( bool state ) { - antiskid = state; + antiskid = state; } void FGControls::set_tailhook( bool state ) { - tailhook = state; + tailhook = state; } void FGControls::set_launchbar( bool state ) { - launchbar = state; + launchbar = state; } void FGControls::set_catapult_launch_cmd( bool state ) { - catapult_launch_cmd = state; + catapult_launch_cmd = state; } void FGControls::set_tailwheel_lock( bool state ) { - tailwheel_lock = state; + tailwheel_lock = state; } @@ -1792,51 +1364,51 @@ void FGControls::set_alternate_extension( int wheel, bool val ) { if ( wheel == ALL_WHEELS ) { - for ( int i = 0; i < MAX_WHEELS; i++ ) { - alternate_extension[i] = val; - } + for ( int i = 0; i < MAX_WHEELS; i++ ) { + alternate_extension[i] = val; + } } else { - if ( (wheel >= 0) && (wheel < MAX_WHEELS) ) { - alternate_extension[wheel] = val; - } + if ( (wheel >= 0) && (wheel < MAX_WHEELS) ) { + alternate_extension[wheel] = val; + } } } void FGControls::set_wing_heat( bool state ) { - wing_heat = state; + wing_heat = state; } void FGControls::set_pitot_heat( bool state ) { - pitot_heat = state; + pitot_heat = state; } void FGControls::set_wiper( int state ) { - wiper = state; + wiper = state; } void FGControls::set_window_heat( bool state ) { - window_heat = state; + window_heat = state; } void FGControls::set_carb_heat( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - carb_heat[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + carb_heat[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - carb_heat[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + carb_heat[engine] = val; + } } } @@ -1844,13 +1416,13 @@ void FGControls::set_inlet_heat( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - inlet_heat[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + inlet_heat[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - inlet_heat[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + inlet_heat[engine] = val; + } } } @@ -1858,13 +1430,13 @@ void FGControls::set_engine_pump( int system, bool val ) { if ( system == ALL_HYD_SYSTEMS ) { - for ( int i = 0; i < MAX_HYD_SYSTEMS; i++ ) { - engine_pump[i] = val; - } + for ( int i = 0; i < MAX_HYD_SYSTEMS; i++ ) { + engine_pump[i] = val; + } } else { - if ( (system >= 0) && (system < MAX_HYD_SYSTEMS) ) { - engine_pump[system] = val; - } + if ( (system >= 0) && (system < MAX_HYD_SYSTEMS) ) { + engine_pump[system] = val; + } } } @@ -1872,45 +1444,45 @@ void FGControls::set_electric_pump( int system, bool val ) { if ( system == ALL_HYD_SYSTEMS ) { - for ( int i = 0; i < MAX_HYD_SYSTEMS; i++ ) { - electric_pump[i] = val; - } + for ( int i = 0; i < MAX_HYD_SYSTEMS; i++ ) { + electric_pump[i] = val; + } } else { - if ( (system >= 0) && (system < MAX_HYD_SYSTEMS) ) { - electric_pump[system] = val; - } + if ( (system >= 0) && (system < MAX_HYD_SYSTEMS) ) { + electric_pump[system] = val; + } } } void FGControls::set_battery_switch( bool state ) { - battery_switch = state; + battery_switch = state; } void FGControls::set_external_power( bool state ) { - external_power = state; + external_power = state; } void FGControls::set_APU_generator( bool state ) { - APU_generator = state; + APU_generator = state; } void FGControls::set_generator_breaker( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - generator_breaker[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + generator_breaker[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - generator_breaker[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + generator_breaker[engine] = val; + } } } @@ -1918,192 +1490,192 @@ void FGControls::set_bus_tie( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - bus_tie[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + bus_tie[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - bus_tie[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + bus_tie[engine] = val; + } } } void FGControls::set_APU_bleed( bool state ) { - APU_bleed = state; + APU_bleed = state; } void FGControls::set_engine_bleed( int engine, bool val ) { if ( engine == ALL_ENGINES ) { - for ( int i = 0; i < MAX_ENGINES; i++ ) { - engine_bleed[i] = val; - } + for ( int i = 0; i < MAX_ENGINES; i++ ) { + engine_bleed[i] = val; + } } else { - if ( (engine >= 0) && (engine < MAX_ENGINES) ) { - engine_bleed[engine] = val; - } + if ( (engine >= 0) && (engine < MAX_ENGINES) ) { + engine_bleed[engine] = val; + } } } void FGControls::set_mode( int new_mode ) { - mode = new_mode; + mode = new_mode; } void FGControls::set_outflow_valve( double pos ) { - outflow_valve = pos; - CLAMP( &outflow_valve, 0.0, 1.0 ); + outflow_valve = pos; + SG_CLAMP_RANGE( outflow_valve, 0.0, 1.0 ); } void FGControls::move_outflow_valve( double amt ) { - outflow_valve += amt; - CLAMP( &outflow_valve, 0.0, 1.0 ); + outflow_valve += amt; + SG_CLAMP_RANGE( outflow_valve, 0.0, 1.0 ); } void FGControls::set_dump( bool state ) { - dump = state; + dump = state; } void FGControls::set_pack_on( int pack, bool val ) { if ( pack == ALL_PACKS ) { - for ( int i = 0; i < MAX_PACKS; i++ ) { - pack_on[i] = val; - } + for ( int i = 0; i < MAX_PACKS; i++ ) { + pack_on[i] = val; + } } else { - if ( (pack >= 0) && (pack < MAX_PACKS) ) { - pack_on[pack] = val; - } + if ( (pack >= 0) && (pack < MAX_PACKS) ) { + pack_on[pack] = val; + } } } void FGControls::set_landing_lights( bool state ) { - landing_lights = state; + landing_lights = state; } void FGControls::set_turn_off_lights( bool state ) { - turn_off_lights = state; + turn_off_lights = state; } void FGControls::set_taxi_light( bool state ) { - taxi_light = state; + taxi_light = state; } void FGControls::set_logo_lights( bool state ) { - logo_lights = state; + logo_lights = state; } void FGControls::set_nav_lights( bool state ) { - nav_lights = state; + nav_lights = state; } void FGControls::set_beacon( bool state ) { - beacon = state; + beacon = state; } void FGControls::set_strobe( bool state ) { - strobe = state; + strobe = state; } void FGControls::set_panel_norm( double intensity ) { - panel_norm = intensity; - CLAMP( &panel_norm, 0.0, 1.0 ); + panel_norm = intensity; + SG_CLAMP_RANGE( panel_norm, 0.0, 1.0 ); } void FGControls::move_panel_norm( double amt ) { - panel_norm += amt; - CLAMP( &panel_norm, 0.0, 1.0 ); + panel_norm += amt; + SG_CLAMP_RANGE( panel_norm, 0.0, 1.0 ); } void FGControls::set_instruments_norm( double intensity ) { - instruments_norm = intensity; - CLAMP( &instruments_norm, 0.0, 1.0 ); + instruments_norm = intensity; + SG_CLAMP_RANGE( instruments_norm, 0.0, 1.0 ); } void FGControls::move_instruments_norm( double amt ) { - instruments_norm += amt; - CLAMP( &instruments_norm, 0.0, 1.0 ); + instruments_norm += amt; + SG_CLAMP_RANGE( instruments_norm, 0.0, 1.0 ); } void FGControls::set_dome_norm( double intensity ) { - dome_norm = intensity; - CLAMP( &dome_norm, 0.0, 1.0 ); + dome_norm = intensity; + SG_CLAMP_RANGE( dome_norm, 0.0, 1.0 ); } void FGControls::move_dome_norm( double amt ) { - dome_norm += amt; - CLAMP( &dome_norm, 0.0, 1.0 ); + dome_norm += amt; + SG_CLAMP_RANGE( dome_norm, 0.0, 1.0 ); } void FGControls::set_master_arm( bool val ) { - master_arm = val; + master_arm = val; } void FGControls::set_station_select( int station ) { - station_select = station; - CLAMP( &station_select, 0, MAX_STATIONS ); + station_select = station; + SG_CLAMP_RANGE( station_select, 0, MAX_STATIONS ); } void FGControls::set_release_ALL( bool val ) { - release_ALL = val; + release_ALL = val; } void FGControls::set_stick_size( int station, int size ) { if ( station == ALL_STATIONS ) { - for ( int i = 0; i < MAX_STATIONS; i++ ) { - stick_size[i] = size; - CLAMP( &stick_size[i], 1, 20 ); - } + for ( int i = 0; i < MAX_STATIONS; i++ ) { + stick_size[i] = size; + SG_CLAMP_RANGE( stick_size[i], 1, 20 ); + } } else { - if ( (station >= 0) && (station < MAX_STATIONS) ) { - stick_size[station] = size; - CLAMP( &stick_size[station], 1, 20 ); - } + if ( (station >= 0) && (station < MAX_STATIONS) ) { + stick_size[station] = size; + SG_CLAMP_RANGE( stick_size[station], 1, 20 ); + } } } @@ -2111,13 +1683,13 @@ void FGControls::set_release_stick( int station, bool val ) { if ( station == ALL_STATIONS ) { - for ( int i = 0; i < MAX_STATIONS; i++ ) { - release_stick[i] = val; - } + for ( int i = 0; i < MAX_STATIONS; i++ ) { + release_stick[i] = val; + } } else { - if ( (station >= 0) && (station < MAX_STATIONS) ) { - release_stick[station] = val; - } + if ( (station >= 0) && (station < MAX_STATIONS) ) { + release_stick[station] = val; + } } } @@ -2125,13 +1697,13 @@ void FGControls::set_release_all( int station, bool val ) { if ( station == ALL_STATIONS ) { - for ( int i = 0; i < MAX_STATIONS; i++ ) { - release_all[i] = val; - } + for ( int i = 0; i < MAX_STATIONS; i++ ) { + release_all[i] = val; + } } else { - if ( (station >= 0) && (station < MAX_STATIONS) ) { - release_all[station] = val; - } + if ( (station >= 0) && (station < MAX_STATIONS) ) { + release_all[station] = val; + } } } @@ -2139,42 +1711,42 @@ void FGControls::set_jettison_all( int station, bool val ) { if ( station == ALL_STATIONS ) { - for ( int i = 0; i < MAX_STATIONS; i++ ) { - jettison_all[i] = val; - } + for ( int i = 0; i < MAX_STATIONS; i++ ) { + jettison_all[i] = val; + } } else { - if ( (station >= 0) && (station < MAX_STATIONS) ) { - jettison_all[station] = val; - } + if ( (station >= 0) && (station < MAX_STATIONS) ) { + jettison_all[station] = val; + } } } void FGControls::set_vertical_adjust( double pos ) { - vertical_adjust = pos; - CLAMP( &vertical_adjust, -1.0, 1.0 ); + vertical_adjust = pos; + SG_CLAMP_RANGE( vertical_adjust, -1.0, 1.0 ); } void FGControls::move_vertical_adjust( double amt ) { - vertical_adjust += amt; - CLAMP( &vertical_adjust, -1.0, 1.0 ); + vertical_adjust += amt; + SG_CLAMP_RANGE( vertical_adjust, -1.0, 1.0 ); } void FGControls::set_fore_aft_adjust( double pos ) { - fore_aft_adjust = pos; - CLAMP( &fore_aft_adjust, -1.0, 1.0 ); + fore_aft_adjust = pos; + SG_CLAMP_RANGE( fore_aft_adjust, -1.0, 1.0 ); } void FGControls::move_fore_aft_adjust( double amt ) { - fore_aft_adjust += amt; - CLAMP( &fore_aft_adjust, -1.0, 1.0 ); + fore_aft_adjust += amt; + SG_CLAMP_RANGE( fore_aft_adjust, -1.0, 1.0 ); } void @@ -2187,7 +1759,7 @@ FGControls::set_ejection_seat( int which_seat, bool val ) } else { if ( (which_seat >= 0) && (which_seat <= MAX_EJECTION_SEATS) ) { if ( eseat_status[which_seat] == SEAT_SAFED || - eseat_status[which_seat] == SEAT_FAIL ) + eseat_status[which_seat] == SEAT_FAIL ) { // we can never eject if SEAT_SAFED or SEAT_FAIL val = false; @@ -2215,143 +1787,143 @@ FGControls::set_eseat_status( int which_seat, int val ) void FGControls::set_cmd_selector_valve( int val ) { - cmd_selector_valve = val; + cmd_selector_valve = val; } void FGControls::set_off_start_run( int pos ) { - off_start_run = pos; - CLAMP( &off_start_run, 0, 3 ); + off_start_run = pos; + SG_CLAMP_RANGE( off_start_run, 0, 3 ); } void FGControls::set_APU_fire_switch( bool val ) { - APU_fire_switch = val; + APU_fire_switch = val; } void FGControls::set_autothrottle_arm( bool val ) { - autothrottle_arm = val; + autothrottle_arm = val; } void FGControls::set_autothrottle_engage( bool val ) { - autothrottle_engage = val; + autothrottle_engage = val; } void FGControls::set_heading_select( double heading ) { - heading_select = heading; - CLAMP( &heading_select, 0.0, 360.0 ); + heading_select = heading; + SG_CLAMP_RANGE( heading_select, 0.0, 360.0 ); } void FGControls::move_heading_select( double amt ) { - heading_select += amt; - CLAMP( &heading_select, 0.0, 360.0 ); + heading_select += amt; + SG_CLAMP_RANGE( heading_select, 0.0, 360.0 ); } void FGControls::set_altitude_select( double altitude ) { - altitude_select = altitude; - CLAMP( &altitude_select, -1000.0, 100000.0 ); + altitude_select = altitude; + SG_CLAMP_RANGE( altitude_select, -1000.0, 100000.0 ); } void FGControls::move_altitude_select( double amt ) { - altitude_select += amt; - CLAMP( &altitude_select, -1000.0, 100000.0 ); + altitude_select += amt; + SG_CLAMP_RANGE( altitude_select, -1000.0, 100000.0 ); } void FGControls::set_bank_angle_select( double angle ) { - bank_angle_select = angle; - CLAMP( &bank_angle_select, 10.0, 30.0 ); + bank_angle_select = angle; + SG_CLAMP_RANGE( bank_angle_select, 10.0, 30.0 ); } void FGControls::move_bank_angle_select( double amt ) { - bank_angle_select += amt; - CLAMP( &bank_angle_select, 10.0, 30.0 ); + bank_angle_select += amt; + SG_CLAMP_RANGE( bank_angle_select, 10.0, 30.0 ); } void FGControls::set_vertical_speed_select( double speed ) { - vertical_speed_select = speed; - CLAMP( &vertical_speed_select, -3000.0, 4000.0 ); + vertical_speed_select = speed; + SG_CLAMP_RANGE( vertical_speed_select, -3000.0, 4000.0 ); } void FGControls::move_vertical_speed_select( double amt ) { - vertical_speed_select += amt; - CLAMP( &vertical_speed_select, -3000.0, 4000.0 ); + vertical_speed_select += amt; + SG_CLAMP_RANGE( vertical_speed_select, -3000.0, 4000.0 ); } void FGControls::set_speed_select( double speed ) { - speed_select = speed; - CLAMP( &speed_select, 60.0, 400.0 ); + speed_select = speed; + SG_CLAMP_RANGE( speed_select, 60.0, 400.0 ); } void FGControls::move_speed_select( double amt ) { - speed_select += amt; - CLAMP( &speed_select, 60.0, 400.0 ); + speed_select += amt; + SG_CLAMP_RANGE( speed_select, 60.0, 400.0 ); } void FGControls::set_mach_select( double mach ) { - mach_select = mach; - CLAMP( &mach_select, 0.4, 4.0 ); + mach_select = mach; + SG_CLAMP_RANGE( mach_select, 0.4, 4.0 ); } void FGControls::move_mach_select( double amt ) { - mach_select += amt; - CLAMP( &mach_select, 0.4, 4.0 ); + mach_select += amt; + SG_CLAMP_RANGE( mach_select, 0.4, 4.0 ); } void FGControls::set_vertical_mode( int mode ) { - vertical_mode = mode; - CLAMP( &vertical_mode, 0, 4 ); + vertical_mode = mode; + SG_CLAMP_RANGE( vertical_mode, 0, 4 ); } void FGControls::set_lateral_mode( int mode ) { - lateral_mode = mode; - CLAMP( &lateral_mode, 0, 4 ); + lateral_mode = mode; + SG_CLAMP_RANGE( lateral_mode, 0, 4 ); } void FGControls::set_autopilot_engage( int ap, bool val ) { if ( ap == ALL_AUTOPILOTS ) { - for ( int i = 0; i < MAX_AUTOPILOTS; i++ ) { - autopilot_engage[i] = val; - } + for ( int i = 0; i < MAX_AUTOPILOTS; i++ ) { + autopilot_engage[i] = val; + } } else { - if ( (ap >= 0) && (ap < MAX_AUTOPILOTS) ) { - autopilot_engage[ap] = val; - } + if ( (ap >= 0) && (ap < MAX_AUTOPILOTS) ) { + autopilot_engage[ap] = val; + } } } diff --git a/src/Aircraft/controls.hxx b/src/Aircraft/controls.hxx index d9ea286f7..a738bc27f 100644 --- a/src/Aircraft/controls.hxx +++ b/src/Aircraft/controls.hxx @@ -25,6 +25,7 @@ #define _CONTROLS_HXX #include +#include // Define a structure containing the control parameters @@ -34,65 +35,65 @@ class FGControls : public SGSubsystem public: enum { - ALL_ENGINES = -1, - MAX_ENGINES = 12 + ALL_ENGINES = -1, + MAX_ENGINES = 12 }; enum { - ALL_WHEELS = -1, - MAX_WHEELS = 3 + ALL_WHEELS = -1, + MAX_WHEELS = 3 }; enum { - ALL_TANKS = -1, - MAX_TANKS = 8 + ALL_TANKS = -1, + MAX_TANKS = 8 }; enum { - ALL_BOOSTPUMPS = -1, - MAX_BOOSTPUMPS = 2 + ALL_BOOSTPUMPS = -1, + MAX_BOOSTPUMPS = 2 }; enum { - ALL_HYD_SYSTEMS = -1, - MAX_HYD_SYSTEMS = 4 + ALL_HYD_SYSTEMS = -1, + MAX_HYD_SYSTEMS = 4 }; enum { - ALL_PACKS = -1, - MAX_PACKS = 4 + ALL_PACKS = -1, + MAX_PACKS = 4 }; enum { - ALL_LIGHTS = -1, - MAX_LIGHTS = 4 + ALL_LIGHTS = -1, + MAX_LIGHTS = 4 }; enum { - ALL_STATIONS = -1, - MAX_STATIONS = 12 + ALL_STATIONS = -1, + MAX_STATIONS = 12 }; enum { - ALL_AUTOPILOTS = -1, - MAX_AUTOPILOTS = 3 + ALL_AUTOPILOTS = -1, + MAX_AUTOPILOTS = 3 }; enum { - ALL_EJECTION_SEATS = -1, - MAX_EJECTION_SEATS = 10 + ALL_EJECTION_SEATS = -1, + MAX_EJECTION_SEATS = 10 }; enum { - SEAT_SAFED = -1, - SEAT_ARMED = 0, - SEAT_FAIL = 1 + SEAT_SAFED = -1, + SEAT_ARMED = 0, + SEAT_FAIL = 1 }; enum { - CMD_SEL_NORM = -1, - CMD_SEL_AFT = 0, - CMD_SEL_SOLO = 1 + CMD_SEL_NORM = -1, + CMD_SEL_AFT = 0, + CMD_SEL_SOLO = 1 }; private: @@ -252,7 +253,7 @@ private: SGPropertyNode_ptr auto_coordination; - + simgear::TiedPropertyList _tiedProperties; public: FGControls(); @@ -266,7 +267,7 @@ public: // Reset function void reset_all(void); - + // Query functions // controls/flight/ inline double get_aileron() const { return aileron; } @@ -298,7 +299,7 @@ public: inline bool get_cutoff(int engine) const { return cutoff[engine]; } inline double get_mixture(int engine) const { return mixture[engine]; } inline double get_prop_advance(int engine) const { - return prop_advance[engine]; + return prop_advance[engine]; } inline int get_magnetos(int engine) const { return magnetos[engine]; } inline int get_feed_tank(int engine) const { return feed_tank[engine]; }