94 lines
2.8 KiB
Text
94 lines
2.8 KiB
Text
var i = 0;
|
|
var spectator = 0;
|
|
var spectator_offset = 0.5;
|
|
var range = 3.0;
|
|
var offset = 0.0;
|
|
var apply_close = 0;
|
|
var master = 0;
|
|
var close = 0;
|
|
var initialised = 0;
|
|
|
|
var ls_spect = nil;
|
|
var ls_spctoffset = nil;
|
|
var ls_range = nil;
|
|
var ls_offset = nil;
|
|
var ls_close = nil;
|
|
|
|
# the compensatelag value are used like that by AIMultiplayer.cxx:
|
|
#
|
|
# 1 : old behaviour, trying to keep the plane without doing prediction
|
|
# 2 : predict the plane position in the futur
|
|
# 3 : display more in the past to avoid predictions
|
|
|
|
var mpCheck = func() {
|
|
var mpname = getprop("/ai/models/multiplayer["~i~"]/callsign");
|
|
if (mpname != nil) {
|
|
if ((spectator) and (master)) {
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/compensate-lag", 3);
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/player-lag", -spectator_offset);
|
|
} else {
|
|
if ((apply_close) and (master)) {
|
|
var self = geo.aircraft_position();
|
|
var x = getprop("/ai/models/multiplayer["~i~"]/position/global-x");
|
|
var y = getprop("/ai/models/multiplayer["~i~"]/position/global-y");
|
|
var z = getprop("/ai/models/multiplayer["~i~"]/position/global-z");
|
|
var ac = geo.Coord.new().set_xyz(x, y, z);
|
|
var distance = self.distance_to(ac)*M2NM;
|
|
if ((distance > range)or(distance==nil)) {
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/compensate-lag", 1);
|
|
} else {
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/compensate-lag", 2);
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/player-lag", offset);
|
|
}
|
|
} else {
|
|
setprop("/ai/models/multiplayer["~i~"]/controls/compensate-lag", 1);
|
|
}
|
|
}
|
|
i += 1;
|
|
} else {
|
|
i = 0;
|
|
if (close) close = 0;
|
|
}
|
|
if ((master) or (close)) {
|
|
settimer(mpCheck, 1);
|
|
}
|
|
}
|
|
|
|
var mpInit = func() {
|
|
if (!initialised) {
|
|
print("initialising the mp lag system");
|
|
initialised = 1;
|
|
ls_spect = setlistener("/sim/multiplay/lag/spectator",func { spectator = getprop("/sim/multiplay/lag/spectator")}, 1);
|
|
ls_spctoffset = setlistener("/sim/multiplay/lag/spectator-offset",func { spectator_offset = getprop("/sim/multiplay/lag/spectator-offset")}, 1);
|
|
ls_range = setlistener("/sim/multiplay/lag/range",func { range = getprop("/sim/multiplay/lag/range")}, 1);
|
|
ls_offset = setlistener("/sim/multiplay/lag/offset",func { offset = getprop("/sim/multiplay/lag/offset")}, 1);
|
|
ls_close = setlistener("/sim/multiplay/lag/apply-close", func { apply_close = getprop("/sim/multiplay/lag/apply-close")}, 1);
|
|
}
|
|
}
|
|
|
|
var mpClean = func() {
|
|
close = 1;
|
|
master = 0;
|
|
}
|
|
|
|
var mpStart = func() {
|
|
var test = getprop("/sim/multiplay/lag/master");
|
|
if (test == nil) {
|
|
settimer(mpStart, 2);
|
|
} else {
|
|
setlistener("/sim/multiplay/lag/master", masterSwitch,1);
|
|
}
|
|
}
|
|
|
|
var masterSwitch = func() {
|
|
master = getprop("/sim/multiplay/lag/master");
|
|
if (master) {
|
|
mpInit();
|
|
mpCheck();
|
|
} else {
|
|
mpClean();
|
|
}
|
|
}
|
|
|
|
|
|
_setlistener("/sim/signals/nasal-dir-initialized", mpStart);
|