Syd's MIBS:
A camera tool for making fgfs videos (heavily used by Michelle) and for tracking MP and AI aircraft. It's planned to include this into the regular ufo, but for now it's better to keep them separated. Comes with its own panel, which (hopefully) is self-explaining. Shouldn't be announced on the fgfs page as separate aircraft (if that's possible). Work in progress ...
This commit is contained in:
parent
a3fdbf8456
commit
1fefa1c206
5 changed files with 631 additions and 0 deletions
165
Aircraft/ufo/Dialogs/campanel.xml
Normal file
165
Aircraft/ufo/Dialogs/campanel.xml
Normal file
|
@ -0,0 +1,165 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
<name>cam-keys</name>
|
||||
<layout>vbox</layout>
|
||||
<x>0</x>
|
||||
<y>24</y>
|
||||
<pref-width>1024</pref-width>
|
||||
<pref-height>24</pref-height>
|
||||
<modal>false</modal>
|
||||
<color>
|
||||
<red>0.5</red>
|
||||
<green>0.5</green>
|
||||
<blue>0.5</blue>
|
||||
<alpha>0.5</alpha>
|
||||
</color>
|
||||
|
||||
<group>
|
||||
<layout>hbox</layout>
|
||||
<halign>left</halign>
|
||||
<default-padding>2</default-padding>
|
||||
|
||||
<checkbox>
|
||||
<label>AI</label>
|
||||
<property>/sim/cam/target-ai</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<label>MP</label>
|
||||
<property>/sim/cam/target-mp</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<text>
|
||||
<label>000000</label>
|
||||
<format>No# %d</format>
|
||||
<property>/sim/cam/target-number</property>
|
||||
<live>true</live>
|
||||
</text>
|
||||
|
||||
<text>
|
||||
<label>000000000000000000</label>
|
||||
<format>Name: %s</format>
|
||||
<property>/sim/cam/target-name</property>
|
||||
<live>true</live>
|
||||
</text>
|
||||
|
||||
<button>
|
||||
<color>
|
||||
<red>0.5</red>
|
||||
<green>0.5</green>
|
||||
<blue>0.5</blue>
|
||||
</color>
|
||||
<pref-width>35</pref-width>
|
||||
<pref-height>20</pref-height>
|
||||
<legend><<</legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/cam/target-number</property>
|
||||
<step>-1</step>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<button>
|
||||
<halign>left</halign>
|
||||
<color>
|
||||
<red>0.5</red>
|
||||
<green>0.5</green>
|
||||
<blue>0.5</blue>
|
||||
</color>
|
||||
<pref-width>35</pref-width>
|
||||
<pref-height>20</pref-height>
|
||||
<legend>>></legend>
|
||||
<binding>
|
||||
<command>property-adjust</command>
|
||||
<property>/sim/cam/target-number</property>
|
||||
<step>1</step>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty><pref-width>4</pref-width></empty>
|
||||
|
||||
<button>
|
||||
<color>
|
||||
<red>0.5</red>
|
||||
<green>0.5</green>
|
||||
<blue>0.5</blue>
|
||||
</color>
|
||||
<pref-width>45</pref-width>
|
||||
<pref-height>20</pref-height>
|
||||
<legend>Goto</legend>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>cam.goto_target()</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
<empty><pref-width>4</pref-width></empty>
|
||||
|
||||
<checkbox>
|
||||
<width>20</width>
|
||||
<height>24</height>
|
||||
<label>CHASE</label>
|
||||
<live>true</live>
|
||||
<property>/sim/cam/chase</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<width>20</width>
|
||||
<height>24</height>
|
||||
<label>FOCUS</label>
|
||||
<live>true</live>
|
||||
<property>/sim/cam/focus</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<width>20</width>
|
||||
<height>24</height>
|
||||
<label>ALT</label>
|
||||
<live>true</live>
|
||||
<property>/sim/cam/alt</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<checkbox>
|
||||
<width>20</width>
|
||||
<height>24</height>
|
||||
<label>SPEED</label>
|
||||
<live>true</live>
|
||||
<property>/sim/cam/speed</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox>
|
||||
|
||||
<!--checkbox>
|
||||
<width>20</width>
|
||||
<height>24</height>
|
||||
<label>LOCK</label>
|
||||
<live>true</live>
|
||||
<property>/sim/cam/lock</property>
|
||||
<binding>
|
||||
<command>dialog-apply</command>
|
||||
</binding>
|
||||
</checkbox-->
|
||||
</group>
|
||||
|
||||
<nasal>
|
||||
<open>cmdarg().getNode("pref-width").setValue(getprop("/sim/startup/xsize"))</open>
|
||||
</nasal>
|
||||
</PropertyList>
|
||||
|
113
Aircraft/ufo/Models/camera.ac
Normal file
113
Aircraft/ufo/Models/camera.ac
Normal file
|
@ -0,0 +1,113 @@
|
|||
AC3Db
|
||||
MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 64 trans 0
|
||||
MATERIAL "Material" rgb 0 0 0 amb 0.5 0.5 0.5 emis 0 0 0 spec 1 1 1 shi 32 trans 0
|
||||
OBJECT world
|
||||
kids 1
|
||||
OBJECT poly
|
||||
name "Cube"
|
||||
data 8
|
||||
Cube.005
|
||||
crease 30.000000
|
||||
numvert 16
|
||||
-0.027 0.02 -0.01
|
||||
-0.027 -0.02 -0.01
|
||||
-0.027 -0.02 0.01
|
||||
-0.027 0.02 0.01
|
||||
0.027 0.02 -0.01
|
||||
0.027 -0.02 -0.01
|
||||
0.027 -0.02 0.01
|
||||
0.027 0.02 0.01
|
||||
-0.047 0.01 -0.01
|
||||
-0.047 -0.01 -0.01
|
||||
-0.047 -0.01 0.01
|
||||
-0.047 0.01 0.01
|
||||
-0.027 0.005 -0.005
|
||||
-0.027 -0.005 -0.005
|
||||
-0.027 -0.005 0.005
|
||||
-0.027 0.005 0.005
|
||||
numsurf 12
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
0 0 0
|
||||
1 0 0
|
||||
2 0 0
|
||||
3 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
4 0 0
|
||||
7 0 0
|
||||
6 0 0
|
||||
5 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
0 0 0
|
||||
4 0 0
|
||||
5 0 0
|
||||
1 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
1 0 0
|
||||
5 0 0
|
||||
6 0 0
|
||||
2 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
2 0 0
|
||||
6 0 0
|
||||
7 0 0
|
||||
3 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
4 0 0
|
||||
0 0 0
|
||||
3 0 0
|
||||
7 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
10 0 0
|
||||
11 0 0
|
||||
8 0 0
|
||||
9 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
12 0 0
|
||||
15 0 0
|
||||
14 0 0
|
||||
13 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
8 0 0
|
||||
12 0 0
|
||||
13 0 0
|
||||
9 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
9 0 0
|
||||
13 0 0
|
||||
14 0 0
|
||||
10 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
10 0 0
|
||||
14 0 0
|
||||
15 0 0
|
||||
11 0 0
|
||||
SURF 0x20
|
||||
mat 1
|
||||
refs 4
|
||||
11 0 0
|
||||
15 0 0
|
||||
12 0 0
|
||||
8 0 0
|
||||
kids 0
|
13
Aircraft/ufo/Models/camera.xml
Normal file
13
Aircraft/ufo/Models/camera.xml
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
<path>camera.ac</path>
|
||||
|
||||
<animation>
|
||||
<type>select</type>
|
||||
<object-name>Cube</object-name>
|
||||
<condition>
|
||||
<property>sim/model/always-show-in-MP</property>
|
||||
</condition>
|
||||
</animation>
|
||||
</PropertyList>
|
229
Aircraft/ufo/cam.nas
Normal file
229
Aircraft/ufo/cam.nas
Normal file
|
@ -0,0 +1,229 @@
|
|||
#### Aerotro's Flightgear Cam ####
|
||||
|
||||
var CAM = props.globals.getNode("/sim/cam");
|
||||
|
||||
var MPS = 0.514444444;
|
||||
var D2R = math.pi / 180;
|
||||
var R2D = 180 / math.pi;
|
||||
var sin = func(v) math.sin(v * D2R);
|
||||
var cos = func(v) math.cos(v * D2R);
|
||||
var atan2 = func(v, w) math.atan2(v, w) * R2D;
|
||||
|
||||
var ViewNum = 0;
|
||||
var Grd_Offset = 5.0;
|
||||
var panel = gui.Dialog.new("/sim/gui/dialogs/cam/dialog", "Aircraft/ufo/Dialogs/campanel.xml");
|
||||
var maxspeedN = props.globals.getNode("engines/engine/speed-max-mps");
|
||||
var speed = [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000];
|
||||
var current = 7;
|
||||
var maxspeed = speed[current];
|
||||
var cam_view = nil;
|
||||
|
||||
var targetN = nil;
|
||||
var target = geo.Coord.new();
|
||||
var self = nil;
|
||||
|
||||
|
||||
controls.flapsDown = func(x) {
|
||||
if (!x)
|
||||
return;
|
||||
elsif (x < 0 and current > 0)
|
||||
current -= 1;
|
||||
elsif (x > 0 and current < size(speed) - 1)
|
||||
current += 1;
|
||||
|
||||
maxspeed = speed[current];
|
||||
}
|
||||
|
||||
|
||||
var throttle = 0;
|
||||
controls.throttleAxis = func {
|
||||
val = cmdarg().getNode("setting").getValue();
|
||||
if (size(arg) > 0)
|
||||
val = -val;
|
||||
throttle = (1 - val) * 0.5;
|
||||
}
|
||||
|
||||
|
||||
# directly called from the dialog
|
||||
var goto_target = func {
|
||||
targetN != nil or return;
|
||||
var lat = targetN.getNode("position/latitude-deg").getValue();
|
||||
var lon = targetN.getNode("position/longitude-deg").getValue();
|
||||
var alt = targetN.getNode("position/altitude-ft").getValue() * geo.FT2M;
|
||||
var speed = targetN.getNode("velocities/true-airspeed-kt").getValue() * MPS * 2;
|
||||
var course = targetN.getNode("orientation/true-heading-deg").getValue();
|
||||
self.set_latlon(lat, lon, alt).apply_course_distance(course + 180, 100);
|
||||
setprop("/position/latitude-deg", self.lat());
|
||||
setprop("/position/longitude-deg", self.lon());
|
||||
altL.set(self.alt());
|
||||
speedL.set(speed);
|
||||
mode.chase.setValue(1);
|
||||
mode.focus.setValue(1);
|
||||
mode.alt.setValue(1);
|
||||
mode.speed.setValue(1);
|
||||
maxspeed = speed * 2;
|
||||
throttleL.set(0.5);
|
||||
}
|
||||
|
||||
|
||||
var set_aircraft = func {
|
||||
var list = [];
|
||||
if (getprop("/sim/cam/target-ai"))
|
||||
list ~= props.globals.getNode("/ai/models").getChildren("aircraft");
|
||||
if (getprop("/sim/cam/target-mp"))
|
||||
list ~= props.globals.getNode("/ai/models").getChildren("multiplayer");
|
||||
|
||||
var name = "";
|
||||
var index = getprop("/sim/cam/target-number");
|
||||
targetN = nil;
|
||||
|
||||
if (size(list)) {
|
||||
if (index < 0)
|
||||
index = size(list) - 1;
|
||||
elsif (index >= size(list))
|
||||
index = 0;
|
||||
|
||||
targetN = list[index];
|
||||
name = targetN.getNode("callsign").getValue();
|
||||
printlog("info", "cam: new aircraft: ", targetN.getPath(), "\t", name);
|
||||
}
|
||||
|
||||
setprop("/sim/cam/target-number", index);
|
||||
setprop("/sim/cam/target-name", name);
|
||||
}
|
||||
|
||||
|
||||
var viewhdgL = aircraft.angular_lowpass.new(0.2);
|
||||
var viewpitchL = aircraft.lowpass.new(0.1);
|
||||
var viewrollL = aircraft.lowpass.new(0.1);
|
||||
|
||||
var hdgL = aircraft.angular_lowpass.new(0.6);
|
||||
var altL = aircraft.lowpass.new(3);
|
||||
var speedL = aircraft.lowpass.new(2);
|
||||
var throttleL = aircraft.lowpass.new(0.3);
|
||||
|
||||
var goal_headingN = props.globals.getNode("sim/current-view/goal-heading-offset-deg");
|
||||
var goal_pitchN = props.globals.getNode("sim/current-view/goal-pitch-offset-deg");
|
||||
var goal_rollN = props.globals.getNode("sim/current-view/goal-roll-offset-deg");
|
||||
var mode = {
|
||||
chase : props.globals.getNode("/sim/cam/chase"),
|
||||
focus : props.globals.getNode("/sim/cam/focus"),
|
||||
speed : props.globals.getNode("/sim/cam/speed"),
|
||||
alt : props.globals.getNode("/sim/cam/alt"),
|
||||
lock : props.globals.getNode("/sim/cam/lock"),
|
||||
};
|
||||
|
||||
|
||||
var update = func {
|
||||
target.set_latlon(
|
||||
targetN.getNode("position/latitude-deg").getValue(),
|
||||
targetN.getNode("position/longitude-deg").getValue(),
|
||||
targetN.getNode("position/altitude-ft").getValue() * geo.FT2M);
|
||||
|
||||
self = geo.aircraft_position();
|
||||
if (0) {
|
||||
if (mode.lock.getValue()) {
|
||||
self.set(target);
|
||||
self.apply_course_distance(rel.course, rel.distance);
|
||||
self.set_alt(target.alt() + rel.alt);
|
||||
setprop("/position/latitude-deg", self.lat());
|
||||
setprop("/position/longitude-deg", self.lon());
|
||||
setprop("/position/altitude-ft", self.alt() * geo.M2FT);
|
||||
}
|
||||
}
|
||||
|
||||
var self_heading = getprop("/orientation/heading-deg");
|
||||
var self_pitch = getprop("/orientation/pitch-deg");
|
||||
var self_roll = getprop("/orientation/roll-deg");
|
||||
|
||||
if (abs(self_pitch) > 2)
|
||||
mode.alt.setValue(0);
|
||||
if (abs(self_roll) > 2)
|
||||
mode.chase.setValue(0);
|
||||
|
||||
if (mode.alt.getValue())
|
||||
setprop("/position/altitude-ft", altL.filter(target.alt()) * geo.M2FT);
|
||||
else
|
||||
altL.filter(self.alt());
|
||||
|
||||
var distance = self.direct_distance_to(target);
|
||||
if (distance < 1) {
|
||||
var course = targetN.getNode("orientation/true-heading-deg").getValue();
|
||||
mode.focus.setValue(0);
|
||||
mode.chase.setValue(0);
|
||||
} else {
|
||||
var course = self.course_to(target);
|
||||
}
|
||||
var elevation = atan2(target.alt() - altL.get(), distance);
|
||||
|
||||
if (mode.chase.getValue())
|
||||
setprop("/orientation/heading-deg", self_heading = hdgL.filter(course));
|
||||
|
||||
if (mode.focus.getValue()) {
|
||||
var h = viewhdgL.filter(self_heading - course);
|
||||
var p = elevation - self_pitch * cos(h);
|
||||
var r = -self_roll * sin(h);
|
||||
goal_headingN.setValue(h);
|
||||
goal_pitchN.setValue(viewpitchL.filter(p));
|
||||
goal_rollN.setValue(viewrollL.filter(r));
|
||||
}
|
||||
|
||||
if (mode.speed.getValue())
|
||||
maxspeed = targetN.getNode("velocities/true-airspeed-kt").getValue() * MPS * 2;
|
||||
else
|
||||
maxspeed = speed[current];
|
||||
maxspeedN.setDoubleValue(speedL.filter(maxspeed));
|
||||
|
||||
var AGL = getprop("/position/altitude-agl-ft");
|
||||
if (AGL < Grd_Offset)
|
||||
setprop("/position/altitude-ft", getprop("/position/altitude-ft") + Grd_Offset - AGL);
|
||||
|
||||
props.setAll("/controls/engines/engine", "throttle", throttleL.filter(throttle));
|
||||
}
|
||||
|
||||
|
||||
var loop = func {
|
||||
if (ViewNum == cam_view and targetN != nil)
|
||||
update();
|
||||
|
||||
settimer(loop, 0);
|
||||
}
|
||||
|
||||
|
||||
setlistener("/sim/cam/target-number", set_aircraft);
|
||||
setlistener("/sim/cam/target-ai", set_aircraft);
|
||||
setlistener("/sim/cam/target-mp", set_aircraft);
|
||||
setlistener("/sim/current-view/view-number", func {
|
||||
ViewNum = cmdarg().getValue();
|
||||
if (ViewNum == 7)
|
||||
panel.open();
|
||||
else
|
||||
panel.dialog.close();
|
||||
});
|
||||
|
||||
|
||||
if (0) {
|
||||
var rel = { course: 0, distance: 0, alt: 0 };
|
||||
setlistener("/sim/cam/lock", func {
|
||||
if (cmdarg().getValue()) {
|
||||
rel.course = target.course_to(self);
|
||||
rel.distance = target.distance_to(self);
|
||||
rel.alt = self.alt() - target.alt();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
setlistener("/sim/signals/fdm-initialized", func {
|
||||
var views = props.globals.getNode("/sim").getChildren("view");
|
||||
forindex (var i; views)
|
||||
if (views[i].getNode("name").getValue() == "Cam View")
|
||||
cam_view = i;
|
||||
|
||||
setprop("/sim/current-view/view-number", cam_view);
|
||||
setprop("/engines/engine/speed-max-mps", 500);
|
||||
settimer(set_aircraft, 1);
|
||||
loop();
|
||||
});
|
||||
|
||||
|
111
Aircraft/ufo/mibs-set.xml
Normal file
111
Aircraft/ufo/mibs-set.xml
Normal file
|
@ -0,0 +1,111 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<PropertyList>
|
||||
<sim>
|
||||
<description>FG video assistant</description>
|
||||
<author>Syd Adams, Melchior Franz</author>
|
||||
<flight-model>ufo</flight-model>
|
||||
<sound>
|
||||
<path>Aircraft/ufo/ufo-sound.xml</path>
|
||||
</sound>
|
||||
|
||||
<panel>
|
||||
<visibility>false</visibility>
|
||||
</panel>
|
||||
|
||||
<model>
|
||||
<path>Aircraft/ufo/Models/camera.xml</path>
|
||||
<always-show-in-MP type="bool">false</always-show-in-MP>
|
||||
</model>
|
||||
|
||||
<view n="100">
|
||||
<name>Cam View</name>
|
||||
<type>lookfrom</type>
|
||||
<internal type="bool">false</internal>
|
||||
<config>
|
||||
<from-model type="bool">true</from-model>
|
||||
<from-model-idx type="int">0</from-model-idx>
|
||||
<ground-level-nearplane-m type="double">0.5f</ground-level-nearplane-m>
|
||||
<default-field-of-view-deg type="double">55.0</default-field-of-view-deg>
|
||||
<default-pitch-deg type="double">0</default-pitch-deg>
|
||||
<default-heading-deg type="double">0</default-heading-deg>
|
||||
<front-direction-deg type="double">0</front-direction-deg>
|
||||
<front-left-direction-deg type="double">45</front-left-direction-deg>
|
||||
<left-direction-deg type="double">90</left-direction-deg>
|
||||
<back-left-direction-deg type="double">135</back-left-direction-deg>
|
||||
<back-direction-deg type="double">180</back-direction-deg>
|
||||
<back-right-direction-deg type="double">225</back-right-direction-deg>
|
||||
<right-direction-deg type="double">270</right-direction-deg>
|
||||
<front-right-direction-deg type="double">315</front-right-direction-deg>
|
||||
</config>
|
||||
</view>
|
||||
|
||||
<current-view>
|
||||
<view-number>7</view-number>
|
||||
</current-view>
|
||||
|
||||
<help>
|
||||
<title>FG videocam menu help</title>
|
||||
<line>SPACE: toggle cam menu</line>
|
||||
<line>AI: select AI targets</line>
|
||||
<line>MP: select multiplayer targets</line>
|
||||
<line>GOTO: move to target location</line>
|
||||
<line>CHASE: follow target</line>
|
||||
<line>FOCUS: direct view at target</line>
|
||||
<line>ALT: match target altitude</line>
|
||||
<line>SPEED: half throttle matches target speed</line>
|
||||
</help>
|
||||
|
||||
<cam>
|
||||
<target-number type="int">0</target-number>
|
||||
<target-name type="string"></target-name>
|
||||
<target-ai type="bool">1</target-ai>
|
||||
<target-mp type="bool">1</target-mp>
|
||||
<chase type="bool">0</chase>
|
||||
<alt type="bool">0</alt>
|
||||
<speed type="bool">0</speed>
|
||||
<focus type="bool">0</focus>
|
||||
<goto type="bool">0</goto>
|
||||
<lock type="bool">0</lock>
|
||||
</cam>
|
||||
|
||||
</sim>
|
||||
|
||||
<nasal>
|
||||
<cam>
|
||||
<file>Aircraft/ufo/cam.nas</file>
|
||||
</cam>
|
||||
</nasal>
|
||||
|
||||
<input>
|
||||
<keyboard>
|
||||
<key n="32">
|
||||
<name>SPACE</name>
|
||||
<desc>Show dialog</desc>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>cam.panel_dialog.toggle()</script>
|
||||
</binding>
|
||||
</key>
|
||||
</keyboard>
|
||||
</input>
|
||||
|
||||
<instrumentation>
|
||||
<radar>
|
||||
<range>100</range>
|
||||
</radar>
|
||||
</instrumentation>
|
||||
|
||||
<gear>
|
||||
<gear>
|
||||
<!-- hint for the route manager -->
|
||||
<wow type="bool">false</wow>
|
||||
</gear>
|
||||
</gear>
|
||||
|
||||
<autopilot>
|
||||
<route-manager>
|
||||
<min-lock-altitude-agl-ft type="double">-10000</min-lock-altitude-agl-ft>
|
||||
</route-manager>
|
||||
</autopilot>
|
||||
</PropertyList>
|
Loading…
Add table
Reference in a new issue