/**************************************************************** * * Modern Carpentry Spiderweb * * Investigations into Dual Parented Display Objects * * @version 0.2 * @author Thomas Saunders * * Licensed under GPL version 3 * see http://modern-carpentry.com/workshop/spiderweb/license.txt * * *****************************************************************/ package { // import com.modernCarpentry.spiderweb.control.KeyboardController; import com.modernCarpentry.spiderweb.display.DualParentSprite; // import com.modernCarpentry.spiderweb.model.ModelLocator; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; [SWF(backgroundColor="0xffffff")] public class SpiderWeb extends Sprite { // protected var _model:ModelLocator = ModelLocator.getInstance(); protected var _numstrands:int = 48; protected var _twopi:Number = Math.PI; //Note: WTF? protected var _radius:int = 280; protected var _radsIncrement:Number = _twopi / _numstrands; protected var _w:int; protected var _h:int; protected var _wover2:int; protected var _hover2:int; protected var _radials:int = 36; protected var _mouseAttract:int = 20; protected var _noiseAttract:int = 5; protected var _time:Number = 0; protected var _gen0:Array; protected var _gen1:Array; public function SpiderWeb() { addEventListener(Event.ADDED_TO_STAGE, onStage); } protected function onStage(event:Event):void { removeEventListener(Event.ADDED_TO_STAGE, onStage); stage.align = "TOP_LEFT"; stage.scaleMode = "noScale"; resize(); addViews(); addListeners(); } protected function addViews():void { // var keys:KeyboardController = new KeyboardController(this); var tf:TextField = new TextField(); tf.defaultTextFormat = new TextFormat("Arial", 14); tf.width = tf.height =400; tf.wordWrap =tf.multiline=true; tf.text="modern-carpentry spiderweb\n" tf.appendText("click and drag the small black circles to play\n"); tf.appendText("read more here: http://philosophy.modern-carpentry.com/"); addChild( tf ); var adam:DualParentSprite; var eve:DualParentSprite; var rads:Number = 0; _gen0 = new Array(); _gen1 = new Array(); for(var i:int = 0; i< _numstrands; i++) { adam = new DualParentSprite(0); eve = new DualParentSprite(0); var ex:Number = Math.cos(rads) * _radius; var why:Number = Math.sin(rads) * _radius; rads+= _radsIncrement; adam.x = adam.ox = ex + _wover2; adam.y = adam.oy = why + _hover2; eve.x = eve.ox = -ex + _wover2; eve.y = eve.oy = -why + _hover2; addChild(adam); addChild(eve); _gen0.push( adam ); _gen0.push( eve ); var cain:DualParentSprite = new DualParentSprite(1, adam, eve); addChild(cain); _gen1.push(cain); adam.addDualParentedChild(cain); eve.addDualParentedChild(cain); } for(i = 0; i< _gen1.length; i++) { var child:DualParentSprite = _gen1[i]; var nextChild:DualParentSprite; if(i < _gen1.length -1) { nextChild = _gen1[i+1]; } else { nextChild = _gen1[0]; } for(var b:int = 0; b < _radials-1; b++) { var per:Number = b/_radials; var offspring:DualParentSprite = new DualParentSprite(2, child, nextChild, per); child.addDualParentedChild(offspring); nextChild.addDualParentedChild(offspring); addChild(offspring); } } } protected function addListeners( ):void { stage.addEventListener( Event.RESIZE, resize ); // addEventListener( Event.ENTER_FRAME, frame ); // addEventListener( Event.ENTER_FRAME, noise ); } protected function noise( event:Event = null ):void { /* var dx:Number; var dy:Number; var dist:Number; for( var i:int = 0; i< _gen0.length; i++ ) { var s:DualParentSprite = _gen0[i]; if( !s.isDragging ) { var n:Number = noiseWFreq( s.ox, s.oy, _time, 4 ); s.x = s.ox + n * _noiseAttract; s.y = s.oy + n * _noiseAttract; s.update(); } } _time+=.01; */ } protected function noiseWFreq( x:Number, y:Number, z:Number, freq:int):Number { /* var x1:Number = .707*x-.707*z; var z1:Number = .707*x+.707*z; var y1:Number = .707*x1+.707*y; return Noise3D.noise(freq*x1, freq*y1, freq*z1); */ return 0; } protected function frame( event:Event=null ):void { /* var dx:Number; var dy:Number; var dist:Number; for( var i:int = 0; i< _gen0.length; i++ ) { var s:DualParentSprite = _gen0[i]; if( !s.isDragging ) { dx = stage.mouseX - s.ox; dy = stage.mouseY - s.oy; dist = Math.sqrt( dx*dx + dy*dy ); s.x = s.ox + ( dx * _mouseAttract ) / dist; s.y = s.oy + ( dy * _mouseAttract ) / dist; s.update(); } } */ } protected function resize( event:Event = null ):void { _w = stage.stageWidth; _h = stage.stageHeight; _wover2 = _w/2; _hover2 = _h/2; } } }