AAR - optimisations
Only scan list of tankers when model added/removed; as otherwise it is a 3to10ms hit each time invoked.
This commit is contained in:
parent
1a9f4eb0d4
commit
dbcc7f6aee
1 changed files with 42 additions and 25 deletions
|
@ -20,13 +20,24 @@ var refuelingN = nil;
|
||||||
var contactN = nil;
|
var contactN = nil;
|
||||||
var aimodelsN = nil;
|
var aimodelsN = nil;
|
||||||
var types = {};
|
var types = {};
|
||||||
|
var update_model_list = 0;
|
||||||
|
|
||||||
|
setlistener("/ai/models/model-added", func(v){
|
||||||
|
update_model_list = 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
setlistener("/ai/models/model-removed", func(v){
|
||||||
|
update_model_list = 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var tankers = [];
|
||||||
var update_loop = func {
|
var update_loop = func {
|
||||||
# check for contact with tanker aircraft
|
# check for contact with tanker aircraft
|
||||||
var tankers = [];
|
|
||||||
if (ai_enabled) {
|
if (ai_enabled) {
|
||||||
|
if (update_model_list) {
|
||||||
|
update_model_list=0;
|
||||||
|
tankers = [];
|
||||||
var ac = aimodelsN.getChildren("tanker");
|
var ac = aimodelsN.getChildren("tanker");
|
||||||
var mp = aimodelsN.getChildren("multiplayer");
|
var mp = aimodelsN.getChildren("multiplayer");
|
||||||
|
|
||||||
|
@ -35,8 +46,6 @@ var update_loop = func {
|
||||||
continue ;
|
continue ;
|
||||||
if (!a.getNode("tanker", 1).getValue())
|
if (!a.getNode("tanker", 1).getValue())
|
||||||
continue ;
|
continue ;
|
||||||
if (!a.getNode("refuel/contact", 1).getValue())
|
|
||||||
continue;
|
|
||||||
foreach (var t; a.getNode("refuel", 1).getChildren("type")) {
|
foreach (var t; a.getNode("refuel", 1).getChildren("type")) {
|
||||||
var type = t.getValue();
|
var type = t.getValue();
|
||||||
if (contains(types, type) and types[type])
|
if (contains(types, type) and types[type])
|
||||||
|
@ -44,20 +53,28 @@ var update_loop = func {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
var tankerNode = nil;
|
||||||
|
if (serviceable) {
|
||||||
|
foreach (var t; tankers) {
|
||||||
|
if (t.getNode("refuel/contact", 1).getValue()){
|
||||||
|
tankerNode = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var refueling = serviceable and size(tankers) > 0;
|
|
||||||
|
|
||||||
if (refuelingN.getNode("report-contact", 1).getValue()) {
|
if (refuelingN.getNode("report-contact", 1).getValue()) {
|
||||||
if (refueling and !contactN.getValue()) {
|
if (tankerNode != nil and !contactN.getValue()) {
|
||||||
setprop("/sim/messages/copilot", "Engage");
|
setprop("/sim/messages/copilot", "Engage");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!refueling and contactN.getValue()) {
|
if (!tankerNode != nil and contactN.getValue()) {
|
||||||
setprop("/sim/messages/copilot", "Disengage");
|
setprop("/sim/messages/copilot", "Disengage");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contactN.setBoolValue(refueling);
|
contactN.setBoolValue(tankerNode != nil);
|
||||||
|
|
||||||
if (fuel_freeze){
|
if (fuel_freeze){
|
||||||
return;
|
return;
|
||||||
|
@ -74,11 +91,11 @@ var update_loop = func {
|
||||||
|
|
||||||
|
|
||||||
# calculate fuel received
|
# calculate fuel received
|
||||||
if (refueling) {
|
if (tankerNode != nil) {
|
||||||
# Flow rate is the minimum of the tanker maxium rate
|
# Flow rate is the minimum of the tanker maxium rate
|
||||||
# and the aircraft maximum rate. Both are expressed
|
# and the aircraft maximum rate. Both are expressed
|
||||||
# in lbs/min
|
# in lbs/min
|
||||||
var fuel_rate = math.min(tankers[0].getNode("refuel/max-fuel-transfer-lbs-min", 1).getValue() or 6000,
|
var fuel_rate = math.min(tankerNode.getNode("refuel/max-fuel-transfer-lbs-min", 1).getValue() or 6000,
|
||||||
refuelingN.getNode("max-fuel-transfer-lbs-min", 1).getValue() or 6000);
|
refuelingN.getNode("max-fuel-transfer-lbs-min", 1).getValue() or 6000);
|
||||||
var received = UPDATE_PERIOD * fuel_rate / 60;
|
var received = UPDATE_PERIOD * fuel_rate / 60;
|
||||||
consumed -= received;
|
consumed -= received;
|
||||||
|
|
Loading…
Add table
Reference in a new issue