print("accel 2014/02/02 12:42am"); var verbose = 0; var reinitL = nil; var frameL = nil; var maxZ = 0; var frameCount = 0; var maxZPr = 0; var cancelPerFrame = func(checkIn = -1, doPrint = 0) { if (verbose) print("acc - cancel per frame. cIN, doP = " ~ checkIn ~ " / " ~ doPrint); if (frameL != nil) { removelistener(frameL); frameL = nil; } if (doPrint) { var accF = sprintf("%d",maxZ); gui.popupTip(accF, 1.8); if (getprop("/sim/replay/replay-state") == 0) print(accF ~ " fps/s"); maxZPr = maxZ; } maxZ = maxZPr = frameCount = 0; if (checkIn >= 0) settimer(check, checkIn); } var frame_listener_func = func() { frameCount += 1; if (frameCount == 1) { maxZ = maxZPr = 0; return; } var isMod = (math.mod(frameCount, 8) == 0); if ((verbose) and (isMod)) print("per mod frame maxZ = " ~ maxZ ~ " fc = " ~ frameCount); var Z = abs(getprop("/accelerations/pilot/z-accel-fps_sec")); if (Z > maxZ) maxZ = Z; if (!isMod) return; if (verbose) print("acc - past mod"); if ( (wowLState == 1) and (wowRState == 1) and (idleState == 1) and (Z < 33) ) { if (verbose) print("acc - landing"); cancelPerFrame(3, 1); return; } var agl = getprop("/position/gear-agl-ft"); if ((agl > 5) or (agl < -1)) { var checkIn = -1; if (agl > 5) checkIn = 0.1; if (verbose) print("canceling from agl > 5 etc."); cancelPerFrame(checkIn); } } var checkPerFrame = func() { if (verbose) print("acc - per-frame started"); if (frameL == nil) frameL = setlistener("/sim/signals/frame", frame_listener_func, 0, 1); } var check = func() { if (verbose) { var timeV = int(getprop("/sim/time/elapsed-sec")); if (verbose) print("acc check, time = " ~ timeV); } if (getprop("/sim/replay/replay-state") == 1) { cancelPerFrame(); return; } if ((wowRState + wowLState == 2) or (frameCount > 0)) return; var agl = getprop("/position/gear-agl-ft"); if ((agl <= 5)) { checkPerFrame(); return; } if (verbose) print("acc check - past returns"); var inverval = 0.1; if (agl < 100) interval = 0.02 * agl; else if (agl < 500) interval = 0.005 * agl + 2; else if (agl < 1000) interval = 0.006 * agl + 2; else interval = 8; settimer(check, interval); } var initFrameL = nil; var initFrameCnt = 0; var wowRL = nil; var wowLL = nil; var wowLState = 0; var wowRState = 0; var wowRLL = func(lval, rval) { if (verbose) print("wowRLL"); if (lval >= 0) wowLState = lval; else if (rval >= 0) wowRState = rval; # if (wowLState > 0) check(); } var doInitFrame = func { if (wowRL == nil) wowRL = setlistener("/gear/gear[1]/wow", func(nodeIN) { wowRLL(-1, nodeIN.getValue() ); }, 1, 0); if (wowLL == nil) wowLL = setlistener("/gear/gear[2]/wow", func(nodeIN) { wowRLL( nodeIN.getValue(), -1); }, 1, 0); # check(); } var crashL = nil; var idleL = nil; var doCrash = func { cancelPerFrame(); } var idleState = 0; var doIdle = func(nodeIN) { idleState = nodeIN.getValue(); } var aglKL = nil; var init = func { aState = 'unk'; initFrameCnt = 0; state = 0; checkPerFrame(); if (initFrameL == nil) initFrameL = setlistener("/sim/kwynn/frame-20", doInitFrame, 0, 0); if (crashL == nil) crashL = setlistener("/sim/crashed", doCrash, 1, 0); if (idleL == nil) idleL = setlistener("autopilot/autobrake/throttles-at-idle", doIdle, 1, 0); if (aglKL == nil) aglKL = setlistener("/sim/kwynn/agl-5", checkPerFrame, 0, 0); } if (reinitL == nil) reinitL = setlistener("/sim/signals/reinit", init, 1,1);