only report ATC/runway near ground & cleanup
This commit is contained in:
parent
b7ddc05287
commit
ef22d3f5a3
1 changed files with 45 additions and 39 deletions
|
@ -40,17 +40,16 @@ var sanitize = func(s) {
|
||||||
var skip = 0;
|
var skip = 0;
|
||||||
for (var i = 0; i < size(s); i += 1) {
|
for (var i = 0; i < size(s); i += 1) {
|
||||||
var c = s[i];
|
var c = s[i];
|
||||||
if (c == `\t`) {
|
if (c == `\t`)
|
||||||
r ~= ' ';
|
r ~= ' ';
|
||||||
} elsif (c == `{`) {
|
elsif (c == `{`)
|
||||||
#
|
nil;
|
||||||
} elsif (c == `|`) {
|
elsif (c == `|`)
|
||||||
skip = 1;
|
skip = 1;
|
||||||
} elsif (c == `}`) {
|
elsif (c == `}`)
|
||||||
skip = 0;
|
skip = 0;
|
||||||
} elsif (!skip) {
|
elsif (!skip)
|
||||||
r ~= chr(c);
|
r ~= chr(c);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -87,43 +86,47 @@ var window = {
|
||||||
},
|
},
|
||||||
|
|
||||||
write : func(msg, r = nil, g = nil, b = nil, a = nil) {
|
write : func(msg, r = nil, g = nil, b = nil, a = nil) {
|
||||||
if (me.namenode == nil) { return }
|
if (me.namenode == nil)
|
||||||
if (r == nil) { r = me.fg[0] }
|
return;
|
||||||
if (g == nil) { g = me.fg[1] }
|
if (r == nil)
|
||||||
if (b == nil) { b = me.fg[2] }
|
r = me.fg[0];
|
||||||
if (a == nil) { a = me.fg[3] }
|
if (g == nil)
|
||||||
|
g = me.fg[1];
|
||||||
|
if (b == nil)
|
||||||
|
b = me.fg[2];
|
||||||
|
if (a == nil)
|
||||||
|
a = me.fg[3];
|
||||||
foreach (var line; split("\n", string.trim(msg))) {
|
foreach (var line; split("\n", string.trim(msg))) {
|
||||||
line = sanitize(string.trim(line));
|
line = sanitize(string.trim(line));
|
||||||
append(me.lines, [line, r, g, b, a]);
|
append(me.lines, [line, r, g, b, a]);
|
||||||
if (size(me.lines) > me.maxlines) {
|
if (size(me.lines) > me.maxlines) {
|
||||||
me.lines = subvec(me.lines, 1);
|
me.lines = subvec(me.lines, 1);
|
||||||
if (me.autoscroll) {
|
if (me.autoscroll)
|
||||||
me.skiptimer += 1;
|
me.skiptimer += 1;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (me.autoscroll) {
|
if (me.autoscroll)
|
||||||
settimer(func { me._timeout_() }, me.autoscroll, 1);
|
settimer(func { me._timeout_() }, me.autoscroll, 1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
me.show();
|
me.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
show : func {
|
show : func {
|
||||||
if (me.dialog != nil) {
|
if (me.dialog != nil)
|
||||||
me.close();
|
me.close();
|
||||||
}
|
|
||||||
|
|
||||||
me.dialog = gui.Widget.new();
|
me.dialog = gui.Widget.new();
|
||||||
me.dialog.set("name", me.name);
|
me.dialog.set("name", me.name);
|
||||||
if (me.x != nil) { me.dialog.set("x", me.x) }
|
if (me.x != nil)
|
||||||
if (me.y != nil) { me.dialog.set("y", me.y) }
|
me.dialog.set("x", me.x);
|
||||||
|
if (me.y != nil)
|
||||||
|
me.dialog.set("y", me.y);
|
||||||
me.dialog.set("layout", "vbox");
|
me.dialog.set("layout", "vbox");
|
||||||
me.dialog.set("default-padding", 2);
|
me.dialog.set("default-padding", 2);
|
||||||
if (me.font != nil) {
|
if (me.font != nil)
|
||||||
me.dialog.setFont(me.font);
|
me.dialog.setFont(me.font);
|
||||||
} elsif (theme_font != nil) {
|
elsif (theme_font != nil)
|
||||||
me.dialog.setFont(theme_font);
|
me.dialog.setFont(theme_font);
|
||||||
}
|
|
||||||
me.dialog.setColor(me.bg[0], me.bg[1], me.bg[2], me.bg[3]);
|
me.dialog.setColor(me.bg[0], me.bg[1], me.bg[2], me.bg[3]);
|
||||||
|
|
||||||
foreach (var line; me.lines) {
|
foreach (var line; me.lines) {
|
||||||
|
@ -190,16 +193,6 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
setlistener(b ~ "yellow", func { log.write(cmdarg().getValue(), 0.8, 0.8, 0) });
|
setlistener(b ~ "yellow", func { log.write(cmdarg().getValue(), 0.8, 0.8, 0) });
|
||||||
setlistener(b ~ "magenta", func { log.write(cmdarg().getValue(), 0.7, 0, 0.7) });
|
setlistener(b ~ "magenta", func { log.write(cmdarg().getValue(), 0.7, 0, 0.7) });
|
||||||
setlistener(b ~ "cyan", func { log.write(cmdarg().getValue(), 0, 0.6, 0.6) });
|
setlistener(b ~ "cyan", func { log.write(cmdarg().getValue(), 0, 0.6, 0.6) });
|
||||||
|
|
||||||
settimer(func {
|
|
||||||
setlistener("/sim/atc/runway", func {
|
|
||||||
var rwy = cmdarg().getValue();
|
|
||||||
if (rwy == nil)
|
|
||||||
return;
|
|
||||||
if (!(getprop("/sim/presets/airport-id") == "KSFO" and rwy == "28R"))
|
|
||||||
setprop("/sim/messages/atc", "You are on runway " ~ rwy ~ ".");
|
|
||||||
}, 1);
|
|
||||||
}, 5);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,17 +207,17 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
var msg_repeat = func {
|
var msg_repeat = func {
|
||||||
if (getprop("/sim/tutorials/running")) {
|
if (getprop("/sim/tutorials/running")) {
|
||||||
var last = getprop("/sim/tutorials/last-message");
|
var last = getprop("/sim/tutorials/last-message");
|
||||||
if (last == nil) {
|
if (last == nil)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
setprop("/sim/messages/pilot", "Say again ...");
|
setprop("/sim/messages/pilot", "Say again ...");
|
||||||
settimer(func { setprop("/sim/messages/copilot", last) }, 1.5);
|
settimer(func { setprop("/sim/messages/copilot", last) }, 1.5);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var last = atc.getValue();
|
var last = atc.getValue();
|
||||||
if (last == nil) {
|
if (last == nil)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
setprop("/sim/messages/pilot", "This is " ~ callsign.getValue() ~ ". Say again, over.");
|
setprop("/sim/messages/pilot", "This is " ~ callsign.getValue() ~ ". Say again, over.");
|
||||||
settimer(func {
|
settimer(func {
|
||||||
atc.setValue(atclast.getValue());
|
atc.setValue(atclast.getValue());
|
||||||
|
@ -241,15 +234,28 @@ var listener = {};
|
||||||
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
_setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
# set /sim/screen/nomap=true to prevent default message mapping
|
# set /sim/screen/nomap=true to prevent default message mapping
|
||||||
var nomap = getprop("/sim/screen/nomap");
|
var nomap = getprop("/sim/screen/nomap");
|
||||||
if (nomap != nil and nomap) {
|
if (nomap != nil and nomap)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
callsign = props.globals.getNode("/sim/user/callsign", 1);
|
callsign = props.globals.getNode("/sim/user/callsign", 1);
|
||||||
atc = props.globals.getNode("/sim/messages/atc", 1);
|
atc = props.globals.getNode("/sim/messages/atc", 1);
|
||||||
atclast = props.globals.getNode("/sim/messages/atc-last", 1);
|
atclast = props.globals.getNode("/sim/messages/atc-last", 1);
|
||||||
atclast.setValue("");
|
atclast.setValue("");
|
||||||
|
|
||||||
|
# let ATC tell which runway was automatically chosen after startup/teleportation
|
||||||
|
settimer(func {
|
||||||
|
setlistener("/sim/atc/runway", func { # set in src/Main/fg_init.cxx
|
||||||
|
var rwy = cmdarg().getValue();
|
||||||
|
if (rwy == nil)
|
||||||
|
return;
|
||||||
|
if (getprop("/sim/presets/airport-id") == "KSFO" and rwy == "28R")
|
||||||
|
return;
|
||||||
|
if (getprop("/position/altitude-agl-ft") > 100)
|
||||||
|
return;
|
||||||
|
atc.setValue("You are on runway " ~ rwy);
|
||||||
|
}, 1);
|
||||||
|
}, 5);
|
||||||
|
|
||||||
# map ATC messages to the screen log and to the voice subsystem
|
# map ATC messages to the screen log and to the voice subsystem
|
||||||
var map = func(type, msg, r, g, b) {
|
var map = func(type, msg, r, g, b) {
|
||||||
setprop("/sim/sound/voices/" ~ type, msg);
|
setprop("/sim/sound/voices/" ~ type, msg);
|
||||||
|
|
Loading…
Add table
Reference in a new issue