296 lines
No EOL
9 KiB
Text
296 lines
No EOL
9 KiB
Text
# Copyright (c) 2020 Matthew Maring (mattmaring)
|
|
|
|
var altSet = props.globals.getNode("it-autoflight/input/alt", 1);
|
|
var brgDistResult = nil;
|
|
|
|
var progGENInput = func(key, i) {
|
|
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
|
if (key == "R4") {
|
|
if (scratchpad == "CLR") {
|
|
bearingDistances[i].selectedPoint = nil;
|
|
bearingDistances[i].displayID = nil;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else {
|
|
brgDistResult = bearingDistances[i].newPoint(mcdu_scratchpad.scratchpads[i].scratchpad);
|
|
if (brgDistResult != 1) {
|
|
mcdu_message(i, "NOT IN DATA BASE");
|
|
} else {
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var progTOInput = func(key, i) {
|
|
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
|
if (key == "L1") {
|
|
if (scratchpad == "CLR") {
|
|
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else if (int(scratchpad) != nil) {
|
|
var crzs = size(scratchpad);
|
|
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100 and fmgc.FMGCInternal.crzSet) {
|
|
fmgc.FMGCInternal.crzProg = scratchpad;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
}
|
|
}
|
|
|
|
var progCLBInput = func(key, i) {
|
|
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
|
if (key == "L1") {
|
|
if (scratchpad == "CLR") {
|
|
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
|
if (fmgc.FMGCInternal.phase == 5) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else if (int(scratchpad) != nil) {
|
|
var crzs = size(scratchpad);
|
|
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
|
fmgc.FMGCInternal.crzProg = scratchpad;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
if (fmgc.FMGCInternal.phase == 5) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
}
|
|
}
|
|
|
|
var progCRZInput = func(key, i) {
|
|
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
|
if (key == "L1") {
|
|
if (scratchpad == "CLR") {
|
|
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
|
if (fmgc.FMGCInternal.phase == 5) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else if (int(scratchpad) != nil) {
|
|
var crzs = size(scratchpad);
|
|
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
|
fmgc.FMGCInternal.crzProg = scratchpad;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
if (fmgc.FMGCInternal.phase == 5) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
}
|
|
}
|
|
|
|
var progDESInput = func(key, i) {
|
|
var scratchpad = mcdu_scratchpad.scratchpads[i].scratchpad;
|
|
if (key == "L1") {
|
|
if (scratchpad == "CLR") {
|
|
fmgc.FMGCInternal.crzProg = fmgc.FMGCInternal.crzFl;
|
|
if (fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
} else if (int(scratchpad) != nil) {
|
|
var crzs = size(scratchpad);
|
|
if (crzs >= 1 and crzs <= 3 and scratchpad > 0 and scratchpad <= 430 and fmgc.FMGCInternal.crzSet <= scratchpad * 100) {
|
|
fmgc.FMGCInternal.crzProg = scratchpad;
|
|
mcdu_scratchpad.scratchpads[i].empty();
|
|
if (fmgc.FMGCInternal.phase == 4 or fmgc.FMGCInternal.phase == 5 or fmgc.FMGCInternal.phase == 6) {
|
|
fmgc.FMGCInternal.phase = 3;
|
|
fmgc.FMGCNodes.phase.setValue(3);
|
|
systems.PNEU.pressMode.setValue("CR");
|
|
setprop("/FMGC/internal/activate-once", 0);
|
|
setprop("/FMGC/internal/activate-twice", 0);
|
|
fmgc.FMGCInternal.decel = 0;
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
} else {
|
|
mcdu_message(i, "NOT ALLOWED");
|
|
}
|
|
}
|
|
}
|
|
|
|
var _result = [nil, nil];
|
|
var _courseAndDistance = [nil, nil];
|
|
var bearingDistanceInstance = {
|
|
new: func(id) {
|
|
var bd = {parents: [bearingDistanceInstance]};
|
|
bd.id = id;
|
|
bd.bearing = 360;
|
|
bd.distance = 0;
|
|
bd.selectedPoint = nil;
|
|
bd.displayID = nil;
|
|
return bd;
|
|
},
|
|
newPointResult: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
|
|
if (duplicateNames != 0) {
|
|
me.selectedPoint = result[duplicateNamesIndex];
|
|
me.displayID = result[duplicateNamesIndex].id;
|
|
} elsif (size(result) > 1) {
|
|
if (canvas_mcdu.myDuplicate[me.id] != nil) {
|
|
canvas_mcdu.myDuplicate[me.id].del();
|
|
}
|
|
canvas_mcdu.myDuplicate[me.id] = nil;
|
|
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 0, me.id, 0, -999, -999, 1);
|
|
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
|
|
} else {
|
|
me.selectedPoint = result[0];
|
|
me.displayID = result[0].id;
|
|
}
|
|
return 1;
|
|
},
|
|
newPointNavaid: func(result, duplicateNames = 0, duplicateNamesIndex = nil) {
|
|
if (duplicateNames != 0) {
|
|
me.selectedPoint = result[duplicateNamesIndex];
|
|
me.displayID = result[duplicateNamesIndex].id;
|
|
} elsif (size(result) > 1) {
|
|
if (canvas_mcdu.myDuplicate[me.id] != nil) {
|
|
canvas_mcdu.myDuplicate[me.id].del();
|
|
}
|
|
canvas_mcdu.myDuplicate[me.id] = nil;
|
|
canvas_mcdu.myDuplicate[me.id] = mcdu.duplicateNamesPage.new(result, 0, 1, me.id, 0, -999, -999, 1);
|
|
setprop("MCDU[" ~ me.id ~ "]/page", "DUPLICATENAMES");
|
|
} else {
|
|
me.selectedPoint = result[0];
|
|
me.displayID = result[0].id;
|
|
print("YES");
|
|
}
|
|
return 1;
|
|
},
|
|
newPointRWY: func(result,ID) {
|
|
if (size(result) > 1) {
|
|
#spawnPAGE
|
|
} else {
|
|
var string = split(left(ID,4),ID)[1];
|
|
if (find("C",string) != -1 or find("L",string) != -1 or find("R",string) != -1) {
|
|
if (size(string) == 2) {
|
|
string = "0" ~ string;
|
|
}
|
|
} else {
|
|
if (size(string) == 1) {
|
|
string = "0" ~ string;
|
|
}
|
|
}
|
|
|
|
if (contains(result[0].runways,string)) {
|
|
me.selectedPoint = {lat: result[0].runways[string].lat, lon: result[0].runways[string].lon};
|
|
me.displayID = left(ID,4) ~ string;
|
|
return 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
},
|
|
newPointLatLon: func(result) {
|
|
return 0;
|
|
},
|
|
newPoint: func(id) {
|
|
_result[me.id] = fmgc.WaypointDatabase.getWP(id);
|
|
if (_result[me.id] != nil) {
|
|
me.selectedPoint = _result[me.id];
|
|
me.displayID = _result[me.id].id;
|
|
return 1;
|
|
}
|
|
|
|
if (size(id) >= 2 and size(id) <= 3) {
|
|
_result[me.id] = findNavaidsByID(id);
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointNavaid(_result[me.id]);
|
|
} else {
|
|
_result[me.id] = findAirportsByICAO(id); # consider 3 letter ICAOs
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointResult(_result[me.id]);
|
|
}
|
|
}
|
|
return 0;
|
|
} elsif (size(id) == 4) {
|
|
_result[me.id] = findAirportsByICAO(id);
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointResult(_result[me.id]);
|
|
} else {
|
|
_result[me.id] = findFixesByID(id);
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointResult(_result[me.id]);
|
|
}
|
|
}
|
|
return 0;
|
|
} elsif (size(id) >= 5 and size(id) <= 7) {
|
|
_result[me.id] = findFixesByID(id);
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointResult(_result[me.id]);
|
|
} else {
|
|
_result[me.id] = findAirportsByICAO(left(id,4));
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointRWY(_result[me.id],id);
|
|
}
|
|
}
|
|
return 0;
|
|
} elsif (size(id) >= 12) {
|
|
_result[me.id] = fetchLatLon(id);
|
|
if (size(_result[me.id]) != 0) {
|
|
return me.newPointLatLon(_result[me.id]);
|
|
}
|
|
return 0;
|
|
}
|
|
return 0;
|
|
},
|
|
update: func() {
|
|
if (me.selectedPoint == nil) {
|
|
return;
|
|
}
|
|
if (find("PROG",canvas_mcdu.pageProp[me.id].getValue()) == -1) {
|
|
return;
|
|
}
|
|
_courseAndDistance[me.id] = courseAndDistance(me.selectedPoint);
|
|
me.bearing = _courseAndDistance[me.id][0];
|
|
me.distance = _courseAndDistance[me.id][1];
|
|
},
|
|
};
|
|
|
|
var bearingDistances = [bearingDistanceInstance.new(0),bearingDistanceInstance.new(1)];
|
|
|
|
var BDTimer = maketimer(2, func(){
|
|
bearingDistances[0].update();
|
|
bearingDistances[1].update();
|
|
});
|
|
BDTimer.start(); |