Car setup using MEL

I developped this Mel script for a realistic car setup that automates wheel rotation and damping.

CODE:


float $trax = wheel1.translateX;
float $traz = wheel1.translateZ;
float $tps = `currentTime-q` - 1;
float $getx = `getAttr -time $tps wheel1.tx`;
float $getz = `getAttr -time $tps wheel1.tz`;
float $derivx = $trax - $getx;
float $derivz = $traz - $getz;
float $pyt = sqrt(($derivx)*($derivx) + ($derivz)*($derivz));
float $wheelangle = acosd($derivx/$pyt);

if(rear_axl.reverse == 0){
if ($derivx <= 0 && $derivz > 0 || $derivx > 0 && $derivz > 0){
wheel1.rotateY = 90 - $wheelangle;
}else{
wheel1.rotateY = 90 + $wheelangle;
}
}else{
if(rear_axl.reverse == 1){
if ($derivx <= 0 && $derivz > 0 || $derivx > 0 && $derivz > 0){
wheel1.rotateY = -90 - $wheelangle;
}else{
wheel1.rotateY = -90 + $wheelangle;
}}}

if (rear_axl.reverse == 0){
wheel1.rotateX = wheel1.rotateX + $pyt*360/(2*3.1417*4);
}else{
if (rear_axl.reverse == 1){
wheel1.rotateX = wheel1.rotateX - $pyt*360/(2*3.1417*4);
}}

wheel1.rotateX = wheel1.rotateX;

////////////////////////////////////////////////////

float $trax2 = wheel2.translateX;
float $traz2 = wheel2.translateZ;
float $tps2 = `currentTime-q` - 1;
float $getx2 = `getAttr -time $tps2 wheel2.tx`;
float $getz2 = `getAttr -time $tps2 wheel2.tz`;
float $derivx2 = $trax2 - $getx2;
float $derivz2 = $traz2 - $getz2;
float $pyt2 = sqrt(($derivx2)*($derivx2) + ($derivz2)*($derivz2));
float $wheelangle2 = acosd($derivx2/$pyt2);

f(rear_axl.reverse == 0){
if ($derivx2 <= 0 && $derivz2 > 0 || $derivx2 > 0 && $derivz2 > 0){
wheel2.rotateY = 90 - $wheelangle;
}else{
wheel2.rotateY = 90 + $wheelangle;
}
}else{
if(rear_axl.reverse == 1){
if ($derivx2 <= 0 && $derivz2 > 0 || $derivx2 > 0 && $derivz2 > 0){
wheel2.rotateY = -90 - $wheelangle;
}else{
wheel2.rotateY = -90 + $wheelangle;
}}}

if (rear_axl.reverse == 0){
wheel2.rotateX = wheel2.rotateX + $pyt*360/(2*3.1417*4);
}else{
if (rear_axl.reverse == 1){
wheel2.rotateX = wheel2.rotateX - $pyt*360/(2*3.1417*4);
}}
wheel2.rotateX = wheel2.rotateX;

////////////////////////////////////////////////////

float $trax3 = wheel3.translateX;
float $traz3 = wheel3.translateZ;
float $tps3 = `currentTime-q` - 1;
float $getx3 = `getAttr -time $tps3 wheel3.tx`;
float $getz3 = `getAttr -time $tps3 wheel3.tz`;
float $derivx3 = $trax3 - $getx3;
float $derivz3 = $traz3 - $getz3;
float $pyt3 = sqrt(($derivx3)*($derivx3) + ($derivz3)*($derivz3));

wheel3.rotateY = rear_axl.rotateY+90;

if (rear_axl.reverse == 0){
wheel3.rotateX = wheel3.rotateX + $pyt3*360/(2*3.1417*4);
}else{
if (rear_axl.reverse == 1){
wheel3.rotateX = wheel3.rotateX - $pyt3*360/(2*3.1417*4);}}
wheel3.rotateX = wheel3.rotateX;

////////////////////////////////////////////////////

float $trax4 = wheel4.translateX;
float $traz4 = wheel4.translateZ;
float $tps4 = `currentTime-q` - 1;
float $getx4 = `getAttr -time $tps4 wheel4.tx`;
float $getz4 = `getAttr -time $tps4 wheel4.tz`;
float $derivx4 = $trax4 - $getx4;
float $derivz4 = $traz4 - $getz4;
float $pyt4 = sqrt(($derivx4)*($derivx4) + ($derivz4)*($derivz4));

wheel4.rotateY = rear_axl.rotateY+90;

if (rear_axl.reverse == 0){
wheel4.rotateX = wheel4.rotateX + $pyt4*360/(2*3.1417*4);
}else{
if (rear_axl.reverse == 1){
wheel4.rotateX = wheel4.rotateX - $pyt4*360/(2*3.1417*4);}}
wheel4.rotateX = wheel4.rotateX

loat $trax4 = wheel4.translateX;
float $traz4 = wheel4.translateZ;
float $tps4 = `currentTime-q` - 1;
float $getx4 = `getAttr -time $tps4 wheel4.tx`;
float $getz4 = `getAttr -time $tps4 wheel4.tz`;
float $derivx4 = $trax4 - $getx4;
float $derivz4 = $traz4 - $getz4;
float $pyt4 = sqrt(($derivx4)*($derivx4) + ($derivz4)*($derivz4));

wheel4.rotateY = rear_axl.rotateY+90;

if (rear_axl.reverse == 0){
wheel4.rotateX = wheel4.rotateX + $pyt4*360/(2*3.1417*4);
}else{
if (rear_axl.reverse == 1){
wheel4.rotateX = wheel4.rotateX - $pyt4*360/(2*3.1417*4);}}
wheel4.rotateX = wheel4.rotateX