file -f -new; float $x; int $n; $n = 1; $xstart = 10; $zstart = 5; $guyno = 25; $row = 1; $rowsize = 5; $batsizex = 5; $batsizez = 5; if(($rowsize % $batsizez) != 0) { print("Cannot evenly split into batallions."); } for($i = 0; $i < $guyno; $i++) { $n = $i+1; cone -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360 -r 1 -hr 2 -d 3 -ut 0 -tol 0.01 -s 8 -nsp 1 -ch 1; $str = "Block" + $n; group -n ("Block" + $n); select -r $str; if(($n % $rowsize) == 1) { $row++; } setAttr ($str+".scaleX") 0.5; setAttr ($str+".scaleY") 0.5; setAttr ($str+".scaleZ") 0.5; setAttr ($str+".rotateX") -90; setAttr ($str+".rotateY") 90; setAttr ($str+".translateX") (3*$row+$xstart); setAttr ($str+".translateZ") (3*($n%$rowsize)-$zstart); addAttr -ln DirectionX -sn dx -at double -dv -1.0 -keyable true; addAttr -ln DirectionZ -sn dz -at double -dv 0.0 -keyable true; addAttr -ln Distance -sn dis -at double -dv 500 -keyable true; addAttr -ln Battleflag -sn ib -at double -min 0.0 -max 5.0 -dv 0.0 -keyable true; addAttr -ln Target -sn tg -dt "string" -keyable true; addAttr -ln Velocity -sn vl -at double -dv .1 -keyable true; addAttr -ln Velocitybase -sn vlb -at double -dv .1 -keyable true; //$n = $n+1; } $n = 1; $row = 1; for($i = 0; $i < $guyno; $i++) { $n = $i+1; cone -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360 -r 1 -hr 2 -d 3 -ut 0 -tol 0.01 -s 8 -nsp 1 -ch 1; $str = "Rock" + $n; group -n ("Rock" + $n); if(($n % $rowsize) == 1) { $row++; } select -r $str ; setAttr ($str+".scaleX") 0.5; setAttr ($str+".scaleY") 0.5; setAttr ($str+".scaleZ") 0.5; setAttr ($str+".rotateX") 90; setAttr ($str+".rotateY") 90; setAttr ($str+".translateX") ((1.5*$row)-$xstart); setAttr ($str+".translateZ") (-1*(5*($n%$rowsize)-$zstart)); addAttr -ln DirectionX -sn dx -at double -dv 1.0 -keyable true; addAttr -ln DirectionZ -sn dz -at double -dv 0.0 -keyable true; addAttr -ln Distance -sn dis -at double -dv 500 -keyable true; addAttr -ln Battleflag -sn ib -at double -min 0.0 -max 5.0 -dv 0.0 -keyable true; addAttr -ln Target -sn tg -dt "string" -keyable true; addAttr -ln Velocity -sn vl -at double -dv .1 -keyable true; addAttr -ln Velocitybase -sn vlb -at double -dv .1 -keyable true; //$n = $n+1; } //putenv "MAYA_SCRIPT_PATH" "C:\\mel\\"; //eval("source move.mel"); global proc moveb(string $block) { string $rocks[] = `ls "Rock*"`; int $i; if(getAttr($block+".ib") == 0) { for($i = 0; $i < size($rocks); $i++) { if(getAttr($rocks[$i] + ".ib") == 0) { //Gets the distance between the two guys in question float $dist; float $xvec = getAttr($block + ".translateX") - getAttr($rocks[$i] + ".translateX"); float $zvec = getAttr($block + ".translateZ") - getAttr($rocks[$i] + ".translateZ"); $dist = $xvec*$xvec+$zvec*$zvec; $dist = sqrt($dist); if($dist < 15) { if(($dist < getAttr($block + ".dis"))) { setAttr(($rocks[$i] + ".ib"), 1); setAttr(($block + ".ib"), 1); setAttr(($block + ".dis"), $dist); setAttr ($block + ".tg") -type "string" ($rocks[$i]); setAttr(($block + ".dx"), (-1*$xvec/$dist)); setAttr(($block + ".dz"), (-1*$zvec/$dist)); setAttr(($block + ".rotateY"), (atan2d(($xvec/$dist),($zvec/$dist)))); //FOR ROCKS setAttr(($rocks[$i] + ".dis"), $dist); setAttr(($rocks[$i] + ".dx"), ($xvec/$dist)); setAttr(($rocks[$i] + ".dz"), ($zvec/$dist)); setAttr(($rocks[$i] + ".rotateY"), (atan2d(($xvec/$dist),($zvec/$dist)))); } } } } } else { string $rockbat = (getAttr($block + ".tg")); float $dist; float $xvec = getAttr($block + ".translateX") - getAttr($rockbat + ".translateX"); float $zvec = getAttr($block + ".translateZ") - getAttr($rockbat + ".translateZ"); $dist = $xvec*$xvec+$zvec*$zvec; $dist = sqrt($dist); $dist = 1.0/$dist; setAttr(($block + ".vl"), (getAttr($block + ".vlb")-(getAttr($block + ".vlb")*$dist))); setAttr(($rockbat + ".vl"), (getAttr($rockbat + ".vlb")-(getAttr($rockbat + ".vlb")*$dist))); } if(getAttr($block + ".vl") > 0.001) { setAttr(($block + ".translateX"), (getAttr($block + ".translateX") + getAttr($block + ".vl")*getAttr($block + ".dx"))); setAttr(($block + ".translateZ"), (getAttr($block + ".translateZ") + getAttr($block + ".vl")*getAttr($block + ".dz"))); } else { float $live = rand(0,1); string $rockbat = (getAttr($block + ".tg")); if($live < .5) { setAttr(($block + ".ib"), 0); setAttr(($block + ".vl"), getAttr($rockbat + ".vlb")); setAttr(($block + ".dx"), -1); setAttr(($block + ".dz"), 0); setAttr(($block + ".rotateY"), (atan2d(1,0))); setAttr(($rockbat + ".visibility"), off); rename $rockbat ("Taco" + $rockbat); } else { setAttr(($rockbat + ".ib"), 0); setAttr(($rockbat + ".vl"), getAttr($rockbat + ".vlb")); setAttr(($rockbat + ".dx"), 1); setAttr(($rockbat + ".dz"), 0); setAttr(($rockbat + ".rotateY"), (atan2d(1,0))); setAttr(($block + ".visibility"), off); rename $block ("Taco" + $block); } } } global proc mover(string $rock) { setAttr(($rock + ".translateX"), (getAttr($rock + ".translateX") + getAttr($rock + ".vl")*getAttr($rock + ".dx"))); setAttr(($rock + ".translateZ"), (getAttr($rock + ".translateZ") + getAttr($rock + ".vl")*getAttr($rock + ".dz"))); } // this is the code that goes in the scriptNode $expString = "string $blocks[] = `ls \"Block*\"`;\n"; $expString += "for($i=0;$i