zkv1000 / Nasal / animate.nas /
Sébastien MARQUE commit initial
56c0030 7 years ago
1 contributor
406 lines | 13.92kb
# animate parts of the screen, popups, widgets, etc.
var update = {
    AI : func(roll,pitch){
        if (pitch > 80 ) {
            var pitch = 80;
        }
        elsif (pitch < -80) {
            var pitch = -80;
        }

        var RollR = -roll*D2R;

        var AP  = 57.5;
        var AN  = 27.5;
        var BP  = 37.5;
        var BN  = 40;

        var HLAPRN = math.sqrt(1/(math.pow(math.cos(RollR)/AP,2)+(math.pow(math.sin(RollR)/BN,2))));
        var HLANBN = math.sqrt(1/(math.pow(math.cos(RollR)/AN,2)+(math.pow(math.sin(RollR)/BN,2))));
        var HLAPBP = math.sqrt(1/(math.pow(math.cos(RollR)/AP,2)+(math.pow(math.sin(RollR)/BP,2))));
        var HLANBP = math.sqrt(1/(math.pow(math.cos(RollR)/AN,2)+(math.pow(math.sin(RollR)/BP,2))));

        var RAP = ((roll > -90) and (roll <= 90));
        var RAN = ((roll <= -90) or (roll > 90));
        var RBP = (roll >= 0);
        var RBN = (roll < 0);

        if ((pitch >= 0) and (RAP and RBN)) {
            var limit = HLAPRN;
        }
        elsif ((pitch >= 0) and (RAN and RBN)) {
            var limit = HLANBN;
        }
        elsif ((pitch >= 0)and (RAP and RBP)) {
            var limit = HLAPBP;
        }
        elsif ((pitch >= 0)and (RAN and RBP)) {
            var limit = HLANBP;
        }
        elsif ((pitch < 0) and (RAN and RBP)) {
            var limit = HLAPRN;
        }
        elsif ((pitch < 0) and (RAP and RBP)) {
            var limit = HLANBN;
        }
        elsif ((pitch < 0)and (RAN and RBN)) {
            var limit = HLAPBP;
        }
        elsif ((pitch < 0)and (RAP and RBN)) {
            var limit = HLANBP;
        }

        if (pitch > limit) {
            var Hpitch = limit;
        }
        elsif (-pitch > limit) {
            var Hpitch = -limit;
        }
        else {
            var Hpitch = pitch;
        }

        me.Horizon.rot.setRotation(RollR, me.PitchScale.getCenter());
        me.Horizon.trans.setTranslation(0,Hpitch*6.8571428);

        me.HorizonLine.rot.setRotation(RollR, me.PitchScale.getCenter());
        me.HorizonLine.trans.setTranslation(0,pitch*6.8571428);
        me.PitchScale.rot.setRotation(RollR, me.PitchScale.getCenter());
        me.PitchScale.trans.setTranslation(0,pitch*6.8571428);

        var brot = me.bankPointer.getCenter();
        me.bankPointer.rot.setRotation(RollR,brot);
        me.bankPointerLineL.rot.setRotation(RollR,brot);
        me.bankPointerLineR.rot.setRotation(RollR,brot);

        if (RollR < 0) { #top, right, bottom, left
        
            me.bankPointerLineL.set("clip", "rect(0,1,1,0)"); #459,500
            me.bankPointerLineR.set("clip", "rect(0,459.500,768,0)");
        }
        elsif (RollR > 0) {
            me.bankPointerLineL.set("clip", "rect(0,1024,768,459.500)"); #459,500
            me.bankPointerLineR.set("clip", "rect(0,1,1,0)");
        }
        else {
            me.bankPointerLineL.set("clip", "rect(0,1024,768,459.500)"); #459,500
            me.bankPointerLineR.set("clip", "rect(0,459.500,768,0)");
        }
    },

    HDG : func(Heading) {
        HSB = Heading + -45;
        if (HSB >= 360) {
            HSB = HSB -360;
        }
        elsif (HSB < 0) {
            HSB = HSB + 360;
        }

        me.HSBug.setRotation(-HSB*D2R);
        me.Compass.setRotation(-Heading*D2R);
        
        if (Heading == 0) {
            #Heading = 360;
        }
        me.CompassText.setText(sprintf("%03.0f°",math.floor(Heading)));
    },

    SPD : func(speed)
    {
        if (speed != nil) {
            me.data.speed = speed;
            var Offset1 = 0;
            var Offset10 = 0;

            if (speed < 20) {
                var speed = 20;
                me.LindSpeed.set("clip", "rect(114px, 239px, 284,5px, 154px)");
            }
            elsif (speed >= 20 and  speed < 50) {
                me.LindSpeed.set("clip", sprintf("rect(114px, 239px, %1.0fpx, 154px)", math.floor(284.5 + ((speed-20) * 5.71225) ) ) );
            }
            else {
                me.LindSpeed.set("clip", "rect(114px, 239px, 455px, 154px)");
            }

            if (speed > 20) {
                me.LindSpeed.setTranslation(0,speed*5.71225);
            }
            else {
                #me.SpeedNonLint.setText("---");
                me.LindSpeed.setTranslation(0,114,245);
            }

            var speed1      = math.mod(speed,10);
            var speed10     = int(math.mod(speed/10,10));
            var speed100    = int(math.mod(speed/100,10));
            var speed0_1    = speed1 - int(speed1);
            if (speed1 >= 9) {
                var speed10 += speed0_1;
            }

            if (speed1 >= 9 and speed10 >= 9) {
                var speed100 += speed0_1;
            }

            if (speed >= 10) {
                var Offset1 = 10;
            }

            if (speed >= 100) {
                var Offset10 = 10;
            }

            me.LindSpeed.setTranslation(0,speed*5.71225);
            me.SpeedtLint1.setTranslation(0,(speed1+Offset1)*36);
            me.SpeedtLint10.setTranslation(0,(speed10+Offset10)*36);
            me.SpeedtLint100.setTranslation(0,(speed100)*36);
        }
        else {
            me.LindSpeed.Element.set("clip", "rect(114px, 239px, 455px, 154px)");
        }
    },

    SpeedTrend: func(Speedtrent) {
        me.data.speedTrent;
    },
    
    SlipSkid: func(slipskid){
        me.SlipSkid.setTranslation(slipskid*5.73,0);
    },

    ALT : func(Alt) {

        if (Alt !=nil) {
            me.AltLint10.show();
            me.AltLint100.show();
            me.AltLint1000.show();
            me.AltLint10000.show();
            if (Alt> -1000 and Alt< 1000000) {
                var Offset10 = 0;
                var Offset100 = 0;
                var Offset1000 = 0;
                if (Alt< 0) {
                    var Ne = 1;
                    var Alt= -Alt
                }
                else {
                    var Ne = 0;
                }

                var Alt10       = math.mod(Alt,100);
                var Alt100      = int(math.mod(Alt/100,10));
                var Alt1000     = int(math.mod(Alt/1000,10));
                var Alt10000    = int(math.mod(Alt/10000,10));
                var Alt20       = math.mod(Alt10,20)/20;
                if (Alt10 >= 80) {
                    var Alt100 += Alt20
                }

                if (Alt10 >= 80 and Alt100 >= 9) {
                    var Alt1000 += Alt20
                }

                if (Alt10 >= 80 and Alt100 >= 9 and Alt1000 >= 9) {
                    var Alt10000 += Alt20
                }

                if (Alt> 100) {
                    var Offset10 = 100;
                }

                if (Alt> 1000) {
                    var Offset100 = 10;
                }

                if (Alt> 10000) {
                    var Offset1000 = 10;
                }

                if (!Ne) {
                    me.AltLint10.setTranslation(0,(Alt10+Offset10)*1.2498);
                    me.AltLint100.setTranslation(0,(Alt100+Offset100)*30);
                    me.AltLint1000.setTranslation(0,(Alt1000+Offset1000)*36);
                    me.AltLint10000.setTranslation(0,(Alt10000)*36);
                    me.LintAlt.setTranslation(0,(math.mod(Alt,100))*0.57375);
                    var altCentral = (int(Alt/100)*100);
                }
                else {
                    me.AltLint10.setTranslation(0,(Alt10+Offset10)*-1.2498);
                    me.AltLint100.setTranslation(0,(Alt100+Offset100)*-30);
                    me.AltLint1000.setTranslation(0,(Alt1000+Offset1000)*-36);
                    me.AltLint10000.setTranslation(0,(Alt10000)*-36);
                    me.LintAlt.setTranslation(0,(math.mod(Alt,100))*-0.57375);
                    var altCentral = -(int(Alt/100)*100);
                }

                me["AltBigC"].setText("");
                me["AltSmallC"].setText("");
                var placeInList = [1,2,3,4,5,6];
                foreach(var place; placeInList) {
                    var altUP = altCentral + (place*100);
                    var offset = -30.078;
                    if (altUP < 0) {
                        var altUP = -altUP;
                        var prefix = "-";
                        var offset += 15.039;
                    }
                    else {
                        var prefix = "";
                    }
                    if (altUP == 0) {
                        var AltBigUP    = "";
                        var AltSmallUP  = "0";
                    }
                    elsif (math.mod(altUP,500) == 0 and altUP != 0) {
                        var AltBigUP    = sprintf(prefix~"%1d", altUP);
                        var AltSmallUP  = "";
                    }
                    elsif (altUP < 1000 and (math.mod(altUP,500))) {
                        var AltBigUP    = "";
                        var AltSmallUP  = sprintf(prefix~"%1d", int(math.mod(altUP,1000)));
                        var offset = -30.078;
                    }
                    elsif ((altUP < 10000) and (altUP >= 1000) and (math.mod(altUP,500))) {
                        var AltBigUP    = sprintf(prefix~"%1d", int(altUP/1000));
                        var AltSmallUP  = sprintf("%1d", int(math.mod(altUP,1000)));
                        var offset += 15.039;
                    }
                    else {
                        var AltBigUP    = sprintf(prefix~"%1d", int(altUP/1000));
                        var mod = int(math.mod(altUP,1000));
                        var AltSmallUP  = sprintf("%1d", mod);
                        var offset += 30.078;
                    }

                    me["AltBigU"~place].setText(AltBigUP);
                    me["AltSmallU"~place].setText(AltSmallUP);
                    me["AltSmallU"~place].setTranslation(offset,0);
                    var altDOWN = altCentral - (place*100);
                    var offset = -30.078;
                    if (altDOWN < 0) {
                        var altDOWN = -altDOWN;
                        var prefix = "-";
                        var offset += 15.039;
                    }
                    else {
                        var prefix = "";
                    }
                    if (altDOWN == 0) {
                        var AltBigDOWN  = "";
                        var AltSmallDOWN    = "0";

                    }
                    elsif (math.mod(altDOWN,500) == 0 and altDOWN != 0) {
                        var AltBigDOWN  = sprintf(prefix~"%1d", altDOWN);
                        var AltSmallDOWN    = "";
                    }
                    elsif (altDOWN < 1000 and (math.mod(altDOWN,500))) {
                        var AltBigDOWN  = "";
                        var AltSmallDOWN    = sprintf(prefix~"%1d", int(math.mod(altDOWN,1000)));
                        var offset = -30.078;
                    }
                    elsif ((altDOWN < 10000) and (altDOWN >= 1000) and (math.mod(altDOWN,500))) {
                        var AltBigDOWN  = sprintf(prefix~"%1d", int(altDOWN/1000));
                        var AltSmallDOWN    = sprintf("%1d", int(math.mod(altDOWN,1000)));
                        var offset += 15.039;
                    }
                    else {
                        var AltBigDOWN  = sprintf(prefix~"%1d", int(altDOWN/1000));
                        var mod = int(math.mod(altDOWN,1000));
                        var AltSmallDOWN    = sprintf("%1d", mod);
                        var offset += 30.078;
                    }
                    me["AltBigD"~place].setText(AltBigDOWN);
                    me["AltSmallD"~place].setText(AltSmallDOWN);
                    me["AltSmallD"~place].setTranslation(offset,0);
                }
            }
            else {
                me.AltLint10.hide();
                me.AltLint100.hide();
                me.AltLint1000.hide();
                me.AltLint10000.hide();
            }

        }
    },

    VSI : func(VSI) {
        if (VSI != nil) {

            if (VSI > 4250) {
                var VSIOffset = -148.21875;
            }
            elsif (VSI < -4250) {
                var VSIOffset = 148.21875;
            }
            else {
                var VSIOffset = (-VSI)*0.034875;
            }

            if ((VSI < 100) and (VSI > -100)) {
                var VSIText = "";
            }
            elsif ((VSI < -10000) or (VSI > 10000)) {
                var VSIText = "----";
            }
            else {
                var VSIText = sprintf("%1d",int(VSI/50)*50);
            }
        }
        else {
            var VSIText = "";
            var VSIOffset = 0
        }
        #print (VSIText ~ " " ~ sprintf("%1.0f", VSI));
        me.VSIText.setText(VSIText);
        me.VSI.setTranslation(0,VSIOffset);
    },

    OMI : func(marker) {
        if (marker == 0) {
            me.Marker.hide();
        }
        if (marker == 1) { #OM 
            me.Marker.show();
            me.MarkerBG.setColorFill(0.603921569,0.843137255,0.847058824);
            me.MarkerText.setText('O');
        }
        elsif (marker == 2) { #MM
            me.Marker.show();
            me.MarkerBG.setColorFill(1,0.870588235,0.11372549);
            me.MarkerText.setText('M');
        }
        elsif (marker == 3) { #IM
            me.Marker.show();
            me.MarkerBG.setColorFill(1,1,1);
            me.MarkerText.setText('I');
        }
    },

    ILS: func(ils){
        if (ils != nil) {
            me.ILS.setTranslation(0,-(ils*86.984));
        }
        else {
            me.ILS.setTranslation(0,0);
        }
    },
};

var widgets = {
    SetMap: func(post)
    {
        if (post = 1) {
            #open map on the left
        }
        elsif (post = 2) {
            #open map on the right
        }
        elsif (post = 0) {
            #close map
        }
    },
};