/**
* 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/aEdl
*/
package {
import flash.display.*;
import flash.events.Event;
import flash.events.MouseEvent;
public class FlashTest extends Sprite {
public var center:Object = {x:stage.stageWidth/2,y:stage.stageHeight/2,z:distance};
public var distance:Number = 350;
public var numNodes:Number = 6;
public var nodeRadius:Number = 8;
public var centerRadius:Number = 12;
public var color:uint = 0x998877;
public var xRange:Number = 200;
public var yRange:Number = 100;
public var zRange:Number = 200;
public var rotationFactor:Number = .05;
public var xRotation:Number = 0;
public var yRotation:Number = 0;
public var nodes:Array;
public var container:Sprite = new Sprite();
public function FlashTest() {
// write as3 code here..
drawCenterNode();
nodes = new Array();
container.x = center.x;
container.y = center.y;
this.stage.addChild(container);
initNodes();
this.stage.addEventListener(MouseEvent.MOUSE_DOWN,_onMouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_UP,_onMouseUp);
}
public function drawCenterNode():void
{
var centerNode:Sprite = new Sprite();
centerNode.graphics.beginFill(color,1);
centerNode.graphics.drawCircle(0,0,centerRadius);
centerNode.graphics.endFill();
centerNode.x = 0;
centerNode.y = 0;
centerNode.z = center.z;
container.addChild(centerNode);
}
public function initNodes():void
{
for (var i:int = 0; i < numNodes; i++)
{
nodes.push(make3DPoint());
}
drawNodes(nodes);
}
private function _update(e:Event):void
{
yRotation = (center.x - this.stage.mouseX) * rotationFactor;
//yRotation++
var newNodes:Array = transformNodes(nodes, yRotation);
drawNodes(newNodes);
}
public function make3DPoint():Object
{
var point:Object = new Object();
point.x = center.x + (Math.random()*xRange - xRange/2);
point.y = center.y + (Math.random()*yRange - yRange/2);
point.z = center.z + (Math.random()*zRange - zRange/2);
return point;
}
public function transformNodes(nodes:Array, yAngle:Number):Array
{
var newNodes:Array = new Array();
var cy:Number = Math.cos(yAngle);
var sy:Number = Math.sin(yAngle);
for (var i:int = 0; i < numNodes; i++)
{
var newNode:Object = new Object();
var x:Number = nodes[i].x;
var y:Number = nodes[i].y;
var z:Number = nodes[i].z;
var yx:Number = cy*y - sy*z;
var yz:Number = cy*z - sy*x;
newNode.x = yx;
newNode.y = y;
newNode.z = yz;
newNodes.push(newNode);
}
return newNodes;
}
public function drawNodes(nodes:Array):void
{
container.graphics.clear();
for (var i:int = 0; i < numNodes; i++)
{
var node:Sprite = new Sprite();
node.graphics.beginFill(color,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;
container.addChild(node);
}
}
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);
}
}
}