Use local Nasal vars. Run ATC chatter handler when feature enabled only.
This commit is contained in:
parent
2f00f31935
commit
ec43493e91
2 changed files with 70 additions and 42 deletions
|
@ -11,24 +11,25 @@
|
||||||
# Global shared variables
|
# Global shared variables
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
fg_root = "";
|
var fg_root = nil;
|
||||||
chatter = "UK";
|
var chatter = "UK";
|
||||||
chatter_dir = "";
|
var chatter_dir = "";
|
||||||
|
|
||||||
chatter_min_interval = 20.0;
|
var chatter_min_interval = 20.0;
|
||||||
chatter_max_interval = 40.0;
|
var chatter_max_interval = 40.0;
|
||||||
|
var next_interval = nil;
|
||||||
|
|
||||||
chatter_index = 0;
|
var chatter_index = 0;
|
||||||
chatter_size = 0;
|
var chatter_size = 0;
|
||||||
chatter_list = 0;
|
var chatter_list = 0;
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Use tha nasal timer to call the initialization function once the sim is
|
# Chatter is initialized only when actually enabled. See listener connected
|
||||||
# up and running
|
# to /sim/sound/chatter/enabled.
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
CHATTER_INIT = func {
|
var chatter_init = func {
|
||||||
# default values
|
# default values
|
||||||
fg_root = getprop("/sim/fg-root");
|
fg_root = getprop("/sim/fg-root");
|
||||||
chatter_dir = sprintf("%s/ATC/Chatter/%s", fg_root, chatter);
|
chatter_dir = sprintf("%s/ATC/Chatter/%s", fg_root, chatter);
|
||||||
|
@ -39,14 +40,13 @@ CHATTER_INIT = func {
|
||||||
srand();
|
srand();
|
||||||
chatter_index = int( chatter_size * rand() );
|
chatter_index = int( chatter_size * rand() );
|
||||||
}
|
}
|
||||||
settimer(CHATTER_INIT, 0);
|
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# main update function to be called each frame
|
# main update function to be called each frame
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
chatter_update = func {
|
var chatter_update = func {
|
||||||
if ( chatter_index >= chatter_size ) {
|
if ( chatter_index >= chatter_size ) {
|
||||||
chatter_index = 0;
|
chatter_index = 0;
|
||||||
}
|
}
|
||||||
|
@ -73,15 +73,43 @@ chatter_update = func {
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Use tha nasal timer to update every 10 seconds
|
# Use the nasal timer to update every 10 seconds
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
nextChatter = func {
|
var nextChatter = func {
|
||||||
|
if (!getprop("/sim/sound/chatter/enabled"))
|
||||||
|
{
|
||||||
|
next_interval = nil;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# schedule next message in next min-max interval seconds so we have a bit
|
# schedule next message in next min-max interval seconds so we have a bit
|
||||||
# of a random pacing
|
# of a random pacing
|
||||||
next_interval = chatter_min_interval
|
next_interval = chatter_min_interval
|
||||||
+ int(rand() * (chatter_max_interval - chatter_min_interval));
|
+ int(rand() * (chatter_max_interval - chatter_min_interval));
|
||||||
|
|
||||||
# printlog("info", "next chatter in ", next_interval, " seconds");
|
# printlog("info", "next chatter in ", next_interval, " seconds");
|
||||||
|
|
||||||
settimer(chatter_update, next_interval );
|
settimer(chatter_update, next_interval );
|
||||||
}
|
}
|
||||||
nextChatter();
|
|
||||||
|
#############################################################################
|
||||||
|
# Start chatter processing. Also connected to chatter/enabled property as a
|
||||||
|
# listener.
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
var startChatter = func {
|
||||||
|
if ( getprop("/sim/sound/chatter/enabled") ) {
|
||||||
|
if (fg_root == nil)
|
||||||
|
chatter_init();
|
||||||
|
if (next_interval == nil)
|
||||||
|
nextChatter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# connect listener
|
||||||
|
setlistener("/sim/sound/chatter/enabled", startChatter);
|
||||||
|
|
||||||
|
# start chatter immediately, if enable is already set.
|
||||||
|
settimer(startChatter, 0);
|
||||||
|
|
||||||
|
|
|
@ -48,13 +48,13 @@
|
||||||
# </animation>
|
# </animation>
|
||||||
#
|
#
|
||||||
|
|
||||||
dialog = nil;
|
var dialog = nil;
|
||||||
|
|
||||||
colorgroup = func {
|
var colorgroup = func {
|
||||||
parent = arg[0]; # pui parent
|
var parent = arg[0]; # pui parent
|
||||||
name = arg[1]; # "diffuse"
|
var name = arg[1]; # "diffuse"
|
||||||
base = arg[2];
|
var base = arg[2];
|
||||||
undef = func { props.globals.getNode(base ~ name ~ "/" ~ arg[0]) == nil };
|
var undef = func { props.globals.getNode(base ~ name ~ "/" ~ arg[0]) == nil };
|
||||||
|
|
||||||
if (undef("red") and undef("green") and undef("blue")) {
|
if (undef("red") and undef("green") and undef("blue")) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -64,11 +64,11 @@ colorgroup = func {
|
||||||
parent.addChild("hrule").setColor(1, 1, 1, 0.5);
|
parent.addChild("hrule").setColor(1, 1, 1, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
grp = parent.addChild("group");
|
var grp = parent.addChild("group");
|
||||||
grp.set("layout", "vbox");
|
grp.set("layout", "vbox");
|
||||||
grp.addChild("text").set("label", name);
|
grp.addChild("text").set("label", name);
|
||||||
|
|
||||||
foreach (color; ["red", "green", "blue", "factor"]) {
|
foreach (var color; ["red", "green", "blue", "factor"]) {
|
||||||
mat(parent, color, base ~ name ~ "/" ~ color, "%.3f");
|
mat(parent, color, base ~ name ~ "/" ~ color, "%.3f");
|
||||||
}
|
}
|
||||||
mat(parent, "offset", base ~ name ~ "/" ~ "offset", "%.3f", -1.0, 1.0);
|
mat(parent, "offset", base ~ name ~ "/" ~ "offset", "%.3f", -1.0, 1.0);
|
||||||
|
@ -76,19 +76,19 @@ colorgroup = func {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mat = func {
|
var mat = func {
|
||||||
parent = arg[0];
|
var parent = arg[0];
|
||||||
name = arg[1];
|
var name = arg[1];
|
||||||
path = arg[2];
|
var path = arg[2];
|
||||||
format = arg[3];
|
var format = arg[3];
|
||||||
if (props.globals.getNode(path) != nil) {
|
if (props.globals.getNode(path) != nil) {
|
||||||
grp = parent.addChild("group");
|
var grp = parent.addChild("group");
|
||||||
grp.set("layout", "hbox");
|
grp.set("layout", "hbox");
|
||||||
|
|
||||||
grp.addChild("empty").set("stretch", 1);
|
grp.addChild("empty").set("stretch", 1);
|
||||||
grp.addChild("text").set("label", name);
|
grp.addChild("text").set("label", name);
|
||||||
|
|
||||||
slider = grp.addChild("slider");
|
var slider = grp.addChild("slider");
|
||||||
slider.set("property", path);
|
slider.set("property", path);
|
||||||
slider.set("live", 1);
|
slider.set("live", 1);
|
||||||
if (size(arg) == 6) {
|
if (size(arg) == 6) {
|
||||||
|
@ -97,7 +97,7 @@ mat = func {
|
||||||
}
|
}
|
||||||
slider.setBinding("dialog-apply");
|
slider.setBinding("dialog-apply");
|
||||||
|
|
||||||
number = grp.addChild("text");
|
var number = grp.addChild("text");
|
||||||
number.set("label", "-0.123");
|
number.set("label", "-0.123");
|
||||||
number.set("format", format);
|
number.set("format", format);
|
||||||
number.set("property", path);
|
number.set("property", path);
|
||||||
|
@ -107,13 +107,13 @@ mat = func {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
showDialog = func {
|
var showDialog = func {
|
||||||
base = arg[0];
|
var base = arg[0];
|
||||||
while (size(base) and substr(base, size(base) - 1, 1) == "/") {
|
while (size(base) and substr(base, size(base) - 1, 1) == "/") {
|
||||||
base = substr(base, 0, size(base) - 1);
|
base = substr(base, 0, size(base) - 1);
|
||||||
}
|
}
|
||||||
parentdir = "";
|
var parentdir = "";
|
||||||
b = base;
|
var b = base;
|
||||||
while (size(b)) {
|
while (size(b)) {
|
||||||
c = substr(b, size(b) - 1, 1);
|
c = substr(b, size(b) - 1, 1);
|
||||||
if (c == "/") { break }
|
if (c == "/") { break }
|
||||||
|
@ -121,8 +121,8 @@ showDialog = func {
|
||||||
parentdir = c ~ parentdir;
|
parentdir = c ~ parentdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
title = if (size(arg) > 1 and arg[1] != nil) { arg[1] } else { parentdir };
|
var title = if (size(arg) > 1 and arg[1] != nil) { arg[1] } else { parentdir };
|
||||||
name = "material-" ~ parentdir;
|
var name = "material-" ~ parentdir;
|
||||||
base = base ~ "/";
|
base = base ~ "/";
|
||||||
|
|
||||||
dialog = gui.Widget.new();
|
dialog = gui.Widget.new();
|
||||||
|
@ -131,9 +131,9 @@ showDialog = func {
|
||||||
if (size(arg) > 3 and arg[3] != nil) { dialog.set("y", arg[3]) }
|
if (size(arg) > 3 and arg[3] != nil) { dialog.set("y", arg[3]) }
|
||||||
dialog.set("layout", "vbox");
|
dialog.set("layout", "vbox");
|
||||||
|
|
||||||
titlebar = dialog.addChild("group");
|
var titlebar = dialog.addChild("group");
|
||||||
titlebar.set("layout", "hbox");
|
titlebar.set("layout", "hbox");
|
||||||
w = titlebar.addChild("text");
|
var w = titlebar.addChild("text");
|
||||||
w.set("label", "object \"" ~ title ~ "\"");
|
w.set("label", "object \"" ~ title ~ "\"");
|
||||||
titlebar.addChild("empty").set("stretch", 1);
|
titlebar.addChild("empty").set("stretch", 1);
|
||||||
|
|
||||||
|
@ -146,13 +146,13 @@ showDialog = func {
|
||||||
w.set("border", 1);
|
w.set("border", 1);
|
||||||
w.setBinding("dialog-close");
|
w.setBinding("dialog-close");
|
||||||
|
|
||||||
h = 0;
|
var h = 0;
|
||||||
h += colorgroup(dialog, "diffuse", base, h);
|
h += colorgroup(dialog, "diffuse", base, h);
|
||||||
h += colorgroup(dialog, "ambient", base, h);
|
h += colorgroup(dialog, "ambient", base, h);
|
||||||
h += colorgroup(dialog, "emission", base, h);
|
h += colorgroup(dialog, "emission", base, h);
|
||||||
h += colorgroup(dialog, "specular", base, h);
|
h += colorgroup(dialog, "specular", base, h);
|
||||||
|
|
||||||
undef = func { props.globals.getNode(base ~ arg[0]) == nil };
|
var undef = func { props.globals.getNode(base ~ arg[0]) == nil };
|
||||||
if (!(undef("shininess") and undef("transparency/alpha") and undef("threshold"))) {
|
if (!(undef("shininess") and undef("transparency/alpha") and undef("threshold"))) {
|
||||||
if (h) {
|
if (h) {
|
||||||
dialog.addChild("hrule").setColor(1, 1, 1, 0.5);
|
dialog.addChild("hrule").setColor(1, 1, 1, 0.5);
|
||||||
|
|
Loading…
Add table
Reference in a new issue