159 lines
5.8 KiB
Plaintext
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); |