Library globals

Source canvas . MapDrivers.nas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
var RouteDriver = {
    new: func(){
        var m = {
            parents: [RouteDriver],
        };
        m.init();
        return m;
    },
    init: func(){
        me.update();
    },
    update: func(){
        me.flightplan = flightplan();
    },
    getNumberOfFlightPlans: func(){1},
    getFlightPlanType: func(fpNum){'current'},
    getFlightPlan: func(fpNum){me.flightplan},
    getPlanSize: func(fpNum){me.flightplan.getPlanSize()},
    getWP: func(fpNum, idx){me.flightplan.getWP(idx)},
    getPlanModeWP: func(plan_wp_idx){me.flightplan.getWP(plan_wp_idx)},
    hasDiscontinuity: func(fpNum, wptID){0},
    getListeners: func(){[]},
    shouldUpdate: func 1
};

var MultiRouteDriver = {
    parents: [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].getPlanSize();
        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')
    ]}
};