1
0
Fork 0
fgdata/Models/Airport/Jetway/jetway-movable.xml
Edward d'Auvergne edb2c980ac File restoration for the FGData and FGAddon dependencies to $FG_ROOT/Models/*.
This follows from the thread:
http://thread.gmane.org/gmane.games.flightgear.devel/81852/focus=81859

All the $FG_ROOT/Models/* files found using a grep command in both FGData and
FGAddon and now missing in FGData were restored to their state at commit f739a7,
the commit prior to the purging of the Models directories.  The command used
was:

grep -rI "Models/3ds\|Models/Agriculture\|Models/StreetFurniture\|Models/Structures\|Models/Sport\|Models/Power\|Models/Misc\|Models/Aircraft\|Models/Airport\|Models/Boundaries\|Models/Communications\|Models/Fauna\|Models/Military\|Models/Transport\|Models/Trees\|Models/Industrial\|Models/Residential"
2016-05-09 15:47:14 +02:00

323 lines
10 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<PropertyList>
<path>jetway-movable.ac</path>
<animation>
<type>pick</type>
<object-name>Rotunda1</object-name>
<object-name>Tunnel1Rotunda</object-name>
<object-name>Tunnel1</object-name>
<object-name>Tunnel2</object-name>
<object-name>Tunnel3</object-name>
<object-name>Rotunda2</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<action>
<button>0</button>
<repeatable type="bool">false</repeatable>
<binding>
<command>nasal</command>
<!-- Nasal pick code -->
<script><![CDATA[
if (props.globals.getNode("/scenery/airport/jetway[0]/extended") == nil)
{
props.globals.initNode("/scenery/airport/jetway[0]/extended", 0, "BOOL");
setprop("/scenery/airport/jetway[0]/position-norm", 0);
}
if (props.globals.getNode("/scenery/airport/jetway-movable-debug") == nil)
{
props.globals.initNode("/scenery/airport/jetway-movable-debug", 0, "BOOL");
}
# nasal interpolation function - returns a value based on a set interpolation table, like the <interpolate> feature of XML animations
# takes an array with sub-arrays, like
# [[<ind>, <dep>], [<ind>, <dep>]]
var interpolateTable = func(table, value)
{
var newValue = 0;
forindex (i; table)
{
if (value >= table[i][0])
{
if (i + 1 < size(table))
{
newValue = (value - table[i][0]) / (table[i + 1][0] - table[i][0]) * (table[i + 1][1] - table[i][1]) + table[i][1];
}
else
{
newValue = table[i][1];
}
}
}
return newValue;
};
var xtranslate = nil;
var yrotate = nil;
var zrotate = nil;
var hoodrotate = nil;
if (props.globals.getNode("/aircraft/door[0]/x-m") != nil and props.globals.getNode("/aircraft/door[0]/y-m") != nil and props.globals.getNode("/aircraft/door[0]/z-m") != nil)
{
var xm = getprop("/aircraft/door[0]/x-m");
var ym = getprop("/aircraft/door[0]/y-m") - 2.65;
var zm = getprop("/aircraft/door[0]/z-m") - 3.752;
# calculate the extension length using the Pythagorean Theorem (c = sqrt(a^2 + b^2))
xtranslate = math.sqrt(xm * xm + ym * ym) - 19.536;
# calculate the rotation angle along the Y axis
yrotate = math.atan2(zm / xm, 1) * R2D;
# calculate the rotation angle along the Z axis
zrotate = math.atan2(ym / xm, 1) * R2D;
# hood rotation angle is predefined
hoodrotate = getprop("/aircraft/jetway-hood-deg");
}
# old system (legacy support)
elsif (props.globals.getNode("/aircraft/jetway-pos/x-tra") != nil and props.globals.getNode("/aircraft/jetway-pos/y-rot") != nil and props.globals.getNode("/aircraft/jetway-pos/z-rot") != nil and props.globals.getNode("/aircraft/jetway-pos/hood-rot") != nil)
{
# rotation angles and extension lengths are predefined
var xtranslate = getprop("/aircraft/jetway-pos/x-tra");
var yrotate = getprop("/aircraft/jetway-pos/y-rot");
var zrotate = getprop("/aircraft/jetway-pos/z-rot");
var hoodrotate = getprop("/aircraft/jetway-pos/hood-rot");
}
var xtranslaterate = 0.5;
var xtranslatetable = [
[0.0, 0.0],
[0.2, 0.5],
[0.6, 0.5],
[0.8, 1.0],
[1.0, 1.0]
];
var yrotaterate = 1;
var yrotatetable = [
[0.0, 0.0],
[0.4, 0.7],
[0.7, 1.0],
[1.0, 1.0]
];
var zrotaterate = 1;
var zrotatetable = [
[0.0, 0.0],
[0.2, 0.0],
[0.6, 0.7],
[0.8, 0.7],
[0.9, 1.0],
[1.0, 1.0]
];
var zentrancerotaterate = 5;
var zentrancerotatetable = [
[0.0, 0.0],
[0.5, 0.0],
[0.6, 0.7],
[0.8, 0.7],
[0.9, 1.0],
[1.0, 1.0]
];
var hoodrotaterate = 1;
var hoodrotatetable = [
[0.0, 0.0],
[0.9, 0.0],
[1,0, 1.0]
];
if (xtranslate != nil and yrotate != nil and zrotate != nil and hoodrotate != nil)
{
var length = math.abs(xtranslate / xtranslaterate) + math.abs(yrotate / yrotaterate) + math.abs(zrotate / zrotaterate) + math.abs(zrotate / zentrancerotaterate) + math.abs(hoodrotate / hoodrotaterate);
if (props.globals.getNode("/scenery/airport/jetway-movable-debug").getBoolValue())
{
print("Animated jetway debug information:");
print("----------------------------------");
print("x-translation-m: " ~ xtranslate);
print("y-rotation-deg: " ~ yrotate);
print("z-rotation-deg: " ~ zrotate);
print("hood-x-rotation-deg: " ~ hoodrotate);
print("");
print("Total animation time: " ~ length ~ " seconds");
}
if (!props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
{
props.globals.getNode("/scenery/airport/jetway[0]/extended").setBoolValue(1);
interpolate("/scenery/airport/jetway[0]/position-norm",
1, -getprop("/scenery/airport/jetway[0]/position-norm") + 1 * length
);
gui.popupTip("Extending jetway.");
var loop = func
{
var position = getprop("/scenery/airport/jetway[0]/position-norm");
setprop("/scenery/airport/jetway[0]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
setprop("/scenery/airport/jetway[0]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
setprop("/scenery/airport/jetway[0]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
setprop("/scenery/airport/jetway[0]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate) ;
setprop("/scenery/airport/jetway[0]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);
if (position < 1 and props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
{
settimer(loop, 0);
}
};
loop();
}
elsif (props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
{
props.globals.getNode("/scenery/airport/jetway[0]/extended").setBoolValue(0);
interpolate("/scenery/airport/jetway[0]/position-norm",
0, getprop("/scenery/airport/jetway[0]/position-norm") * length
);
gui.popupTip("Retracting jetway.");
var loop = func
{
var position = getprop("/scenery/airport/jetway[0]/position-norm");
setprop("/scenery/airport/jetway[0]/x-translation-m", interpolateTable(xtranslatetable, position) * xtranslate);
setprop("/scenery/airport/jetway[0]/y-rotation-deg", interpolateTable(yrotatetable, position) * yrotate);
setprop("/scenery/airport/jetway[0]/z-rotation-deg", interpolateTable(zrotatetable, position) * zrotate);
setprop("/scenery/airport/jetway[0]/z-entrance-rotation-deg", interpolateTable(zentrancerotatetable, position) * zrotate);
setprop("/scenery/airport/jetway[0]/hood-x-rotation-deg", interpolateTable(hoodrotatetable, position) * hoodrotate);
if (position > 0 and !props.globals.getNode("/scenery/airport/jetway[0]/extended").getBoolValue())
{
settimer(loop, 0);
}
};
loop();
}
}
else
{
gui.popupTip("Cannot extend jetway: Your aircraft does not define the required positioning information.");
}
]]></script>
</binding>
</action>
</animation>
<animation>
<type>rotate</type>
<object-name>Tunnel1Rotunda</object-name>
<object-name>Tunnel1</object-name>
<object-name>Tunnel2</object-name>
<object-name>Tunnel3</object-name>
<object-name>Rotunda2</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<property>/scenery/airport/jetway[0]/z-rotation-deg</property>
<center>
<x-m>0</x-m>
<y-m>0</y-m>
<z-m>0</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>1</z>
</axis>
</animation>
<animation>
<type>translate</type>
<object-name>Tunnel2</object-name>
<object-name>Tunnel3</object-name>
<object-name>Rotunda2</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<property>/scenery/airport/jetway[0]/x-translation-m</property>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<property>/scenery/airport/jetway[0]/z-entrance-rotation-deg</property>
<center>
<x-m>19.536</x-m>
<y-m>0.081</y-m>
<z-m>0</z-m>
</center>
<axis>
<x>0</x>
<y>0</y>
<z>-1</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>Tunnel1</object-name>
<object-name>Tunnel2</object-name>
<object-name>Rotunda2</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<property>/scenery/airport/jetway[0]/y-rotation-deg</property>
<center>
<x-m>1.5</x-m>
<y-m>0</y-m>
<z-m>4</z-m>
</center>
<axis>
<x>0</x>
<y>-1</y>
<z>0</z>
</axis>
</animation>
<animation>
<type>rotate</type>
<object-name>Hood</object-name>
<property>/scenery/airport/jetway[0]/hood-x-rotation-deg</property>
<center>
<x-m>0</x-m>
<y-m>2.019</y-m>
<z-m>3.852</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>
<!-- Night/day lighting -->
<animation>
<type>textranslate</type>
<object-name>Rotunda1</object-name>
<object-name>Tunnel1Rotunda</object-name>
<object-name>Tunnel1</object-name>
<object-name>Tunnel2</object-name>
<object-name>Tunnel3</object-name>
<object-name>Rotunda2</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<property>/sim/time/sun-angle-rad</property>
<factor>0.3125</factor>
<step>1.6</step>
<axis>
<x>1</x>
<y>0</y>
</axis>
</animation>
<!-- Make the ground marker and jetway entrance "non-solid" so that the aircraft does not collide with them -->
<animation>
<object-name>Marker</object-name>
<object-name>Entrance</object-name>
<object-name>Hood</object-name>
<enable-hot type="bool">false</enable-hot>
</animation>
</PropertyList>