package { import caurina.transitions.*; import flash.display.*; import flash.events.Event; import flash.events.KeyboardEvent; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; import flash.utils.Timer; import org.hasseg.externalMouseWheel.ExternalMouseWheelSupport; import org.papervision3d.materials.*; import org.papervision3d.objects.Plane; public class Twitter3D extends PaperBase { private var _spaceInterItem:Number = 500; private var _mwSupport:ExternalMouseWheelSupport = ExternalMouseWheelSupport.getInstance(stage); public function Twitter3D() { camera.zoom = 200; camera.y = 0; camera.z = -10000; stage.addEventListener(KeyboardEvent.KEY_DOWN, arrowAction); stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheelAction); stage.addEventListener(Event.RESIZE, updateGraphics); updateGraphics(null); addEventListener(Event.ENTER_FRAME, render); addEventListener(Event.DEACTIVATE, render); createTextField(); } public function createTextField():void { var field:TextField = new TextField(); var textFormat:TextFormat = new TextFormat("Arial"); textFormat.size = 20; textFormat.color = 0xFFFFFF; textFormat.bold = true; field.border = true; field.borderColor = 0xFFFFFF; field.width = 200; field.height = 24; field.textColor = 0xFFFFFF; field.type = TextFieldType.INPUT; field.defaultTextFormat = textFormat; field.x = stage.stageWidth / 2 - field.width / 2; field.y = stage.stageHeight / 2 - field.height / 2; stage.focus = field; field.addEventListener(KeyboardEvent.KEY_DOWN, checkKey); addChild(field); } public function checkKey(event:KeyboardEvent):void { if (event.keyCode === 13) { load(event.target.text); event.target.visible = false; } } public function load(username):void { var twitterRequest:TwitterRequest = new TwitterRequest(); twitterRequest.parseURL("http://www.vinch.be/projects/as3/twitter3d/twitter.php?username="+username); twitterRequest.addEventListener(Event.COMPLETE,function(event:Event):void { createItems(twitterRequest.items); }); } public function arrowAction(event:KeyboardEvent):void { switch(event.keyCode) { case 38: moveNext(); break; case 40: movePrevious(); break; } } public function wheelAction(event:MouseEvent):void { if (event.delta > 0) { moveNext(); } else { movePrevious(); } } public function moveNext():void { materials[actualItem].movie.disable(materials[actualItem]); if(actualItem >= items.length - 1) actualItem = 0; else actualItem++; move(); } public function movePrevious():void { materials[actualItem].movie.disable(materials[actualItem]); if(actualItem <= 0) actualItem = items.length - 1; else actualItem--; move(); } private var firstMove:Boolean = true; public function move():void { var duration:Number = 1.5; if(firstMove) { firstMove = false; duration = 2; } materials[actualItem].movie.enable(materials[actualItem]); Tweener.addTween(camera, {z:actualItem * _spaceInterItem - 200, time:duration, transition:"easeOutCubic"}); } private var totalItems:Number; private var timer:Timer; private var items:Array; private var materials:Array; private var actualItem:Number; public function createItems(items:Array):void { actualItem = totalItems = 0; this.items = new Array(); materials = new Array(); for(var i:Number=0;i