1
0
Fork 0

- fix default model initialization

- add status line (green: active model -- clicks will plant it;
                   orange: selected model -- adjustable/removable)
- make manually selected models active (that is: further clicks will plant
  this model type); doesn't apply to automatically selected models (after
  removing)
- cleanup
TODO: yet more cleanup, add missing terminal output, etc.
This commit is contained in:
mfranz 2006-03-23 16:16:44 +00:00
parent d61de93a6e
commit fae858dbe3
2 changed files with 55 additions and 50 deletions

View file

@ -123,7 +123,7 @@
</input>
<!-- default model -->
<cursor>Aircraft/ufo/Models/cursor.ac</cursor>
<model>Aircraft/ufo/Models/cursor.ac</model>
<!-- subdirs of $FG_ROOT to search models in.
Comma separated, e.g. "Models,Scenery/Objects/w130n30" -->

View file

@ -142,11 +142,6 @@ normdeg = func(angle) {
}
format = func(lon, lat) {
sprintf("%s%03d%s%02d", lon < 0 ? "w" : "e", abs(lon), lat < 0 ? "s" : "n", abs(lat));
}
bucket_span = func(lat) {
if (lat >= 89.0 ) {
360.0;
@ -183,13 +178,13 @@ bucket_span = func(lat) {
tile_index = func(lon, lat) {
lon_floor = floor(lon);
lat_floor = floor(lat);
span = bucket_span(lat);
var lon_floor = floor(lon);
var lat_floor = floor(lat);
var span = bucket_span(lat);
var x = 0;
if (span < 0.0000001) {
lon = 0;
x = 0;
} elsif (span <= 1.0) {
x = int((lon - lon_floor) / span);
} else {
@ -201,24 +196,24 @@ tile_index = func(lon, lat) {
lon = -180;
}
}
x = 0;
}
y = int((lat - lat_floor) * 8);
var y = int((lat - lat_floor) * 8);
(lon_floor + 180) * 16384 + (lat_floor + 90) * 64 + y * 8 + x;
}
tile_path = func(lon, lat) {
var lon_floor = floor(lon);
var lat_floor = floor(lat);
var lon_chunk = floor(lon / 10.0) * 10;
var lat_chunk = floor(lat / 10.0) * 10;
format(lon_chunk, lat_chunk) ~ "/" ~ format(lon_floor, lat_floor)
~ "/" ~ tile_index(lon, lat) ~ ".stg";
format = func(lon, lat) {
sprintf("%s%03d%s%02d", lon < 0 ? "w" : "e", abs(lon), lat < 0 ? "s" : "n", abs(lat));
}
tile_path = func(lon, lat) {
var p = format(floor(lon / 10.0) * 10, floor(lat / 10.0) * 10);
p ~= "/" ~ format(floor(lon), floor(lat));
p ~= "/" ~ tile_index(lon, lat) ~ ".stg";
}
@ -228,12 +223,6 @@ tile_path = func(lon, lat) {
# cursor ------------------------------------------------------------------------------------------
var DATA = {}; # FIXME
var modellist = nil;
var modelmgr = nil;
var adjust = nil;
Value = {
new : func(baseN, name, init) {
@ -253,7 +242,7 @@ Value = {
return m;
},
del : func {
removelistener(m.listener);
removelistener(me.listener);
},
reset : func {
me.center();
@ -408,7 +397,7 @@ Static = {
}
},
distance_from : func(xyz) {
return math.sqrt(coord_dist_sq(xyz, lonlat2xyz([me.lon, me.lat]))) * ERAD;
return coord_dist_sq(xyz, lonlat2xyz([me.lon, me.lat]));
},
get_data : func {
var n = props.Node.new();
@ -452,7 +441,7 @@ Dynamic = {
distance_from : func(xyz) {
var lon = adjust.get("lon");
var lat = adjust.get("lat");
return math.sqrt(coord_dist_sq(xyz, lonlat2xyz([lon, lat]))) * ERAD;
return coord_dist_sq(xyz, lonlat2xyz([lon, lat]));
},
get_data : func {
var n = props.Node.new();
@ -524,6 +513,8 @@ ModelMgr = {
var st = me.dynamic.make_static();
me.dynamic = me.static[nearest].make_dynamic();
me.static[nearest] = st;
# actively selected: use this model type
me.modelpath = me.dynamic.path;
} else {
me.dynamic = me.static[nearest].make_dynamic();
@ -539,14 +530,18 @@ ModelMgr = {
if (me.dynamic == nil) { # last one removed
return;
}
# blink
me.flash();
},
flash : func {
me.block = 1;
settimer(func { adjust.set("elev", adjust.get("elev") - 10000) }, 0.33);
settimer(func { adjust.set("elev", adjust.get("elev") + 10000) }, 0.66);
settimer(func { adjust.set("elev", adjust.get("elev") - 10000) }, 1.00);
settimer(func { adjust.set("elev", adjust.get("elev") + 10000) }, 1.33);
settimer(func { me.block = 0 }, 1.34);
var t = 0.33;
display.write(me.dynamic.path, 1.0, 0.6, 0);
settimer(func { adjust.set("elev", adjust.get("elev") - 10000) }, t * 1);
settimer(func { adjust.set("elev", adjust.get("elev") + 10000) }, t * 2);
settimer(func { adjust.set("elev", adjust.get("elev") - 10000) }, t * 3);
settimer(func { adjust.set("elev", adjust.get("elev") + 10000) }, t * 4);
settimer(func { me.block = 0 }, t * 4.5);
settimer(func { display.write(me.modelpath) }, 4);
},
remove_selected : func {
if (me.block) {
@ -560,6 +555,7 @@ ModelMgr = {
},
setmodelpath : func(path) {
me.modelpath = path;
display.write(path);
},
get_data : func {
var n = props.Node.new();
@ -596,8 +592,6 @@ ModelMgr = {
scanDirs = func(csv) {
var list = [];
foreach(var dir; split(",", csv)) {
@ -609,6 +603,10 @@ scanDirs = func(csv) {
}
# interface functions -----------------------------------------------------------------------------
printData = func {
var rule = "------------------------------------------------------------------";
var data = modelmgr.get_data();
@ -650,17 +648,28 @@ exportData = func {
removeSelectedModel = func { modelmgr.remove_selected() }
# init --------------------------------------------------------------------------------------------
var display = nil;
var modellist = nil;
var adjust = nil;
var modelmgr = nil;
settimer(func {
display = screen.window.new(8, 8, 1, 120);
display.halign = "left";
display.font = "HELVETICA_12";
display.fg = [0.6, 1, 0.6, 1];
modellist = scanDirs(getprop("/source"));
modelmgr = ModelMgr.new(getprop("/model"));
adjust = Adjust.new("/data");
modelmgr = ModelMgr.new(getprop("/model"));
setlistener("/sim/signals/click", func { modelmgr.click() });
}, 0);
}, 1);
@ -734,7 +743,6 @@ closeModelSelectDialog = func {
fgcommand("dialog-apply", dlg);
fgcommand("dialog-close", dlg);
delete(dialog, name);
print(getprop("/model"));
modelmgr.setmodelpath(getprop("/model"));
}
@ -853,9 +861,7 @@ showAdjustDialog = func {
#####
# attic -------------------------------------------------------------------------------------------
dumpCoords = func {
@ -895,10 +901,9 @@ dumpCoords = func {
printf("Pitch: %.1f deg", normdeg(cursor.val["pitch"].get()));
printf("Roll: %.1f deg", normdeg(cursor.val["roll"].get()));
print("");
print(DATA["stg"] = tile_path(clon, clat));
print(DATA["object"] = sprintf("%s %s %.6f %.6f %.4f %.1f", DATA["type"], DATA["model"], clon, clat, celev, normdeg(360 - chdg)));
print("--------------------------------------------------------------");
saveData();
}