/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/uuFF
*/
package {
import flash.text.TextField;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
deb = new TextField();
deb.width=320; deb.height=240;
deb.mouseEnabled=false;
addChild(deb);
vecVert = new Vector.<xVert>(0, false);
vecVert.push(new xVert(130, 130));
vecVert.push(new xVert(230, 130));
vecVert.push(new xVert(130, 230));
vecVert.push(new xVert(230, 230));
vecVert.push(new xVert(330, 230));
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecVert:Vector.<xVert>;
public var deb:TextField;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
/*
goPos(vecVert[0], vecVert[1].cx, vecVert[1].cy);
goPos(vecVert[1], vecVert[0].cx, vecVert[0].cy);
goPos(vecVert[2], vecVert[3].cx, vecVert[3].cy);
goPos(vecVert[3], vecVert[2].cx, vecVert[2].cy);
goPos(vecVert[0], vecVert[2].cx, vecVert[2].cy);
goPos(vecVert[2], vecVert[0].cx, vecVert[0].cy);
goPos(vecVert[1], vecVert[3].cx, vecVert[3].cy);
goPos(vecVert[3], vecVert[1].cx, vecVert[1].cy);
*/
// vecVert[0].vy+=1;
var i:int; var num:int; var a:xVert;
num = vecVert.length;
for (i=0;i<num;i+=1)
{
a = vecVert[i];
a.vy+=0.2;
a.vx*=0.99; a.vy*=0.99;
a.cx+=a.vx; a.cy+=a.vy;
graphics.drawCircle(a.cx,a.cy,4);
}//nexti
graphics.lineStyle(2, 0xFF);
spring(vecVert[0], vecVert[3], 46, 0.15);
spring(vecVert[1], vecVert[2], 46, 0.15);
spring(vecVert[0], vecVert[1], 32, 0.5);
spring(vecVert[0], vecVert[2], 32, 0.5);
spring(vecVert[1], vecVert[3], 32, 0.5);
spring(vecVert[2], vecVert[3], 32, 0.5);
graphics.lineStyle(2, 0xFF0000);
// goPos(vecVert[0], vecVert[1].cx, vecVert[1].cy);
// goPos(vecVert[1], vecVert[0].cx, vecVert[0].cy);
goPos(vecVert[0], 130, 130);
if ((gt&128) > 0) { goPos(vecVert[1], 230, 130, 0, 0.1); }
var t:Number;
t = 64;
t += Math.cos(gt*0.05)*32;
/*
goPos(vecVert[1], vecVert[2].cx, vecVert[2].cy,46,0.05);
goPos(vecVert[2], vecVert[1].cx, vecVert[1].cy,46,0.05);
goPos(vecVert[0], vecVert[3].cx, vecVert[3].cy,46,0.05);
goPos(vecVert[3], vecVert[0].cx, vecVert[0].cy,46,0.05);
*/
/*
var b:xVert;
a= vecVert[1]; b=vecVert[2];
deb.text = " 1-2: " + getMag(a.cx-b.cx,a.cy-b.cy);
a= vecVert[0]; b=vecVert[3];
deb.appendText("\n0-3: " + getMag(a.cx-b.cx,a.cy-b.cy));
// goPos(vecVert[3], 230, 330, t);
// goPos(vecVert[1], 230, 230, t);
if (gt > 30)
{
goPos(vecVert[3], 130,30);
}
*/
gt+=1;
}//onenter
public var gt:int =0;
public function getMag(ax:Number,ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function goPos(a:xVert, ax:Number, ay:Number, r:Number=32,t:Number=0.1):void
{
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(ax,ay);
var mag:Number; var dx:Number; var dy:Number;
dx = ax-(a.cx+a.vx); dy= ay-(a.cy+a.vy);
mag = Math.sqrt(dx*dx+ dy*dy);
if (mag == 0) { mag =0.0001; }
//if (mag < r) { return; }
dx/=mag; dy/=mag;
var kx:Number; var ky:Number;
r = mag-r;
kx = dx*r;
ky = dy*r;
a.vx += (kx-a.vx)*t;
a.vy += (ky-a.vy)*t;
}//gopos
public function spring(a:xVert, b:xVert, rest:Number, t:Number=0.5):void
{
graphics.moveTo(a.cx, a.cy);
graphics.lineTo(b.cx, b.cy);
var ax:Number; var ay:Number; var dx:Number; var dy:Number;
var nx:Number; var ny:Number; var dist:Number; var mag:Number;
var reld:Number; var relvel:Number; var rem:Number;
dx = ((a.cx + a.vx) - (b.cx + b.vx));
dy = ((a.cy+a.vy) - (b.cy+b.vy));
mag = Math.sqrt(dx * dx + dy * dy);
if (mag == 0) {mag = Math.random(); a.cx += Math.random()-0.5; b.cy+=Math.random()-0.5;}
//if (mag == 0) { mag = 0.001; }
nx = dx / mag; ny = dy / mag;
ax = a.vx - b.vx; ay = a.vy - b.vy;
relvel = (ax*nx) +(ay*ny);
reld = mag - (rest+rest);
rem = relvel + reld;
rem*=0.5;
if (rem > 130) { rem = 130; }
else if (rem < -130) { rem = -130; }
a.vx += (rem *(nx*-t )) ; a.vy += (rem *(ny*-t )) ;
b.vx += (rem* (nx*t )) ; b.vy += (rem * (ny * t )) ;
}//spring
}//classend
}
internal class xVert
{
public var cx:Number = 0;
public var cy:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public function xVert(ax:Number,ay:Number) { cx=ax;cy=ay;}
}//xvert