1
0
Fork 0

- write data to $FG_HOME/ufo-cursor.xml

- print model name in window title
- more help entries
This commit is contained in:
mfranz 2006-03-16 16:24:52 +00:00
parent 2cfa125201
commit 377ab6e1fa
2 changed files with 82 additions and 54 deletions

View file

@ -1,9 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<PropertyList> <PropertyList>
<sim> <sim>
<description>UFO from the 'White Project' of the UNESCO</description> <description>UFO from the 'White Project' of the UNESCO</description>
<author>ET</author> <author>ET</author>
@ -28,17 +26,25 @@
<desc>fly backwards</desc> <desc>fly backwards</desc>
</key> </key>
<key> <key>
<name>mouse click</name> <name>b</name>
<desc>set cursor</desc> <desc>fly backwards</desc>
</key>
<key>
<name>d</name>
<desc>dump coordinates</desc>
</key> </key>
<key> <key>
<name>[ ]</name> <name>[ ]</name>
<desc>decrease/increase maximum speed</desc> <desc>decrease/increase maximum speed</desc>
</key> </key>
<key>
<name>mouse click</name>
<desc>set cursor</desc>
</key>
<key>
<name>tab</name>
<desc>open/close cursor dialog</desc>
</key>
<key>
<name>d</name>
<desc>dump coordinates</desc>
</key>
</help> </help>
</sim> </sim>
@ -70,24 +76,15 @@
<model> <model>
<name>cursor</name> <name>cursor</name>
<path alias="/cursor"/> <path alias="/cursor"/>
<longitude-deg-prop>/cursor/longitude-deg</longitude-deg-prop> <longitude-deg-prop>/cursor-data/longitude-deg</longitude-deg-prop>
<latitude-deg-prop>/cursor/latitude-deg</latitude-deg-prop> <latitude-deg-prop>/cursor-data/latitude-deg</latitude-deg-prop>
<elevation-ft-prop>/cursor/elevation-ft</elevation-ft-prop> <elevation-ft-prop>/cursor-data/elevation-ft</elevation-ft-prop>
<heading-deg-prop>/cursor/heading-deg</heading-deg-prop> <heading-deg-prop>/cursor-data/heading-deg</heading-deg-prop>
<pitch-deg-prop>/cursor/pitch-deg</pitch-deg-prop> <pitch-deg-prop>/cursor-data/pitch-deg</pitch-deg-prop>
<roll-deg-prop>/cursor/roll-deg</roll-deg-prop> <roll-deg-prop>/cursor-data/roll-deg</roll-deg-prop>
</model> </model>
</models> </models>
<cursor>
<longitude-deg type="double">0.0</longitude-deg>
<latitude-deg type="double">0.0</latitude-deg>
<elevation-ft type="double">-1000.0</elevation-ft>
<heading-deg type="double">0.0</heading-deg>
<pitch-deg type="double">0.0</pitch-deg>
<roll-deg type="double">0.0</roll-deg>
</cursor>
<nasal> <nasal>
<ufo> <ufo>
<file>Aircraft/ufo/ufo.nas</file> <file>Aircraft/ufo/ufo.nas</file>

View file

