Merge branch 'master' of git://gitorious.org/fg/fgdata
This commit is contained in:
commit
08661e4d41
9 changed files with 140 additions and 99 deletions
|
@ -22,14 +22,20 @@ var refresh_immat = func {
|
|||
var immat_dialog = gui.Dialog.new("/sim/gui/dialogs/c172p/status/dialog",
|
||||
"Aircraft/c172p/Dialogs/immat.xml");
|
||||
|
||||
var refresh_immat_listener = nil;
|
||||
|
||||
setlistener("/sim/signals/fdm-initialized", func {
|
||||
if (props.globals.getNode("/sim/model/immat") == nil) {
|
||||
var immat = props.globals.getNode("/sim/model/immat",1);
|
||||
var callsign = props.globals.getNode("/sim/multiplay/callsign").getValue();
|
||||
if (callsign != "callsign") immat.setValue(callsign);
|
||||
else immat.setValue("F-GHYQ");
|
||||
if (callsign != "callsign")
|
||||
immat.setValue(callsign);
|
||||
else
|
||||
immat.setValue("F-GHYQ");
|
||||
}
|
||||
refresh_immat();
|
||||
setlistener("sim/model/immat", refresh_immat, 0);
|
||||
if (refresh_immat_listener == nil)
|
||||
{
|
||||
refresh_immat_listener = setlistener("sim/model/immat", refresh_immat, 0);
|
||||
}
|
||||
},0);
|
||||
|
||||
|
|
|
@ -7,24 +7,22 @@ aircraft.light.new("sim/model/c172p/lighting/strobes", [0.015, 1.985], strobe_sw
|
|||
var beacon_switch = props.globals.getNode("controls/lighting/beacon", 1);
|
||||
aircraft.light.new("sim/model/c172p/lighting/beacon-top", [0.10, 0.90], beacon_switch);
|
||||
|
||||
# Control both panel and instrument light intensity with one property
|
||||
|
||||
# Control both panel and instrument light intensity with one property
|
||||
var instrumentsNorm = props.globals.getNode("controls/lighting/instruments-norm", 1);
|
||||
var instrumentLightFactor = props.globals.getNode("sim/model/material/instruments/factor", 1);
|
||||
var panelLights = props.globals.getNode("controls/lighting/panel-norm", 1);
|
||||
|
||||
var update_intensity = func {
|
||||
|
||||
instrumentLightFactor.setDoubleValue(instrumentsNorm.getValue());
|
||||
panelLights.setDoubleValue(instrumentsNorm.getValue());
|
||||
|
||||
settimer(update_intensity, 0);
|
||||
settimer(update_intensity, 0.1);
|
||||
}
|
||||
|
||||
# Setup listener call to start update loop once the fdm is initialized
|
||||
#
|
||||
setlistener("sim/signals/fdm-initialized", update_intensity);
|
||||
|
||||
# Make sure that update_intensity is called when the sim is reset
|
||||
setlistener("sim/signals/reset", update_intensity);
|
||||
|
||||
# Setup listener call to start update loop once the fdm is initialized,
|
||||
# but only start the update loop _once_.
|
||||
var fdm_init_listener = setlistener("sim/signals/fdm-initialized", func {
|
||||
removelistener(fdm_init_listener);
|
||||
update_intensity();
|
||||
});
|
||||
|
|
|
@ -1,70 +1,60 @@
|
|||
<?xml version="1.0" ?>
|
||||
<!-- $Id$ -->
|
||||
<!-- Saitek X36F + X35T binding.
|
||||
<!-- Saitek X36F + X35T binding.
|
||||
|
||||
Copyright (C) 2005-2007 Anders Gidenstam (anders(at)gidenstam.org)
|
||||
This file is released under the GPL license.
|
||||
Copyright (C) 2005-2012 Anders Gidenstam (anders(at)gidenstam.org)
|
||||
This file is released under the GPL license version 2 or later.
|
||||
-->
|
||||
<!--
|
||||
Remember to tell the joystick driver that it is a full CHF stick:
|
||||
On GNU/Linux this can be done in this way:
|
||||
|
||||
% modprobe analog js=0x7ff,0x7ff
|
||||
Linux 2.4.x kernel:
|
||||
modprobe analog js=0x7ff,0x7ff
|
||||
Linux 2.6.x kernel:
|
||||
modprobe analog map=fullchf
|
||||
|
||||
-->
|
||||
<PropertyList>
|
||||
|
||||
<!-- NOTE: The X36 is a game port device so it may get a generic name. -->
|
||||
<name>Saitek X36</name>
|
||||
<name>Saitek Saitek X36</name>
|
||||
<name>Analog 4-axis 6-button 2-hat CHF joystick</name>
|
||||
<name type="string">Saitek X36</name>
|
||||
<name type="string">Saitek Saitek X36</name>
|
||||
<name type="string">Analog 4-axis 6-button 2-hat CHF joystick</name>
|
||||
|
||||
<data>
|
||||
<view-mode type="int">0</view-mode>
|
||||
<old-heading-offset type="double">0</old-heading-offset>
|
||||
<old-pitch-offset type="double">0</old-pitch-offset>
|
||||
<old-field-of-view type="double">0</old-field-of-view>
|
||||
<quick-view-active type="int">0</quick-view-active>
|
||||
<stick-active type="int">1</stick-active>
|
||||
</data>
|
||||
|
||||
<nasal>
|
||||
<script>
|
||||
<![CDATA[
|
||||
self = cmdarg().getParent();
|
||||
data = self.getNode("data");
|
||||
view_mode = data.getNode("view-mode");
|
||||
old_heading_offset = data.getNode("old-heading-offset");
|
||||
old_pitch_offset = data.getNode("old-pitch-offset");
|
||||
old_field_of_view = data.getNode("old-field-of-view");
|
||||
quick_view_active = data.getNode("quick-view-active");
|
||||
var self = cmdarg().getParent();
|
||||
var data = self.getNode("data");
|
||||
var view_mode = data.getNode("view-mode");
|
||||
var quick_view_active = data.getNode("quick-view-active");
|
||||
var stick_active = data.getNode("stick-active");
|
||||
var old_view = view.point.save();
|
||||
|
||||
heading_offset =
|
||||
props.globals.getNode("/sim/current-view/heading-offset-deg", 1);
|
||||
pitch_offset =
|
||||
props.globals.getNode("/sim/current-view/pitch-offset-deg", 1);
|
||||
goal_heading_offset =
|
||||
var goal_heading_offset =
|
||||
props.globals.getNode("/sim/current-view/goal-heading-offset-deg", 1);
|
||||
goal_pitch_offset =
|
||||
var goal_pitch_offset =
|
||||
props.globals.getNode("/sim/current-view/goal-pitch-offset-deg", 1);
|
||||
|
||||
kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
|
||||
kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
|
||||
kbdalt = props.globals.getNode("/devices/status/keyboard/alt", 1);
|
||||
var kbdshift = props.globals.getNode("/devices/status/keyboard/shift", 1);
|
||||
var kbdctrl = props.globals.getNode("/devices/status/keyboard/ctrl", 1);
|
||||
var kbdalt = props.globals.getNode("/devices/status/keyboard/alt", 1);
|
||||
|
||||
quick_view = func {
|
||||
dir = arg[0];
|
||||
var quick_view = func {
|
||||
var dir = arg[0];
|
||||
if (dir == 0) {
|
||||
quick_view_active.setIntValue(0);
|
||||
goal_heading_offset.setDoubleValue
|
||||
(old_heading_offset.getValue());
|
||||
goal_pitch_offset.setDoubleValue(old_pitch_offset.getValue());
|
||||
view.fovProp.setDoubleValue(old_field_of_view.getValue());
|
||||
view.point.move(old_view, 0.1);
|
||||
} else {
|
||||
if (quick_view_active.getValue() == 0) {
|
||||
quick_view_active.setIntValue(1);
|
||||
old_heading_offset.setDoubleValue(heading_offset.getValue());
|
||||
old_pitch_offset.setDoubleValue(pitch_offset.getValue());
|
||||
old_field_of_view.setDoubleValue(view.fovProp.getValue());
|
||||
old_view = view.point.save();
|
||||
|
||||
if (dir == 1) {
|
||||
goal_heading_offset.setDoubleValue
|
||||
|
@ -97,7 +87,25 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var aileron = props.globals.getNode("/controls/flight/aileron", 1);
|
||||
var elevator = props.globals.getNode("/controls/flight/elevator", 1);
|
||||
var rudder = props.globals.getNode("/controls/flight/rudder", 1);
|
||||
var aileron_js = props.globals.getNode("/controls/flight/aileron-js", 1);
|
||||
var elevator_js = props.globals.getNode("/controls/flight/elevator-js", 1);
|
||||
var rudder_js = props.globals.getNode("/controls/flight/rudder-js", 1);
|
||||
|
||||
var js_active = func {
|
||||
settimer(js_active, 0);
|
||||
if (stick_active.getValue()) {
|
||||
aileron.setDoubleValue(aileron_js.getValue());
|
||||
elevator.setDoubleValue(elevator_js.getValue());
|
||||
rudder.setDoubleValue(rudder_js.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
setlistener("/sim/signals/fdm-initialized", js_active);
|
||||
]]>
|
||||
</script>
|
||||
</nasal>
|
||||
|
@ -107,7 +115,7 @@
|
|||
<desc>aileron</desc>
|
||||
<binding>
|
||||
<command>property-scale</command>
|
||||
<property>/controls/flight/aileron</property>
|
||||
<property>/controls/flight/aileron-js</property>
|
||||
<dead-band type="double">0.0</dead-band>
|
||||
<offset type="double">0.0</offset>
|
||||
<squared type="bool">true</squared>
|
||||
|
@ -119,7 +127,7 @@
|
|||
<desc>elevator</desc>
|
||||
<binding>
|
||||
<command>property-scale</command>
|
||||
<property>/controls/flight/elevator</property>
|
||||
<property>/controls/flight/elevator-js</property>
|
||||
<dead-band type="double">0.0</dead-band>
|
||||
<offset type="double">0.0</offset>
|
||||
<factor type="double">-1.0</factor>
|
||||
|
@ -128,17 +136,15 @@
|
|||
</axis>
|
||||
|
||||
<!-- Analog axis 3. Rudder -->
|
||||
<!-- NOTE: This axis is tweaked due to faulty hardware.
|
||||
The standard case should be offset=0, factor=1.
|
||||
-->
|
||||
<axis n="3">
|
||||
<desc>rudder</desc>
|
||||
<binding>
|
||||
<command>property-scale</command>
|
||||
<property>/controls/flight/rudder</property>
|
||||
<dead-band type="double">0.030</dead-band>
|
||||
<offset type="double">0.1</offset>
|
||||
<factor type="double">0.9</factor>
|
||||
<property>/controls/flight/rudder-js</property>
|
||||
<dead-band type="double">0.010</dead-band>
|
||||
<offset type="double">0.0</offset>
|
||||
<factor type="double">1.0</factor>
|
||||
<squared type="bool">true</squared>
|
||||
</binding>
|
||||
</axis>
|
||||
|
||||
|
@ -164,7 +170,7 @@
|
|||
<script>
|
||||
<![CDATA[
|
||||
#print("X36.xml: Axis 4, Hat 1: low!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 0) {
|
||||
view.panViewDir(0.5);
|
||||
} if (m == 1) {
|
||||
|
@ -178,7 +184,7 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Axis 4, Hat 1: low released!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 1) {
|
||||
quick_view(0);
|
||||
}
|
||||
|
@ -193,7 +199,7 @@
|
|||
<script>
|
||||
<![CDATA[
|
||||
#print("X36.xml: Axis 4, Hat 1: high!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 0) {
|
||||
view.panViewDir(-0.5);
|
||||
} if (m == 1) {
|
||||
|
@ -207,7 +213,7 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Axis 4, Hat 1: low released!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 1) {
|
||||
quick_view(0);
|
||||
}
|
||||
|
@ -230,7 +236,7 @@
|
|||
<script>
|
||||
<![CDATA[
|
||||
#print("X36.xml: Axis 5, Hat 1: low!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 0) {
|
||||
view.panViewPitch(0.5);
|
||||
} if (m == 1) {
|
||||
|
@ -244,7 +250,7 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Axis 4, Hat 1: low released!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 1) {
|
||||
quick_view(0);
|
||||
}
|
||||
|
@ -259,7 +265,7 @@
|
|||
<script>
|
||||
<![CDATA[
|
||||
#print("X36.xml: Axis 5, Hat 1: low!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 0) {
|
||||
view.panViewPitch(-0.5);
|
||||
} if (m == 1) {
|
||||
|
@ -274,7 +280,7 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Axis 4, Hat 1: low released!");
|
||||
m = view_mode.getValue();
|
||||
var m = view_mode.getValue();
|
||||
if (m == 1) {
|
||||
#quick_view(0);
|
||||
}
|
||||
|
@ -290,7 +296,6 @@
|
|||
Left - Right := Axis 6.high - Axis 7.low
|
||||
-->
|
||||
<axis n="6">
|
||||
<name>Left hat up/down</name>
|
||||
<desc>elevator trim (hat up/down)</desc>
|
||||
<low>
|
||||
<repeatable type="bool">true</repeatable>
|
||||
|
@ -316,7 +321,6 @@
|
|||
|
||||
<!-- Axis 7. Hat 2. -->
|
||||
<axis n="7">
|
||||
<name>Left hat left/right</name>
|
||||
<desc>Zoom out/in (hat left/right)</desc>
|
||||
<low>
|
||||
<repeatable type="bool">true</repeatable>
|
||||
|
@ -343,23 +347,28 @@
|
|||
<!-- Button: Trigger -->
|
||||
<button n="0">
|
||||
<name>Trigger</name>
|
||||
<desc>brakes, +Shift: Toggle parking brake</desc>
|
||||
<desc>brakes, +Shift: Toggle parking brake, +Ctrl: trigger</desc>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Button 0 pressed!");
|
||||
if (kbdshift.getBoolValue()) {
|
||||
controls.applyParkingBrake(1);
|
||||
} else {
|
||||
controls.applyBrakes(1);
|
||||
}
|
||||
#print("X36.xml: Button 0 pressed!");
|
||||
if (kbdctrl.getBoolValue()) {
|
||||
controls.trigger(1);
|
||||
} else {
|
||||
if (kbdshift.getBoolValue()) {
|
||||
controls.applyParkingBrake(1);
|
||||
} else {
|
||||
controls.applyBrakes(1);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
controls.applyBrakes(0);
|
||||
controls.applyBrakes(0);
|
||||
controls.trigger(0);
|
||||
</script>
|
||||
</binding>
|
||||
</mod-up>
|
||||
|
@ -368,13 +377,25 @@
|
|||
<!-- Button: Fire C -->
|
||||
<button n="1">
|
||||
<name>Fire C</name>
|
||||
<desc>cycle views</desc>
|
||||
<desc>next view +Shift: previous view +Ctrl: next weapon +Ctrl+Shift: previous weapon</desc>
|
||||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Button 1 pressed!");
|
||||
view.stepView(1)
|
||||
if (kbdctrl.getBoolValue()) {
|
||||
if (kbdshift.getBoolValue()) {
|
||||
controls.weaponSelect(-1);
|
||||
} else {
|
||||
controls.weaponSelect(1);
|
||||
}
|
||||
} else {
|
||||
if (kbdshift.getBoolValue()) {
|
||||
view.stepView(-1)
|
||||
} else {
|
||||
view.stepView(1)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
@ -436,6 +457,13 @@
|
|||
}
|
||||
</script>
|
||||
</binding>
|
||||
<mod-up>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>
|
||||
</script>
|
||||
</binding>
|
||||
</mod-up>
|
||||
</button>
|
||||
|
||||
<!-- Button: F.lock -->
|
||||
|
@ -446,23 +474,17 @@
|
|||
<command>nasal</command>
|
||||
<script>
|
||||
#print("X36.xml: Button 5 pressed!");
|
||||
var p = "/controls/flight/speedbrake";
|
||||
var sb = "/controls/flight/speedbrake";
|
||||
if (kbdshift.getBoolValue()) {
|
||||
setprop(p, 1.0);
|
||||
setprop(sb, 1.0);
|
||||
} else {
|
||||
setprop(p, 0.0);
|
||||
setprop(sb, 0.0);
|
||||
}
|
||||
if (kbdalt.getBoolValue()) {
|
||||
stick_active.setIntValue(!stick_active.getValue());
|
||||
}
|
||||
</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
</PropertyList>
|
||||
<!--
|
||||
* Overrides tab width for this buffer in Emacs so the tab width is reasonable.
|
||||
* This must remain at the end of the file.
|
||||
* ===========================================================================
|
||||
* Local variables:
|
||||
* tab-width: 1
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
-->
|
||||
|
|
|
@ -177,12 +177,12 @@ var setAllMCBF = func(mcbf) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
# Initialization, called once Nasal and the FDM are loaded properly.
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized-once", func {
|
||||
removelistener(fdm_init_listener); # uninstall, so we're only called once
|
||||
srand();
|
||||
|
||||
# Engines are added dynamically because there may be an arbritary number
|
||||
# Engines are added dynamically because there may be an arbitrary number
|
||||
var i = 1;
|
||||
foreach (var e; props.globals.getNode("/engines").getChildren("engine")) {
|
||||
breakHash[e.getPath()] = { type: type.MTBF, failure: fail.ENGINE, desc : "Engine " ~ i };
|
||||
|
|
|
@ -68,8 +68,14 @@ var tanks = [];
|
|||
var engines = [];
|
||||
var fuel_freeze = nil;
|
||||
|
||||
var freeze_fuel_listener = nil;
|
||||
var initialized = 0;
|
||||
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
setlistener("/sim/freeze/fuel", func(n) { fuel_freeze = n.getBoolValue() }, 1);
|
||||
if (freeze_fuel_listener == nil)
|
||||
{
|
||||
freeze_fuel_listener = setlistener("/sim/freeze/fuel", func(n) { fuel_freeze = n.getBoolValue() }, 1);
|
||||
}
|
||||
|
||||
# Fuel sub-system is only used by YASim. Other FDMs (e.g. JSBSim)
|
||||
# handle fuel themselves.
|
||||
|
@ -81,6 +87,11 @@ _setlistener("/sim/signals/fdm-initialized", func {
|
|||
e.getNode("out-of-fuel", 1).setBoolValue(0);
|
||||
}
|
||||
|
||||
# do the following stuff once only
|
||||
if (initialized)
|
||||
return;
|
||||
initialized = 1;
|
||||
|
||||
foreach (var t; props.globals.getNode("/consumables/fuel", 1).getChildren("tank")) {
|
||||
if (!t.getAttribute("children"))
|
||||
continue; # skip native_fdm.cxx generated zombie tanks
|
||||
|
|
|
@ -87,7 +87,8 @@ var loop = func(id) {
|
|||
|
||||
var loopid = 0;
|
||||
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", func {
|
||||
removelistener(fdm_init_listener); # uninstall, so we're only called once
|
||||
# remove top bar unless otherwise specified
|
||||
var top = props.globals.initNode("/sim/model/geometry/square/top", 1, "BOOL");
|
||||
|
||||
|
|
|
@ -114,8 +114,9 @@ var check_params = func() {
|
|||
}
|
||||
}
|
||||
|
||||
_setlistener("/sim/signals/fdm-initialized",
|
||||
var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized",
|
||||
func {
|
||||
removelistener(fdm_init_listener); # uninstall, so we're only called once
|
||||
fdm = getprop("/sim/flight-model");
|
||||
running_redout = getprop("/sim/rendering/redout/enabled");
|
||||
running_compression = getprop("/sim/rendering/headshake/enabled");
|
||||
|
|
|
@ -435,7 +435,8 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
|||
# --prop:display=position/ ... adds all properties under /position/ (ends with slash!)
|
||||
# --prop:display=position/,orientation/ ... separate multiple properties with comma
|
||||
#
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", func {
|
||||
removelistener(fdm_init_listener); # uninstall, so we're only called once
|
||||
foreach (var n; props.globals.getChildren("display")) {
|
||||
foreach (var p; split(",", n.getValue())) {
|
||||
if (!size(p))
|
||||
|
|
|
@ -655,7 +655,8 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
|||
});
|
||||
|
||||
|
||||
_setlistener("/sim/signals/fdm-initialized", func {
|
||||
var fdm_init_listener = _setlistener("/sim/signals/fdm-initialized", func {
|
||||
removelistener(fdm_init_listener); # uninstall, so we're only called once
|
||||
var zoffset = nil;
|
||||
foreach (var v; views) {
|
||||
var index = v.getIndex();
|
||||
|
|
Loading…
Add table
Reference in a new issue