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

98 lines
2.4 KiB
Plaintext

mission.extension_add("Handler", {
init: func {
me.timer = maketimer(0.02, func me._loop());
#me._margin = 5;
me._offset = 5;
var w = 200;
var h = 33;
var bg_color = [0.2, 0.4, 0.7, 0.9];
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]", me._scr_x() / 2 - w / 2);
me.window.set("tf/t[1]", me._scr_y() / 10);
me.window.set("visible", 0);
me.canvas = me.window.createCanvas();
me.canvas.setColorBackground(0,0,0,0);
me.MsgBox = me.canvas.createGroup();
var th = h - me._offset * 2;
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(line_color)
.setColorFill(bg_color)
.setStrokeLineWidth(2);
me.Text = me.MsgBox.createChild("text")
.setTranslation(w/2, h/2)
.setText("00:00:00.0")
.setAlignment("center-center")
.setFontSize(0.8 * th)
.setFont("LiberationFonts/LiberationSans-Bold.ttf")
.setColor(1,1,1);
me.elapsed_time = props.getNode("/sim/time/elapsed-sec");
me.show = func(s) {
var hours = s / 3600;
var minutes = int(math.mod(s / 60, 60));
var seconds = int(math.mod(s, 60));
var msec = int(math.mod(s * 1000, 1000) / 100);
var d = sprintf("%02d:%02d:%02d.%0d", hours, minutes, seconds, msec);
me.Text.setText(d);
}
me._loop = func me.show(__mission.timer.current_time); #(me.elapsed_time.getValue() - me.start_time);
me.listeners = [
setlistener(me.node.getNode("start-timer", 1), func me.start_timer()),
setlistener(me.node.getNode("stop-timer", 1), func me.stop_timer()),
];
me.start_timer = func {
if (!me.node.getValue("start-timer"))
return;
me.start_time = me.elapsed_time.getValue();
me.timer.start();
me.window.set("visible", 1);
me.node.setValue("start-timer", 0);
}
me.stop_timer = func {
if (!me.node.getValue("stop-timer"))
return;
me.timer.stop();
me.window.set("visible", 0);
me.node.setValue("stop-timer", 0);
}
#me.timer.start();
},
node: props.getNode("/sim/mission/timer", 1),
stop: func {
foreach(var l; me.listeners)
removelistener(l);
setsize(me.listeners, 0);
me.timer.stop();
me.node.remove();
me.window.del();
},
});