98 lines
2.4 KiB
Plaintext
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();
|
|
},
|
|
}); |