<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?action=history&amp;feed=atom&amp;title=Maya_Tetris</id>
	<title>Maya Tetris - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?action=history&amp;feed=atom&amp;title=Maya_Tetris"/>
	<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Maya_Tetris&amp;action=history"/>
	<updated>2026-04-29T18:15:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Maya_Tetris&amp;diff=167&amp;oldid=prev</id>
		<title>Bernie: /* wip */</title>
		<link rel="alternate" type="text/html" href="https://berniebernie.fr/mediawiki-1.37.1/index.php?title=Maya_Tetris&amp;diff=167&amp;oldid=prev"/>
		<updated>2016-09-08T13:14:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;wip&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==wip==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
proc string createText(string $string){&lt;br /&gt;
    //creates a text object and merges it into a single shape&lt;br /&gt;
    //returns object name&lt;br /&gt;
    &lt;br /&gt;
    $textGrp = `group -n $string -em`;&lt;br /&gt;
    string $textObj[] = `textCurves -t $string`;&lt;br /&gt;
    delete $textObj[1];&lt;br /&gt;
    string $subObjs[] = `listRelatives $textObj[0]`;&lt;br /&gt;
    makeIdentity -a 1 $subObjs;&lt;br /&gt;
    string $subShapes[] = `listRelatives $subObjs`;&lt;br /&gt;
    $subShapes = `listRelatives -s $subShapes`;&lt;br /&gt;
    parent -s -r $subShapes $textGrp;&lt;br /&gt;
    delete $textObj[0];&lt;br /&gt;
    return $textGrp;&lt;br /&gt;
}&lt;br /&gt;
proc string instanceCounter(int $digits){&lt;br /&gt;
    //creates an updatable text counter using a particle + instance system, requires createText()&lt;br /&gt;
    //returns particle system&lt;br /&gt;
    &lt;br /&gt;
    $numbers = {&amp;quot;-&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;,&amp;quot;3&amp;quot;,&amp;quot;4&amp;quot;,&amp;quot;5&amp;quot;,&amp;quot;6&amp;quot;,&amp;quot;7&amp;quot;,&amp;quot;8&amp;quot;,&amp;quot;9&amp;quot;};&lt;br /&gt;
    string $numberObj[]={};&lt;br /&gt;
    string $objlist = &amp;quot;&amp;quot;;&lt;br /&gt;
    $textGrp = `group -em -n &amp;quot;digits_and_particleSystem&amp;quot;`;&lt;br /&gt;
    setAttr($textGrp+&amp;quot;.visibility&amp;quot;) 0;&lt;br /&gt;
    for($n in $numbers){&lt;br /&gt;
        $object = createText($n);&lt;br /&gt;
        parent $object $textGrp;&lt;br /&gt;
        $objlist += &amp;quot; -object &amp;quot;+$object;&lt;br /&gt;
    }&lt;br /&gt;
    $pSystem = &amp;quot;particle&amp;quot;;&lt;br /&gt;
    for($i=0;$i&amp;lt;$digits;$i++){&lt;br /&gt;
        $pSystem += &amp;quot; -p &amp;quot;+$i+&amp;quot; 0 0&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    string $pobj[] = eval($pSystem);&lt;br /&gt;
    addAttr -ln &amp;quot;index&amp;quot;  -dt doubleArray $pobj[1];&lt;br /&gt;
    string $instancerEval = &amp;quot;particleInstancer -addObject &amp;quot;+$objlist+&amp;quot; -cycle None -cycleStep 1 -cycleStepUnits Frames -levelOfDetail Geometry -rotationUnits Degrees -rotationOrder XYZ -n digitscounter -position worldPosition -age age -objectIndex index -visibility index &amp;quot;+$pobj[1];&lt;br /&gt;
    string $particleInstanc = eval($instancerEval);&lt;br /&gt;
    parent $pobj[0] $textGrp;&lt;br /&gt;
    return $pobj[1];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
proc updateCounter(string $particleShape,int $number, int $numberOfDigits){&lt;br /&gt;
    //updates a counter created using instanceCounter()&lt;br /&gt;
    $strN = string($number);&lt;br /&gt;
    $strS = size($strN);&lt;br /&gt;
    for($j = 0;$j&amp;lt;$numberOfDigits;$j++){&lt;br /&gt;
            if($j&amp;lt;$strS){&lt;br /&gt;
                $n = substring($strN,$strS-$j,$strS-$j);&lt;br /&gt;
                particle -e -at &amp;quot;index&amp;quot; -id ($numberOfDigits-$j-1) -fv (float($n)+1) $particleShape;&lt;br /&gt;
            }else{&lt;br /&gt;
                particle -e -at &amp;quot;index&amp;quot; -id ($numberOfDigits-$j-1) -fv 0 $particleShape;                &lt;br /&gt;
            }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
proc setCubeColor(string $cube){&lt;br /&gt;
    // give a polygon cube random-ish colors on each face&lt;br /&gt;
    &lt;br /&gt;
    constructionHistory -tgl off;&lt;br /&gt;
    string $shapes[] = `listRelatives -s $cube`;&lt;br /&gt;
    setAttr($shapes[0]+&amp;quot;.displayColors&amp;quot;) 1;&lt;br /&gt;
    float $hue = rand(0,1);&lt;br /&gt;
    for($i=0;$i&amp;lt;6;$i++){&lt;br /&gt;
        float $hue2 = rand(-.07,.07);&lt;br /&gt;
        $hue = (abs($hue2 + $hue))%1;&lt;br /&gt;
        float $sat = rand(.6,.8);&lt;br /&gt;
        float $value = rand(.6,.8);&lt;br /&gt;
        float $color[] = `hsv_to_rgb &amp;lt;&amp;lt;$hue,$sat,$value&amp;gt;&amp;gt;`;&lt;br /&gt;
        polyColorPerVertex -nun -rgb $color[0] $color[1] $color[2] ($cube+&amp;quot;.f[&amp;quot;+$i+&amp;quot;]&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    constructionHistory -tgl on;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proc setupTetrisControls(){&lt;br /&gt;
    // set ups a bunch of objects that are parented in a way you can use the keyboard arrows (&amp;#039;pickwalk&amp;#039; function - eww) to travel through them&lt;br /&gt;
    // a scriptjob will alway select the center &amp;#039;neutral&amp;#039; object, like a joystick coming back to the center position&lt;br /&gt;
    // object names will be hardcoded because I code like a monkey&lt;br /&gt;
    &lt;br /&gt;
    if(`objExists &amp;quot;TetrisGroup&amp;quot;`) delete &amp;quot;TetrisGroup&amp;quot;;&lt;br /&gt;
    $nullGrp = `group -n &amp;quot;TetrisGroup&amp;quot; -em`;&lt;br /&gt;
    $top = `spaceLocator -n &amp;quot;topCtrl&amp;quot;`;&lt;br /&gt;
    setAttr($top[0]+&amp;quot;.visibility&amp;quot;,0);&lt;br /&gt;
    spaceLocator -n &amp;quot;leftCtrl&amp;quot;;&lt;br /&gt;
    spaceLocator -n &amp;quot;rightCtrl&amp;quot;;&lt;br /&gt;
    spaceLocator -n &amp;quot;neutralCtrl&amp;quot;;&lt;br /&gt;
    parent &amp;quot;leftCtrl&amp;quot; &amp;quot;topCtrl&amp;quot;;&lt;br /&gt;
    parent &amp;quot;neutralCtrl&amp;quot; &amp;quot;topCtrl&amp;quot;;&lt;br /&gt;
    parent &amp;quot;rightCtrl&amp;quot; &amp;quot;topCtrl&amp;quot;;&lt;br /&gt;
    rename &amp;quot;neutralCtrlShape&amp;quot; &amp;quot;bottomCtrl&amp;quot;;&lt;br /&gt;
    $testObject = `polyCylinder -n &amp;quot;TestObject&amp;quot;`;&lt;br /&gt;
    string $deleteCtrl = createText(&amp;quot;delete&amp;quot;);&lt;br /&gt;
    $nullDeleteGrp = `group -n &amp;quot;DeleteGroup&amp;quot; -em`;&lt;br /&gt;
    parent $nullDeleteGrp $nullGrp;&lt;br /&gt;
    parent $deleteCtrl $nullDeleteGrp;&lt;br /&gt;
    rename $deleteCtrl &amp;quot;deleteCtrl&amp;quot;;&lt;br /&gt;
    parent $top $nullGrp;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// global variables&lt;br /&gt;
&lt;br /&gt;
global int $jobCtrl;                  // id of the scriptjob that will always select the neutral control defined by setupTetrisControls() - launches the ctrls() function&lt;br /&gt;
global int $jobLoop;                  // id of the scriptjob that will launch the loop() function&lt;br /&gt;
&lt;br /&gt;
global float $startTime;&lt;br /&gt;
global float $previousSecond;&lt;br /&gt;
&lt;br /&gt;
$startTime = `timerX`;&lt;br /&gt;
$previousSecond = `timerX -startTime $startTime`;&lt;br /&gt;
&lt;br /&gt;
proc ctrls(){&lt;br /&gt;
    // fires on any object selection in the scene, if it finds one of our control objects is selected, selects neutral one&lt;br /&gt;
    // also kills scriptjobs if it finds &lt;br /&gt;
    &lt;br /&gt;
    global int $jobCtrl;&lt;br /&gt;
    global int $jobLoop;&lt;br /&gt;
    &lt;br /&gt;
    global float $startTime;&lt;br /&gt;
    global float $previousSecond;&lt;br /&gt;
    &lt;br /&gt;
    string $sel[] = `ls -sl`;&lt;br /&gt;
    select -r &amp;quot;neutralCtrl&amp;quot;;&lt;br /&gt;
    if($sel[0]==&amp;quot;deleteCtrl&amp;quot;){&lt;br /&gt;
        evalDeferred(&amp;quot;scriptJob -kill &amp;quot;+$jobCtrl+&amp;quot; -force&amp;quot;);&lt;br /&gt;
        scriptJob -kill $jobLoop -force;&lt;br /&gt;
        delete &amp;quot;TetrisGroup&amp;quot;;&lt;br /&gt;
        //delete &amp;quot;deleteCtrl&amp;quot;;&lt;br /&gt;
        //delete &amp;quot;TestObject&amp;quot;;&lt;br /&gt;
    }else{&lt;br /&gt;
        $c = $sel[0];&lt;br /&gt;
&lt;br /&gt;
        if($c==&amp;quot;topCtrl&amp;quot;){&lt;br /&gt;
            setAttr(&amp;quot;TestObject.rz&amp;quot;) ((getAttr(&amp;quot;TestObject.rz&amp;quot;)+90)%360);&lt;br /&gt;
        }&lt;br /&gt;
        if($c==&amp;quot;leftCtrl&amp;quot;){&lt;br /&gt;
            setAttr(&amp;quot;TestObject.tx&amp;quot;) (getAttr(&amp;quot;TestObject.tx&amp;quot;)-1);&lt;br /&gt;
        }&lt;br /&gt;
        if($c==&amp;quot;rightCtrl&amp;quot;){&lt;br /&gt;
            setAttr(&amp;quot;TestObject.tx&amp;quot;) (getAttr(&amp;quot;TestObject.tx&amp;quot;)+1);&lt;br /&gt;
        }&lt;br /&gt;
        if($c==&amp;quot;bottomCtrl&amp;quot;){&lt;br /&gt;
            $elapsedTime = `timerX -startTime $startTime`;&lt;br /&gt;
            $previousSecond = $elapsedTime-1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proc startTetris(){&lt;br /&gt;
    //sets up ctrls, UI, game elements, and launches scriptjobs that actually start the game&lt;br /&gt;
&lt;br /&gt;
    global int $jobCtrl;&lt;br /&gt;
    global int $jobLoop;&lt;br /&gt;
    &lt;br /&gt;
    setupTetrisControls;&lt;br /&gt;
    &lt;br /&gt;
    // actual script jobs&lt;br /&gt;
    // one controls what happens on selection change&lt;br /&gt;
    // the other one is the &amp;#039;iterator&amp;#039;, which controls the speed of the game&lt;br /&gt;
    &lt;br /&gt;
    $jobCtrl = `scriptJob -e &amp;quot;SelectionChanged&amp;quot; &amp;quot;ctrls()&amp;quot; -protected`;&lt;br /&gt;
    print $jobCtrl;&lt;br /&gt;
    $jobLoop = `scriptJob -ie &amp;quot;loop(.2)&amp;quot; -protected`;&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proc loop(float $speed){&lt;br /&gt;
    //function that fires at every n millisecond, updates game&lt;br /&gt;
    global float $startTime;&lt;br /&gt;
    global float $previousSecond;&lt;br /&gt;
    $elapsedTime = `timerX -startTime $startTime`;&lt;br /&gt;
    if( ($previousSecond + $speed ) &amp;lt; $elapsedTime){&lt;br /&gt;
        //print (&amp;quot;Total Time: &amp;quot;+$elapsedTime+&amp;quot;\n&amp;quot;);&lt;br /&gt;
        setAttr(&amp;quot;TestObject.ty&amp;quot;) ((getAttr(&amp;quot;TestObject.ty&amp;quot;)-1)%10);&lt;br /&gt;
        testStuff();&lt;br /&gt;
        //setAttr -type &amp;quot;string&amp;quot; annotationShape1.text $elapsedTime;&lt;br /&gt;
        $previousSecond = $elapsedTime;&lt;br /&gt;
    }else{&lt;br /&gt;
        //empty cycle&lt;br /&gt;
        //print($previousSecond+&amp;quot; &amp;quot;+$elapsedTime+&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proc testStuff(){&lt;br /&gt;
    for($i = 0;$i&amp;lt;50;$i++){&lt;br /&gt;
        particle -e -at &amp;quot;index&amp;quot; -id (floor(rand(0,50))) -fv (floor(rand(0,8))) &amp;quot;particleShape1&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    currentTime (`currentTime -q`);&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
////////////////////////////////////////&lt;br /&gt;
setUpTetrisGrid(10,5);&lt;br /&gt;
&lt;br /&gt;
proc setUpTetrisGrid(int $rows, int $cols){&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    // create particle system with an &amp;#039;index&amp;#039; pp attr&lt;br /&gt;
    string $p = &amp;quot;particle -n TetrisGridParticles&amp;quot;;&lt;br /&gt;
    global int $rows;&lt;br /&gt;
    global int $cols;&lt;br /&gt;
    global float $grid[];&lt;br /&gt;
  &lt;br /&gt;
    float $pscale = 1.5;&lt;br /&gt;
    for($i=0;$i&amp;lt;$rows;$i++){&lt;br /&gt;
        for($j=0;$j&amp;lt;$cols;$j++){&lt;br /&gt;
            $p+= &amp;quot;-p 0 &amp;quot;+($i*$pscale+$pscale/2)+&amp;quot; &amp;quot;+($j-$cols/2)*$pscale+ &amp;quot; &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    string $pSystem[] = eval($p);&lt;br /&gt;
    setAttr ($pSystem[1]+&amp;quot;.particleRenderType&amp;quot;) 6;       //streak mode no velocity = no streaks, I could hide particles too&lt;br /&gt;
    addAttr -ln &amp;quot;index&amp;quot;  -dt doubleArray $pSystem[1];    &lt;br /&gt;
    &lt;br /&gt;
    // create colored cubes to be instanced in particle system&lt;br /&gt;
    string $objList = &amp;quot;&amp;quot;;&lt;br /&gt;
    for($i=0;$i&amp;lt;9;$i++){&lt;br /&gt;
        string $pCube[] = `polyCube -w ($pscale*.98) -h ($pscale*.98) -d ($pscale*.98) -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 0`;&lt;br /&gt;
        $objList += &amp;quot;-object \&amp;quot;&amp;quot;+$pCube[0]+&amp;quot;\&amp;quot; &amp;quot;;&lt;br /&gt;
        setCubeColor($pCube[0]);&lt;br /&gt;
        setAttr($pCube[0]+&amp;quot;.visibility&amp;quot;) 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // create an instancer using the previous objects. &amp;#039;0&amp;#039; will be useless as it also maps visibility&lt;br /&gt;
    string $particleInstanc = eval(&amp;quot;particleInstancer -addObject &amp;quot;+$objList+&amp;quot;-cycle None -cycleStep 1 -cycleStepUnits Frames -levelOfDetail Geometry -rotationUnits Degrees -rotationOrder XYZ -position worldPosition -age age -objectIndex index -visibility index &amp;quot;+$pSystem[1]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// available pieces in a big 7 * 4*4 array&lt;br /&gt;
global int $pieces[];&lt;br /&gt;
$pieces = {&lt;br /&gt;
    0, 1, 0, 0,    // #&lt;br /&gt;
    0, 1, 0, 0,    // #&lt;br /&gt;
    0, 1, 0, 0,    // #&lt;br /&gt;
    0, 1, 0, 0,    // #&lt;br /&gt;
    &lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    0, 1, 0, 0,    //  #&lt;br /&gt;
    1, 1, 1, 0,    // ###&lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    &lt;br /&gt;
    0, 0, 1, 0,    //  #&lt;br /&gt;
    0, 0, 1, 0,    //  #&lt;br /&gt;
    0, 1, 1, 0,    // ##&lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    &lt;br /&gt;
    0, 1, 0, 0,    //  #&lt;br /&gt;
    0, 1, 0, 0,    //  #&lt;br /&gt;
    0, 1, 1, 0,    //  ##&lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    &lt;br /&gt;
    0, 0, 0, 0,    //  &lt;br /&gt;
    0, 1, 1, 0,    //  ##&lt;br /&gt;
    0, 1, 1, 0,    //  ##&lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    0, 0, 0, 0,    //  &lt;br /&gt;
    0, 0, 1, 1,    //  ##&lt;br /&gt;
    0, 1, 1, 0,    // ##&lt;br /&gt;
    0, 0, 0, 0,    //&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    0, 0, 0, 0,    //  &lt;br /&gt;
    0, 1, 1, 0,    //  ##&lt;br /&gt;
    0, 0, 1, 1,    //   ##&lt;br /&gt;
    0, 0, 0, 0     //&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//return a random piece as 4*4 (16) array&lt;br /&gt;
proc int[] randomPiece(){&lt;br /&gt;
    global int $pieces[];&lt;br /&gt;
    $p = $pieces;&lt;br /&gt;
    int $r = rand(7);&lt;br /&gt;
    $r = $r * 16;&lt;br /&gt;
    int $returnPiece[] = {&lt;br /&gt;
        0,        $p[$r+1 ], $p[$r+2 ], 0,&lt;br /&gt;
        0,        $p[$r+5 ], $p[$r+6 ], $p[$r+7 ],&lt;br /&gt;
        $p[$r+8], $p[$r+9 ], $p[$r+10], $p[$r+11],&lt;br /&gt;
        0,        $p[$r+13], 0        , 0&lt;br /&gt;
    };&lt;br /&gt;
    return $returnPiece;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//print current piece to script editor&lt;br /&gt;
proc printPiece(int $p[]){&lt;br /&gt;
    print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    for($i=0;$i&amp;lt;4;$i++){&lt;br /&gt;
        for($j=0;$j&amp;lt;4;$j++){&lt;br /&gt;
            //print($i*4+$j);&lt;br /&gt;
            print(($p[$i*4+$j]==1)?&amp;quot;#&amp;quot;:&amp;quot;.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        print(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//rotate a 4*4 piece around its center:&lt;br /&gt;
//&lt;br /&gt;
//   a b c d      m i e a&lt;br /&gt;
//   e f g h  -&amp;gt;  n j f b&lt;br /&gt;
//   i j k l  -&amp;gt;  o k g c&lt;br /&gt;
//   m n o p      p l h d&lt;br /&gt;
//&lt;br /&gt;
proc int[] rotatePiece(int $p[]){&lt;br /&gt;
    int $rotatedPiece[] = {$p[12],$p[8],$p[4],$p[0],$p[13],$p[9],$p[5],$p[1],$p[14],$p[10],$p[6],$p[2],$p[15],$p[11],$p[7],$p[3]};  //if 4x4 -&amp;gt; x=y, y=-x+3, clockwise rotation of matrix&lt;br /&gt;
    return $rotatedPiece;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// int $pp[] = randomPiece(); &lt;br /&gt;
// printPiece($pp);&lt;br /&gt;
// printPiece(rotatePiece(rotatePiece($pp)));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
proc updateInstanceIndexesFromArray(string $particleShape,float $gridArray[]){&lt;br /&gt;
    global int $rows;&lt;br /&gt;
    global int $cols;&lt;br /&gt;
    global float $grid[];&lt;br /&gt;
    for($j = 0;$j&amp;lt;$rows;$j++){&lt;br /&gt;
        for($i = 0;$i&amp;lt;$cols;$i++){&lt;br /&gt;
            int $id = $j*$cols+$i;&lt;br /&gt;
            particle -e -at &amp;quot;index&amp;quot; -id $id -fv ($grid[$id]) $particleShape;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    currentTime (`currentTime -q`);&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$grid = {};&lt;br /&gt;
$counter = -1;&lt;br /&gt;
$rows = 10;&lt;br /&gt;
$cols = 5;&lt;br /&gt;
for($i = 0;$i&amp;lt;$rows;$i++){&lt;br /&gt;
    for($j = 0;$j&amp;lt;$cols;$j++){&lt;br /&gt;
        $counter = $counter+1;&lt;br /&gt;
        //$grid[$j*$cols+$i] = $counter+1+$i%2;&lt;br /&gt;
        $grid[$counter] = $i%2*($i%3+1);&lt;br /&gt;
        print($counter+1+$j%2+&amp;quot;\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
updateInstanceIndexesFromArray(&amp;quot;TetrisGridParticlesShape&amp;quot;,$grid);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernie</name></author>
	</entry>
</feed>