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="#ffffff", frameRate="60")]
public class FloverCow extends BasicView
{
private static const SPACING:Number = 400;
private static const NUMBER_OF_PLANES:int = 10;
private static const TIME:Number = .4;
private static const Z_FOCUS:Number = -100;
private static const ROTATION_Y:Number = 45;
private var planeList:DLinkedList = new DLinkedList();
public function FloverCow()
{
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 * 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;
TweenMax.to(plane, TIME, {x:xPosition, z:Z_FOCUS, rotationY:0});
var current:DListNode = planeList.nodeOf(plane).node;
var walkLeft:DListNode = current.prev;
while(walkLeft)
{
plane = Plane(walkLeft.data);
xPosition -= SPACING;
TweenMax.to(plane, TIME, {x:xPosition, z:0, rotationY:-ROTATION_Y});
walkLeft = walkLeft.prev;
}
xPosition = 0;
var walkRight:DListNode = current.next;
while(walkRight)
{
plane = Plane(walkRight.data);
xPosition += SPACING;
TweenMax.to(plane, TIME, {x:xPosition, z:0, rotationY:ROTATION_Y});
walkRight = walkRight.next;
}
}
}
}