SGConditions) in the SimGear library are a property-based representation of custom conditions based on comparing property values. They can be evaluated from both C++ and Nasal (see
$FG_ROOT/Nasal/props.nas). Comparison of string-typed properties involves lexicographic ordering, as specified by the C++ operators < and >.
Conditions are supported in
- All bindings, all animations
- State machines
- Various parts of HUDs, 2D panels, PUI/XML dialogs
- Autopilot / PropertyRule systems
… and several other places.
This is a sample expression for checking if the throttle on the first engine is above half:
<condition> <greater-than> <property>/controls/engines/engine/throttle</property> <value type="double">0.5</value> </greater-than> </condition>
Each comparison (like
greater-than-equals) requires either two
<property> elements (the first with index=0 and the second with index=1) or a
<property> (considered first) and
<value> (considered second); booleans compare each of their child conditions. A
<condition> element itself functions as an <and> element; that is, it can have several children, all of which must be true to make the whole condition true.
<and> <or> <not> <!-- acts like logical inverse of <and>, i.e. accepts child conditions --> <equals> <not-equals> <less-than> <greater-than> <less-than-equals> <greater-than-equals> <property> <!-- evaluates boolean value of specified property --> <false/> <!-- static false value (<value> does NOT work in conditions !)--> <true/><!-- static true value -->