In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

flash on 2010-3-13

Get Adobe Flash player
by Mark 13 Mar 2010
    Embed
/**
 * Copyright Mark ( http://wonderfl.net/user/Mark )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/gIjj
 */

package
{
	import flash.geom.Point;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	
	public class LinkMain extends MovieClip
	{
		private var text:TextField = new TextField();
		private var _numCircles:int = 75;
		private var _leapDist:int = 50;
		private var _moveSpeed:int = 1;
		private var _branchStrength:int = 500;
		private var _strengthMultiplier:int = 3;
		
		public function LinkMain ():void
		{
			for (var i:int = 0; i < _numCircles; i++)
			{
				var circle:MovieClip = new MovieClip();
				circle.name = "circle" + i;
				circle.leapDist = _leapDist;
				circle.numConnections = 0;
				circle.x = Math.random() * stage.stageWidth;
				circle.y = Math.random() * stage.stageHeight;
				circle.colour = Math.random() * 0xFFFFFF;
				circle.xVel = (Math.random() * _moveSpeed) - (_moveSpeed / 2);
				circle.yVel = (Math.random() * _moveSpeed) - (_moveSpeed / 2);
				circle.addEventListener(Event.ENTER_FRAME, onCircleLoop);
				stage.addChild(circle);
			}
			text.text = "Click screen to reverse attraction! Currently attracting";
			text.autoSize = "left";
			stage.addChild(text);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandle);		
		}
		private function onCircleLoop (evt:Event):void
		{
			var circle:MovieClip = MovieClip(evt.target);
			circle.x += circle.xVel;
			circle.y += circle.yVel;
			branchLines(circle);
			checkBounds(circle);
		}
		private function branchLines (circle:MovieClip):void
		{	
			circle.graphics.clear();
			circle.numConnections = 0;
			
			for (var i:int = 1; i < _numCircles; i++)
			{				
				if (Point.distance(new Point(stage.getChildAt(i).x, stage.getChildAt(i).y), new Point(circle.x, circle.y)) <= circle.leapDist)
				{
					circle.graphics.moveTo(0, 0);
					circle.graphics.lineStyle(3, circle.colour, 0.5);
					circle.graphics.lineTo(stage.getChildAt(i).x - circle.x, stage.getChildAt(i).y - circle.y);
					
					circle.xVel += (stage.getChildAt(i).x - circle.x) / _branchStrength;
					circle.yVel += (stage.getChildAt(i).y - circle.y) / _branchStrength;
					MovieClip(stage.getChildAt(i)).xVel += (circle.x - stage.getChildAt(i).x) / _branchStrength;
					MovieClip(stage.getChildAt(i)).yVel += (circle.y - stage.getChildAt(i).y) / _branchStrength;
					
					if(_branchStrength < 0)
					{
						circle.xVel *= 0.999;
						circle.yVel *= 0.999;
					}
				}
			}
			circle.graphics.moveTo(0, 0);
			circle.graphics.lineStyle(3, circle.colour);
			circle.graphics.drawCircle(0, 0, 3);	
		}
		private function mouseHandle (evt:Event):void
		{
			_branchStrength *= -1;	
			text.text = "Click screen to reverse attraction! ";
			if (_branchStrength >= 0) text.appendText("Currently attracting");
			else text.appendText("Currently repelling");
		}
		private function checkBounds (circle:MovieClip):void
		{
			if (circle.x <= 0)
			{
				circle.x = 0;
				circle.xVel *= -1;
			}
			if (circle.x >= stage.stageWidth)
			{
				circle.x = stage.stageWidth;
				circle.xVel *= -1;
			}
			if (circle.y <= 0)
			{
				circle.y = 0;
				circle.yVel *= -1;
			}
			if (circle.y >= stage.stageHeight)
			{
				circle.y = stage.stageHeight;
				circle.yVel *= -1;
			}
		}
	}
}