Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 1327 #1328

Merged
merged 18 commits into from
Oct 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,028 changes: 514 additions & 514 deletions Models/c172p.ac

Large diffs are not rendered by default.

153 changes: 113 additions & 40 deletions Models/c172p.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6070,6 +6070,20 @@
</condition>
</animation>

<!-- Fuel selector face 43/68-->
<animation>
<type>textranslate</type>
<object-name>FuelSelectorFace</object-name>
<property>/fdm/jsbsim/fuel/tank</property>
<bias>0.00</bias>
<factor>.5</factor>
<step>1</step>
<axis>
<x>1</x>
<y>0</y>
</axis>
</animation>

<!-- Fuel Selector -->
<animation>
<type>select</type>
Expand All @@ -6082,41 +6096,69 @@
<not>
<property>consumables/fuel/tank[1]/selected</property>
</not>
<not>
<property>consumables/fuel/tank[2]/selected</property>
</not>
<not>
<property>consumables/fuel/tank[3]/selected</property>
</not>
</and>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FuelSelectorLeft</object-name>
<condition>
<and>
<property>consumables/fuel/tank[0]/selected</property>
<not>
<property>consumables/fuel/tank[1]/selected</property>
</not>
</and>
<or>
<and>
<property>consumables/fuel/tank[0]/selected</property>
<not>
<property>consumables/fuel/tank[1]/selected</property>
</not>
</and>
<and>
<property>consumables/fuel/tank[2]/selected</property>
<not>
<property>consumables/fuel/tank[3]/selected</property>
</not>
</and>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FuelSelectorRight</object-name>
<condition>
<and>
<not>
<property>consumables/fuel/tank[0]/selected</property>
</not>
<property>consumables/fuel/tank[1]/selected</property>
</and>
<or>
<and>
<not>
<property>consumables/fuel/tank[0]/selected</property>
</not>
<property>consumables/fuel/tank[1]/selected</property>
</and>
<and>
<not>
<property>consumables/fuel/tank[2]/selected</property>
</not>
<property>consumables/fuel/tank[3]/selected</property>
</and>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>FuelSelectorBoth</object-name>
<condition>
<and>
<property>consumables/fuel/tank[0]/selected</property>
<property>consumables/fuel/tank[1]/selected</property>
</and>
<or>
<and>
<property>consumables/fuel/tank[0]/selected</property>
<property>consumables/fuel/tank[1]/selected</property>
</and>
<and>
<property>consumables/fuel/tank[2]/selected</property>
<property>consumables/fuel/tank[3]/selected</property>
</and>
</or>
</condition>
</animation>
<animation>
Expand All @@ -6136,6 +6178,16 @@
<property>consumables/fuel/tank[1]/selected</property>
<value>false</value>
</binding>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[2]/selected</property>
<value>false</value>
</binding>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[3]/selected</property>
<value>false</value>
</binding>
</action>
</animation>
<animation>
Expand All @@ -6146,14 +6198,21 @@
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[0]/selected</property>
<value>true</value>
</binding>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[1]/selected</property>
<value>false</value>
<command>nasal</command>
<script>
var integral_tanks = getprop("/fdm/jsbsim/fuel/tank");
if (integral_tanks) {
setprop("/consumables/fuel/tank[2]/selected", 1);
setprop("/consumables/fuel/tank[3]/selected", 0);
setprop("/consumables/fuel/tank[0]/selected", 0);
setprop("/consumables/fuel/tank[1]/selected", 0);
} else {
setprop("/consumables/fuel/tank[0]/selected", 1);
setprop("/consumables/fuel/tank[1]/selected", 0);
setprop("/consumables/fuel/tank[2]/selected", 0);
setprop("/consumables/fuel/tank[3]/selected", 0);
}
</script>
</binding>
</action>
</animation>
Expand All @@ -6165,14 +6224,21 @@
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[0]/selected</property>
<value>false</value>
</binding>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[1]/selected</property>
<value>true</value>
<command>nasal</command>
<script>
var integral_tanks = getprop("/fdm/jsbsim/fuel/tank");
if (integral_tanks) {
setprop("/consumables/fuel/tank[2]/selected", 0);
setprop("/consumables/fuel/tank[3]/selected", 1);
setprop("/consumables/fuel/tank[0]/selected", 0);
setprop("/consumables/fuel/tank[1]/selected", 0);
} else {
setprop("/consumables/fuel/tank[0]/selected", 0);
setprop("/consumables/fuel/tank[1]/selected", 1);
setprop("/consumables/fuel/tank[2]/selected", 0);
setprop("/consumables/fuel/tank[3]/selected", 0);
}
</script>
</binding>
</action>
</animation>
Expand All @@ -6184,14 +6250,21 @@
<button>0</button>
<repeatable>false</repeatable>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[0]/selected</property>
<value>true</value>
</binding>
<binding>
<command>property-assign</command>
<property>consumables/fuel/tank[1]/selected</property>
<value>true</value>
<command>nasal</command>
<script>
var integral_tanks = getprop("/fdm/jsbsim/fuel/tank");
if (integral_tanks) {
setprop("/consumables/fuel/tank[2]/selected", 1);
setprop("/consumables/fuel/tank[3]/selected", 1);
setprop("/consumables/fuel/tank[0]/selected", 0);
setprop("/consumables/fuel/tank[1]/selected", 0);
} else {
setprop("/consumables/fuel/tank[0]/selected", 1);
setprop("/consumables/fuel/tank[1]/selected", 1);
setprop("/consumables/fuel/tank[2]/selected", 0);
setprop("/consumables/fuel/tank[3]/selected", 0);
}
</script>
</binding>
</action>
</animation>
Expand Down
Binary file modified Models/fuel-selector.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions Nasal/avionics.nas
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ aircraft.data.add(
"/controls/anti-ice/pitot-heat",
"/consumables/fuel/tank/selected",
"/consumables/fuel/tank[1]/selected",
"/consumables/fuel/tank[2]/selected",
"/consumables/fuel/tank[3]/selected",
"/sim/model/c172p/brake-parking",
"/controls/flight/flaps",
"/controls/flight/elevator-trim",
Expand Down
87 changes: 55 additions & 32 deletions Nasal/c172p.nas
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ var autostart = func (msg=1) {
# Reset battery charge and circuit breakers
electrical.reset_battery_and_circuit_breakers();

# Filling fuel tanks
setprop("/consumables/fuel/tank[0]/selected", 1);
setprop("/consumables/fuel/tank[1]/selected", 1);

# Setting levers and switches for startup
setprop("/controls/switches/magnetos", 3);
setprop("/controls/engines/current-engine/throttle", 0.2);
Expand Down Expand Up @@ -75,12 +71,6 @@ var autostart = func (msg=1) {
setprop("/sim/model/c172p/securing/tiedownR-visible", 0);
setprop("/sim/model/c172p/securing/tiedownT-visible", 0);

# Removing any contamination from water
setprop("/consumables/fuel/tank[0]/water-contamination", 0.0);
setprop("/consumables/fuel/tank[1]/water-contamination", 0.0);
setprop("/consumables/fuel/tank[0]/sample-water-contamination", 0.0);
setprop("/consumables/fuel/tank[1]/sample-water-contamination", 0.0);

# Setting max oil level
var oil_enabled = getprop("/engines/active-engine/oil_consumption_allowed");
var oil_level = getprop("/engines/active-engine/oil-level");
Expand All @@ -99,14 +89,14 @@ var autostart = func (msg=1) {
setprop("/engines/active-engine/carb_icing_rate", 0.0);
setprop("/engines/active-engine/volumetric-efficiency-factor", 0.85);

# Checking for minimal fuel level
var fuel_level_left = getprop("/consumables/fuel/tank[0]/level-norm");
var fuel_level_right = getprop("/consumables/fuel/tank[1]/level-norm");
# Removing any contamination from water
setprop("/consumables/fuel/tank[0]/water-contamination", 0.0);
setprop("/consumables/fuel/tank[1]/water-contamination", 0.0);
setprop("/consumables/fuel/tank[0]/sample-water-contamination", 0.0);
setprop("/consumables/fuel/tank[1]/sample-water-contamination", 0.0);

if (fuel_level_left < 0.25)
setprop("/consumables/fuel/tank[0]/level-norm", 0.25);
if (fuel_level_right < 0.25)
setprop("/consumables/fuel/tank[1]/level-norm", 0.25);
# set fuel configuration
set_fuel();

setprop("/controls/engines/engine[0]/primer-lever", 0);
setprop("/controls/engines/engine/primer", 3);
Expand Down Expand Up @@ -150,13 +140,44 @@ controls.applyParkingBrake = func (v) {
};

##########################################
# Fuel Save State
# Set Fuel Configuration
##########################################
var fuel_save_state = func {
if (!getprop("/consumables/fuel/save-fuel-state")) {
setprop("/consumables/fuel/tank[0]/level-gal_us", 20);
setprop("/consumables/fuel/tank[1]/level-gal_us", 20);
};
var set_fuel = func {
# Checking for minimal fuel level
var fuel_level_left_default = getprop("/consumables/fuel/tank[0]/level-norm");
var fuel_level_right_default = getprop("/consumables/fuel/tank[1]/level-norm");
var fuel_level_left_integral = getprop("/consumables/fuel/tank[2]/level-norm");
var fuel_level_right_integral = getprop("/consumables/fuel/tank[3]/level-norm");
# Check which tanks are being used
var integral_tanks = getprop("/fdm/jsbsim/fuel/tank");
if (integral_tanks) {
if (fuel_level_left_integral < 0.25)
setprop("/consumables/fuel/tank[2]/level-norm", 0.25);
if (fuel_level_right_integral < 0.25)
setprop("/consumables/fuel/tank[3]/level-norm", 0.25);
setprop("/consumables/fuel/tank[2]/selected", 1);
setprop("/consumables/fuel/tank[3]/selected", 1);
setprop("/consumables/fuel/tank[0]/selected", 0);
setprop("/consumables/fuel/tank[1]/selected", 0);
} else {
if (fuel_level_left_default < 0.25)
setprop("/consumables/fuel/tank[0]/level-norm", 0.25);
if (fuel_level_right_default < 0.25)
setprop("/consumables/fuel/tank[1]/level-norm", 0.25);
setprop("/consumables/fuel/tank[0]/selected", 1);
setprop("/consumables/fuel/tank[1]/selected", 1);
setprop("/consumables/fuel/tank[2]/selected", 0);
setprop("/consumables/fuel/tank[3]/selected", 0);
}
setprop("sim/model/open-pfuel-cap", 0);
setprop("sim/model/open-sfuel-cap", 0);
setprop("sim/model/open-pfuel-sump", 0);
setprop("sim/model/open-sfuel-sump", 0);
fgcommand("dialog-close", props.Node.new({"dialog-name": "c172p-left-fuel-dialog"}));
fgcommand("dialog-close", props.Node.new({"dialog-name": "c172p-right-fuel-dialog"}));
fgcommand("dialog-close", props.Node.new({"dialog-name": "c172p-fuel-both-tanks-dialog"}));
fgcommand("dialog-close", props.Node.new({"dialog-name": "c172p-left-fuel-sample-dialog"}));
fgcommand("dialog-close", props.Node.new({"dialog-name": "c172p-right-fuel-sample-dialog"}));
};

##########################################
Expand Down Expand Up @@ -316,8 +337,10 @@ var switches_save_state = func {
setprop("/controls/anti-ice/pitot-heat", 0);
setprop("/environment/aircraft-effects/cabin-heat-set", 0.0);
setprop("/environment/aircraft-effects/cabin-air-set", 0.0);
setprop("/consumables/fuel/tank[0]/selected", 1);
setprop("/consumables/fuel/tank[1]/selected", 1);
setprop("/consumables/fuel/tank[0]/level-norm", 0.0);
setprop("/consumables/fuel/tank[1]/level-norm", 0.0);
setprop("/consumables/fuel/tank[2]/level-norm", 0.0);
setprop("/consumables/fuel/tank[3]/level-norm", 0.0);
if (getprop("/sim/model/c172p/ruddertrim-visible"))
setprop("/controls/flight/rudder-trim", 0);
};
Expand Down Expand Up @@ -423,6 +446,8 @@ var reset_system = func {
props.globals.getNode("/fdm/jsbsim/pontoon-damage/right-pontoon", 0).setIntValue(0);

setprop("/engines/active-engine/kill-engine", 0);

set_fuel();
}

############################################
Expand Down Expand Up @@ -653,9 +678,6 @@ setlistener("/sim/signals/fdm-initialized", func {
}
}, 0, 0);

# Checking if fuel tanks should be refilled (in case save state is off)
fuel_save_state();

# Checking if switches should be moved back to default position (in case save state is off)
switches_save_state();

Expand All @@ -665,10 +687,6 @@ setlistener("/sim/signals/fdm-initialized", func {
# Listening for lightning strikes
setlistener("/environment/lightning/lightning-pos-y", thunder);

if (!getprop("sim/model/c172p/ruddertrim-visible")){
setprop("/controls/flight/rudder-trim", 0.02);
}

reset_system();

var onground = getprop("/sim/presets/onground") or "";
Expand Down Expand Up @@ -751,3 +769,8 @@ setlistener("/sim/model/c172p/ruddertrim-visible", func (node) {
setprop("/controls/flight/rudder-trim", 0.02);
}, 0, 0);

#fuel tank configuration switch
setlistener("/fdm/jsbsim/fuel/tank", func (node) {
# Set fuel configuration
set_fuel();
}, 0, 0);
9 changes: 7 additions & 2 deletions Nasal/engine.nas
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,13 @@ var coughing_timer = maketimer(1, engine_coughing);
# ========== Main loop ======================

var update = func {
var leftTankUsable = getprop("/consumables/fuel/tank[0]/selected") and getprop("/consumables/fuel/tank[0]/level-gal_us") > 0;
var rightTankUsable = getprop("/consumables/fuel/tank[1]/selected") and getprop("/consumables/fuel/tank[1]/level-gal_us") > 0;
#this block should be moved out of nasal and into jsbsim or autopilot logic
var leftTankUsable = 0;
var rightTankUsable = 0;
if (getprop("/consumables/fuel/tank[0]/selected") and getprop("/consumables/fuel/tank[0]/level-gal_us") > 0) leftTankUsable = 1;
if (getprop("/consumables/fuel/tank[1]/selected") and getprop("/consumables/fuel/tank[1]/level-gal_us") > 0) rightTankUsable = 1;
if (getprop("/consumables/fuel/tank[2]/selected") and getprop("/consumables/fuel/tank[2]/level-gal_us") > 0) leftTankUsable = 1;
if (getprop("/consumables/fuel/tank[3]/selected") and getprop("/consumables/fuel/tank[3]/level-gal_us") > 0) rightTankUsable = 1;
var outOfFuel = !(leftTankUsable or rightTankUsable);

# We use the mixture to control the engines, so set the mixture
Expand Down
Loading