122 lines
3.6 KiB
Text
122 lines
3.6 KiB
Text
# A3XX ND Canvas
|
|
# Joshua Davidson (Octal450)
|
|
# Based on work by artix
|
|
|
|
# Copyright (c) 2020 Josh Davidson (Octal450)
|
|
|
|
canvas.RouteDriver = {
|
|
new: func(){
|
|
var m = {
|
|
parents: [canvas.RouteDriver],
|
|
};
|
|
m.init();
|
|
return m;
|
|
},
|
|
init: func(){
|
|
me.update();
|
|
},
|
|
update: func(){
|
|
me.flightplan = flightplan();
|
|
},
|
|
getNumberOfFlightPlans: func(){1},
|
|
getFlightPlanType: func(fpNum){"active"},
|
|
getFlightPlan: func(fpNum){me.flightplan},
|
|
getPlanSize: func(fpNum){me.flightplan.getPlanSize()},
|
|
getWP: func(fpNum, idx){me.flightplan.getWP(idx)},
|
|
getListeners: func(){[]},
|
|
getPlanModeWP: func(plan_wp_idx){me.flightplan.getWP(plan_wp_idx)},
|
|
hasDiscontinuity: func(fpNum, wpt){0},
|
|
getHoldPattern: func(fpNum, wpt){nil},
|
|
getHoldPatterns: func(fpNum){[]},
|
|
shouldUpdate: func 1,
|
|
shouldDisplayWP: func(fpNum, idx) 1,
|
|
getCurrentWPIdx: func(fpNum) getprop("autopilot/route-manager/current-wp"),
|
|
getTimeConstraint: func (fpNum, wp_idx) {nil}
|
|
};
|
|
|
|
canvas.MultiRouteDriver = {
|
|
parents: [canvas.RouteDriver],
|
|
new: func(){
|
|
var m = {
|
|
parents: [MultiRouteDriver],
|
|
_flightplans: [],
|
|
currentFlightPlan: 0
|
|
};
|
|
m.init();
|
|
return m;
|
|
},
|
|
addFlightPlan: func(type, plan){
|
|
append(me._flightplans, {
|
|
type: type,
|
|
flightplan: plan
|
|
});
|
|
},
|
|
removeFlightPlanAtIndex: func(idx){
|
|
var sz = size(me._flightplans);
|
|
if(idx < sz){
|
|
if(sz == 1)
|
|
me._flightplans = [];
|
|
elsif(sz == 2 and idx == 0)
|
|
me._flightplans = [me._flightplans[1]];
|
|
elsif(sz == 2 and idx == 1)
|
|
pop(me._flightplans);
|
|
else {
|
|
var subv_l = subvec(me._flightplans, 0, idx);
|
|
var subv_r = subvec(me._flightplans, idx + 1);
|
|
me._flightplans = subv_l ~ subv_r;
|
|
}
|
|
}
|
|
me.triggerSignal("fp-added");
|
|
},
|
|
removeFlightPlanOfType: func(type){
|
|
var new_vec = [];
|
|
foreach(var fp; me._flightplans){
|
|
if(fp["type"] != type)
|
|
append(new_vec, fp);
|
|
}
|
|
me._flightplans = new_vec;
|
|
me.triggerSignal("fp-removed");
|
|
},
|
|
getNumberOfFlightPlans: func(){
|
|
size(me._flightplans);
|
|
},
|
|
getFlightPlanType: func(fpNum){
|
|
if(fpNum >= size(me._flightplans)) return nil;
|
|
var fp = me._flightplans[fpNum];
|
|
return fp.type;
|
|
},
|
|
getFlightPlan: func(fpNum){
|
|
if(fpNum >= size(me._flightplans)) return nil;
|
|
return me._flightplans[fpNum];
|
|
},
|
|
getPlanSize: func(fpNum){
|
|
if(fpNum >= size(me._flightplans)) return 0;
|
|
return me._flightplans[fpNum].getPlanSize();
|
|
},
|
|
getWP: func(fpNum, idx){
|
|
if(fpNum >= size(me._flightplans)) return nil;
|
|
var fp = me._flightplans[fpNum];
|
|
return fp.getWP(idx);
|
|
},
|
|
getPlanModeWP: func(idx){
|
|
if(me.currentFlightPlan >= size(me._flightplans)) return nil;
|
|
var fp = me._flightplans[me.currentFlightPlan];
|
|
return fp.getWP(idx);
|
|
},
|
|
triggerSignal: func(signal){
|
|
setprop(me.signalPath(signal));
|
|
},
|
|
signalPath: func(signal){
|
|
"autopilot/route-manager/signals/rd-"~ signal;
|
|
},
|
|
getListeners: func(){[
|
|
me.getSignal("fp-added"),
|
|
me.getSignal("fp-removed")
|
|
]},
|
|
getCurrentWPIdx: func(fpNum) {
|
|
var fp = me.getFlightPlan(fpNum);
|
|
var wp = fp.getWP();
|
|
if (wp == nil) return -1;
|
|
return wp.index;
|
|
}
|
|
};
|