flash on 2009-8-20
package {
import de.polygonal.ds.DLinkedList;
import de.polygonal.ds.DListNode;
import gs.TweenMax;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;
[SWF(width="900", height="480", backgroundColor="#000000", frameRate="60")]
public class StackedPlanes extends BasicView
{
private static const X_SPACING:Number = 400;
private static const Z_SPACING:Number = 400;
private static const NUMBER_OF_PLANES:int = 10;
private static const TIME:Number = .3;
private var planeList:DLinkedList = new DLinkedList();
public function StackedPlanes()
{
viewport.interactive = true;
for(var i:int = 0; i < NUMBER_OF_PLANES; i++)
{
var randomColor:Number = Math.random() * 0xffffff;
var colorMaterial:ColorMaterial = new ColorMaterial(randomColor);
colorMaterial.interactive = true;
var plane:Plane = new Plane(colorMaterial, 400, 400, 4, 4);
plane.x = i * X_SPACING;
plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, plane_objectClickHandler);
planeList.append(plane);
scene.addChild(plane);
}
flow(plane);
startRendering();
}
private function plane_objectClickHandler(event:InteractiveScene3DEvent):void
{
var plane:Plane = Plane(event.target);
flow(plane);
}
private function flow(plane:Plane):void
{
var xPosition:Number = 0;
var zPosition:Number = 0;
TweenMax.to(plane, TIME, {x:xPosition, z:zPosition, rotationY:0});
var current:DListNode = planeList.nodeOf(plane).node;
var walkLeft:DListNode = current.prev;
while(walkLeft)
{
plane = Plane(walkLeft.data);
xPosition += X_SPACING;
zPosition += Z_SPACING;
TweenMax.to(plane, TIME, {x:xPosition, z:zPosition});
walkLeft = walkLeft.prev;
}
xPosition = 0;
zPosition = 0;
var walkRight:DListNode = current.next;
while(walkRight)
{
plane = Plane(walkRight.data);
xPosition -= X_SPACING;
zPosition -= Z_SPACING;
TweenMax.to(plane, TIME, {x:xPosition, z:zPosition});
walkRight = walkRight.next;
}
}
}
}