Files
flightgear-addon-missions/Nasal/extensions/message_handler.nas
Slawek Mikula 08a4fcb0ee - cleaning/moving data
- can be run as addon (mostly working)
2017-10-19 23:24:56 +02:00

97 lines
2.3 KiB
Plaintext

var play_sound = nil;
var show_message = nil;
mission.extension_add("Handler", {
init: func {
#me.DELAY = 4;
me.timer = maketimer(0, func me._hide_msg());
me.timer.singleShot = 1;
me._margin = 5;
me._offset = 5;
var w = 300;
var h = 400;
var bg_color = [0.1, 0.1, 0.1, 0.8];
var line_color = [1, 1, 1, 0.8];
me.window = canvas.Window.new([w,h]);
me._scr_x = func getprop("/sim/startup/xsize");
me._scr_y = func getprop("/sim/startup/ysize");
me.window.set("tf/t[0]", 0);
me.window.set("tf/t[1]", me._scr_y() / 2);
me.canvas = me.window.createCanvas();
me.canvas.setColorBackground(0,0,0,0);
me.MsgBox = me.canvas.createGroup();
var th = 30;
var x_left = me._offset;
var x_right = w - x_left;
var y_top = x_left;
var y_bottom = th + x_left;
me.MsgBox.createChild("path")
.moveTo(x_left, y_top)
.horizTo(x_right)
.vertTo(y_bottom)
.horizTo(x_left)
.close()
.setColor(bg_color)
.setColorFill(bg_color)
.setStrokeLineWidth(1);
me.Text = me.MsgBox.createChild("text")
.setTranslation(me._margin + me._offset, me._margin + me._offset)
.setText("Message box")
.setAlignment("left-top")
.setFontSize(14)
.setFont("LiberationFonts/LiberationSans-Bold.ttf")
.setMaxWidth(w - 2 * (me._margin + me._offset))
.setColor(1,1,1);
me.listeners = [
setlistener("/sim/mission/message/show-message", func me.show_message()),
];
me.show_message = func {
if (!getprop("/sim/mission/message/show-message"))
return;
me._update_msg_box(getprop("/sim/mission/message/current-message"));
me.window.set("visible", 1);
me.timer.restart(getprop("/sim/mission/message/message-delay"));
setprop("/sim/mission/message/show-message", 0);
};
me.timer.start();
me._update_msg_box = func (txt) {
#me.window.set("visible", 0);
var text_bb = me.Text.setText(txt).update().getBoundingBox();
var width = text_bb[2];
var height = text_bb[3];
me.MsgBox.set("path/coord[3]", height + me._offset + 2 * me._margin);
};
},
node: props.getNode("/sim/mission/message", 1),
_hide_msg: func {
me.window.set("visible", 0);
},
stop: func {
foreach(var l; me.listeners)
removelistener(l);
setsize(me.listeners, 0);
me.timer.stop();
me.node.remove();
me.window.del();
},
});