/**
* Copyright andrew_croce ( http://wonderfl.net/user/andrew_croce )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/cgwi
*/
package {
import flash.display.*;
import flash.events.*
public class FlashTest extends Sprite {
public var center:Object = {x:stage.stageWidth/2,y:stage.stageHeight/2,z:100};
public var centerNode:Sprite = new Sprite;
public var nodes:Array;
public var focalLength:Number = 150;
public var rotFactor:Number = 1;
public var centerRadius:Number = 15;
public var nodeRadius:Number = 6;
public var xRange:Number = 400;
public var yRange:Number = 100;
public var zRange:Number = 800;
public var numNodes:Number = 10;
public var grey:uint = 0x999999;
public function FlashTest() {
// write as3 code here..
this.stage.addChild(makeCenterNode());
nodes = new Array();
nodes = make3DPoints();
makeNodes(nodes);
this.stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_UP,_onMouseUp);
}
private function _update(e:Event):void
{
makeNodes(rotateNodes(nodes));
}
private function _onMouseDown(e:MouseEvent):void
{
this.stage.addEventListener(Event.ENTER_FRAME,_update);
}
private function _onMouseUp(e:MouseEvent):void
{
this.stage.removeEventListener(Event.ENTER_FRAME,_update);
}
public function makeCenterNode():Sprite
{
var node:Sprite = new Sprite();
node.graphics.beginFill(grey,1);
node.graphics.drawCircle(0,0,centerRadius);
node.graphics.endFill();
node.x = center.x;
node.y = center.y;
node.z = center.z;
return(node);
}
public function make3DPoints():Array
{
var points:Array = new Array();
for (var i:int = 0; i < numNodes; i++)
{
var point:Object = new Object();
point.x = center.x + xRange * Math.random() - xRange/2;
point.y = center.y + yRange * Math.random() - yRange/2;
point.z = center.z + zRange * Math.random() - zRange/2;
points[i] = point;
}
return(points);
}
public function makeNodes(nodes:Array):void
{
for (var i:int = 0; i < numNodes; i++)
{
var node:Sprite = new Sprite();
node.graphics.beginFill(grey,1);
node.graphics.drawCircle(0,0,nodeRadius);
node.graphics.endFill();
node.x = nodes[i].x;
node.y = nodes[i].y;
node.z = nodes[i].z;
this.stage.addChild(node);
node.addEventListener(MouseEvent.MOUSE_OVER,_onMouseOver);
}
}
public function rotateNodes(nodes:Array):Array
{
var newNodes:Array = new Array();
for (var i:int = 0; i < numNodes; i++)
{
var xAngle:Number = mouseX - center.x;
var sx:Number = Math.sin(xAngle);
var cx:Number = Math.cos(xAngle);
var x:Number = nodes[i].x;
var y:Number = nodes[i].y;
var z:Number = nodes[i].z;
var yx:Number = (cx*x)+(sx*z);
var yz:Number = (cx*z)-(sx*x);
newNodes[i].x = yx;
newNodes[i].z = yz;
}
return(newNodes);
}
private function _onMouseOver(e:MouseEvent):void
{
e.target
}
}
}