MQ-9/Nasal/Radar.nas
2019-07-01 19:02:39 +02:00

159 lines
5.8 KiB
Plaintext

# =======================
# Multiplayer Quirks
# =======================
var RadarStandby = props.globals.getNode("instrumentation/radar/radar-standby");
MPjoin = func(n) {
#print(n.getValue(), " added");
setprop("instrumentation/radar",n.getValue(),"radar/y-shift",0);
setprop("instrumentation/radar",n.getValue(),"radar/x-shift",0);
setprop("instrumentation/radar",n.getValue(),"radar/rotation",0);
setprop("instrumentation/radar",n.getValue(),"radar/in-range",0);
setprop("instrumentation/radar",n.getValue(),"radar/h-offset",180);
setprop("instrumentation/radar",n.getValue(),"joined",1);
}
MPleave= func(n) {
#print(n.getValue(), " removed");
setprop("instrumentation/radar",n.getValue(),"radar/in-range",0);
setprop("instrumentation/radar",n.getValue(),"joined",0);
}
setprop("sim/multiplay/visibility-range-nm", 115);
#need to copy the properties so that we never try to access a non-existent property in XML
MPradarProperties = func {
var Estado = RadarStandby.getValue();
if ( Estado != 1 ) {
targetList = props.globals.getNode("ai/models/").getChildren("multiplayer");
foreach (d; props.globals.getNode("ai/models/").getChildren("aircraft")) {
append(targetList,d);
}
foreach (m; targetList) {
var string = "instrumentation/radar/ai/models/"~m.getName()~"["~m.getIndex()~"]/";
if (getprop(string,"joined")==1 or m.getName()=="aircraft") {
factor = getprop("instrumentation/radar/range-factor"); ## if (factor == nil) { factor=0.001888};
setprop(string,"radar/y-shift",m.getNode("radar/y-shift").getValue() * factor);
setprop(string,"radar/x-shift",m.getNode("radar/x-shift").getValue() * factor);
setprop(string,"radar/rotation",m.getNode("radar/rotation").getValue());
setprop(string,"radar/h-offset",m.getNode("radar/h-offset").getValue());
if (getprop("instrumentation/radar/selected")==2){
if (getprop(string~"radar/x-shift") < -0.04 or
getprop(string~"radar/x-shift") > 0.04) {
setprop(string,"radar/in-range",0);
} else {
setprop(string,"radar/in-range",m.getNode("radar/in-range").getValue());
}
} else {
setprop(string,"radar/in-range",m.getNode("radar/in-range").getValue());
}
}
}
# this is a good place to deal with the range scaling factors
if (getprop("instrumentation/radar/selected")==2) {
if (getprop("instrumentation/radar/range")==10) {
setprop("instrumentation/radar/range",20);
setprop("instrumentation/radar/range-factor",0.002);
}
elsif (getprop("instrumentation/radar/range")==20) {
setprop("instrumentation/radar/range-factor",0.003246);
}
else { #40
setprop("instrumentation/radar/range-factor",0.001623);
}
}
elsif(getprop("instrumentation/radar/selected")==3 or getprop("instrumentation/radar/selected")==4) {
if (getprop("instrumentation/radar/range")==40) {
setprop("instrumentation/radar/range",20);
setprop("instrumentation/radar/range-factor",0.001888);
}
elsif (getprop("instrumentation/radar/range")==20) {
setprop("instrumentation/radar/range-factor",0.001888);
}
else { #10
setprop("instrumentation/radar/range-factor",0.003776);
}
}
} # from Estado
settimer(MPradarProperties,1.0);
}
# ===================
# Boresight Detecting
# ===================
locking=0;
found=-1;
boreSightLock = func {
var Estado = RadarStandby.getValue();
if ( Estado != 1 ) {
if(getprop("instrumentation/radar/selected") == 1){
targetList= props.globals.getNode("ai/models/").getChildren("multiplayer");
foreach (d; props.globals.getNode("ai/models/").getChildren("aircraft")) {
append(targetList,d);
}
foreach (m; targetList) {
var string = "instrumentation/radar/ai/models/"~m.getName()~"["~m.getIndex()~"]";
var string1 = "ai/models/"~m.getName()~"["~m.getIndex()~"]";
if (getprop(string1~"radar/in-range")) {
hOffset = getprop(string1~"radar/h-offset");
vOffset = getprop(string1~"radar/v-offset");
#really should be a cone, but is a square pyramid to avoid trigonemetry
if(hOffset < 3 and hOffset > -3 and vOffset < 3 and vOffset > -3) {
if (locking == 11){
setprop(string~"radar/boreLock",2);
setprop("instrumentation/radar/lock",2);
# setprop("sim[0]/hud/current-color",1);
locking -= 1;
}
elsif (locking ==1 or locking ==3 or locking ==5 or locking ==7 or locking ==9 ) {
setprop("instrumentation/radar/lock",1);
setprop(string1~"radar/boreLock",1);
}
else {
setprop("instrumentation/radar/lock",0);
setprop(string~"radar/boreLock",1);
}
if (found != m.getIndex()) {
found=m.getIndex();
locking=0;
}
else {
locking += 1;
}
settimer(boreSightLock, 0.2);
return;
}
}
}
setprop(string~"radar/boreLock",0);
locking=0;
# setprop("sim[0]/hud/current-color",0);
} # from getprop
} # from Estado
locking=0;
# setprop("sim[0]/hud/current-color",0);
found =-1;
setprop("instrumentation/radar/lock",0);
settimer(boreSightLock, 0.2);
}
setlistener("ai/models/model-added", MPjoin);
setlistener("ai/models/model-removed", MPleave);
settimer(MPradarProperties,1.0);
settimer(boreSightLock, 1.0);