Hyle

Drop and Bounce

Applies a transform effect to make Y position drop and bounce.

Expression inspired by this article motionscript.com/articles/bounce-and-overshoot.html#kf-bounce-back.

effects:
  - type: transform
    properties:
      anchor point: [0, 0]
      position:
        keyframes:
          - time: 0
            value: [0, -300]
          - time: .4
            value: [0, 0]
        expression: |
          e = .7;
          g = 4000;
          nMax = 9;
           
          n = 0;
          if (numKeys > 0){
            n = nearestKey(time).index;
            if (key(n).time > time) n--;
          }
          if (n > 0){
            t = time - key(n).time;
            v = -velocityAtTime(key(n).time - .001)*e;
            vl = length(v);
            if (value instanceof Array){
              vu = (vl > 0) ? normalize(v) : [0,0,0];
            }else{
              vu = (v < 0) ? -1 : 1;
            }
            tCur = 0;
            segDur = 2*vl/g;
            tNext = segDur;
            nb = 1; // number of bounces
            while (tNext < t && nb <= nMax){
              vl *= e;
              segDur *= e;
              tCur = tNext;
              tNext += segDur;
              nb++
            }
            if(nb <= nMax){
              delta = t - tCur;
              value +  vu*delta*(vl - g*delta/2);
            }else{
              value
            }
          }else
            value