- var dvyleft = sleft * rotor;
- var dvyright = sright * rotor;
- var dvxleft = cleft * rotor;
- var dvxright = cright * rotor;
-
- var dvx = (dvxleft - dvxright);
- var dvy = (dvyleft + dvyright) - GRAVITY;
-
- var leftarea = DRAG_MAX * Math.abs(sleft);
- var rightarea = DRAG_MAX * Math.abs(sright);
- var dragy = vy * vy * (leftarea + rightarea);
-
- leftarea = DRAG_MAX * Math.abs(cleft);
- rightarea = DRAG_MAX * Math.abs(cright);
- var dragx = vx * vx * (leftarea + rightarea);
-
- leftarea = LIFT_MAX * Math.abs(cleft);
- rightarea = LIFT_MAX * Math.abs(cright);
- var liftx = vy * vy * (rightarea - leftarea);
-
- leftarea = LIFT_MAX * Math.abs(sleft);
- rightarea = LIFT_MAX * Math.abs(sright);
- var lifty = vx * vx * (rightarea - leftarea);
-
- if (vy > 0) {
- dragy = -dragy;
- liftx = -liftx;
- }
- if (vx > 0) {
- dragx = -dragx;
- lifty = -lifty;
- }
-
- var ax = dvx + liftx + dragx;
- var ay = dvy + lifty + dragy;
+ var drag = this.up ? DRAG_OPEN : this.free ? DRAG_FREE : DRAG_LOCK;
+ ax += drag * Math.max(cleft, cright) * vx * vx * -Math.sign(vx);
+ ay += drag * (sleft + sright) * vy * vy * -Math.sign(vy);