@ -1,4 +1,4 @@
# MAXIMUM SPEED ################################################################################### # maximum speed -----------------------------------------------------------------------------------
var maxspeed = props.globals.getNode("engines/engine/speed-max-mps"); var maxspeed = props.globals.getNode("engines/engine/speed-max-mps");
var speed = [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000]; var speed = [10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000];
@ -20,7 +20,9 @@ controls.flapsDown = func(x) {
# CURSOR ##########################################################################################
# cursor ------------------------------------------------------------------------------------------
ft2m = func { arg[0] * 0.3048 } ft2m = func { arg[0] * 0.3048 }
m2ft = func { arg[0] / 0.3048 } m2ft = func { arg[0] / 0.3048 }
@ -121,7 +123,7 @@ Value = {
m.lastOffs = 0; m.lastOffs = 0;
m.init = init; m.init = init;
m.inOffsN = baseN.getNode("offset-" ~ name, 1); m.inOffsN = baseN.getNode("offsets/" ~ name, 1);
m.inOffsN.setValue(m.lastOffs); m.inOffsN.setValue(m.lastOffs);
m.outN = baseN.getNode(name, 1); m.outN = baseN.getNode(name, 1);
@ -163,7 +165,7 @@ Value = {
Object = { Object = {
new : func { new : func {
m = { parents : [Object] }; m = { parents : [Object] };
baseN = props.globals.getNode("/cursor", 1); baseN = props.globals.getNode("/cursor-data", 1);
m.values = { m.values = {
lon: Value.new(baseN, "longitude-deg", 0), lon: Value.new(baseN, "longitude-deg", 0),
lat: Value.new(baseN, "latitude-deg", 0), lat: Value.new(baseN, "latitude-deg", 0),
@ -197,9 +199,10 @@ setlistener("/sim/input/click/latitude-deg", func { cursor.values["lat"].set(cmd
setlistener("/sim/input/click/elevation-ft", func { cursor.values["alt"].set(cmdarg().getValue())}); setlistener("/sim/input/click/elevation-ft", func { cursor.values["alt"].set(cmdarg().getValue())});
var DATA = {};
dialog = nil; var dialog = nil;
showDialog = func { showDialog = func {
name = "ufo-cursor-dialog"; name = "ufo-cursor-dialog";
@ -209,6 +212,12 @@ showDialog = func {
return; return;
} }
var name = pop(split("/", getprop("cursor")));
var ext = find(".", name);
if (ext >= 0) {
name = substr(name, 0, ext);
}
var title = 'Position "' ~ name ~ '"';
cursor.center(); cursor.center();
dialog = gui.Widget.new(); dialog = gui.Widget.new();
@ -221,7 +230,7 @@ showDialog = func {
titlebar = dialog.addChild("group"); titlebar = dialog.addChild("group");
titlebar.set("layout", "hbox"); titlebar.set("layout", "hbox");
titlebar.addChild("empty").set("stretch", 1); titlebar.addChild("empty").set("stretch", 1);
titlebar.addChild("text").set("label", "Position Cursor"); titlebar.addChild("text").set("label", title);
titlebar.addChild("empty").set("stretch", 1); titlebar.addChild("empty").set("stretch", 1);
dialog.addChild("hrule").addChild("dummy"); dialog.addChild("hrule").addChild("dummy");
@ -329,33 +338,16 @@ dumpCoords = func {
print(""); print("");
print(tile_path(lon, lat)); print(tile_path(lon, lat));
print(sprintf("OBJECT_STATIC %.6f %.6f %.4f %.1f", lon, lat, elev_m, normdeg(360 - heading))); print(sprintf("OBJECT_STATIC %.6f %.6f %.4f %.1f", lon, lat, elev_m, normdeg(360 - heading)));
print("");
var hdg = normdeg(heading + getprop("/sim/current-view/goal-pitch-offset-deg"));
var fgfs = sprintf("$ fgfs --aircraft=ufo --lon=%.6f --lat=%.6f --altitude=%.2f --heading=%.1f",
lon, lat, agl_ft, hdg);
print(fgfs);
print("\n\n--------------------------- Cursor ---------------------------"); print("\n\n--------------------------- Cursor ---------------------------");
# try to guess object type and
var type = "OBJECT_STATIC";
var model = getprop("cursor");
if (model == "Aircraft/ufo/Models/cursor.ac") {
model = "";
} else {
var path = split("/", model);
if (size(path) > 1) {
var dir = getprop("/sim/fg-root");
for (i = 0; i < size(path) - 1; i += 1) {
dir ~= "/" ~ path[i];
}
var files = directory(dir);
var file = path[size(path) - 1];
foreach (f; files) {
if (f == file) {
type = "OBJECT_SHARED";
break;
}
}
}
}
var alt = cursor.values["alt"].get(); var alt = cursor.values["alt"].get();
print(sprintf("Longitude: %.6f deg", var clon = cursor.values["lon"].get())); print(sprintf("Longitude: %.6f deg", var clon = cursor.values["lon"].get()));
print(sprintf("Latitude: %.6f deg", var clat = cursor.values["lat"].get())); print(sprintf("Latitude: %.6f deg", var clat = cursor.values["lat"].get()));
@ -364,11 +356,50 @@ dumpCoords = func {
print(sprintf("Pitch: %.1f deg", normdeg(cursor.values["pitch"].get()))); print(sprintf("Pitch: %.1f deg", normdeg(cursor.values["pitch"].get())));
print(sprintf("Roll: %.1f deg", normdeg(cursor.values["roll"].get()))); print(sprintf("Roll: %.1f deg", normdeg(cursor.values["roll"].get())));
print(""); print("");
print(tile_path(clon, clat)); print(DATA["stg"] = tile_path(clon, clat));
print(sprintf("%s %s %.6f %.6f %.4f %.1f", type, model, clon, clat, celev, normdeg(360 - chdg))); print(DATA["object"] = sprintf("%s %s %.6f %.6f %.4f %.1f", DATA["type"], DATA["model"], clon, clat, celev, normdeg(360 - chdg)));
print("--------------------------------------------------------------"); print("--------------------------------------------------------------");
saveData();
} }
saveData = func {
savexml = func(name, node) {
fgcommand("savexml", props.Node.new({"filename": name, "sourcenode": node}));
}
var tmp = "save-ufo-data";
save = props.globals.getNode(tmp, 1);
model = props.globals.getNode("/cursor-data");
props.copy(model, save);
foreach (var p; keys(DATA)) {
save.getNode(p, 1).setValue(DATA[p]);
}
save.removeChildren("offsets");
savexml(getprop("/sim/fg-home") ~ "/ufo-cursor.xml", save.getPath());
props.globals.removeChild(tmp);
}
getCursorData = func {
var model = getprop("cursor");
if (model == "") {
die("No such model: ", model);
}
if (model == "Aircraft/ufo/Models/cursor.ac") {
DATA["type"] = "OBJECT_STATIC";
DATA["path"] = "";
DATA["model"] = "";
} else {
DATA["type"] = split("/", model)[0] == "Models" ? "OBJECT_SHARED" : "OBJECT_STATIC";
DATA["path"] = getprop("/sim/fg-root") ~ "/" ~ model;
DATA["model"] = model;
}
}
# INIT
settimer(func { getCursorData() }, 0);