package { import com.bit101.components.CheckBox; import com.bit101.components.HUISlider; import com.bit101.components.PushButton; import flash.display.*; import flash.events.*; import flash.filters.BevelFilter; import flash.filters.BlurFilter; import flash.geom.*; import flash.text.*; import flash.utils.setInterval; import flash.utils.clearInterval; /** * @author nicoptere */ public class MainControls extends Sprite { private var AI:ActivatorInhibitor; private var bmp:Bitmap; private var bias:HUISlider; private var activate:HUISlider; private var inhibit:HUISlider; private var inner:HUISlider; private var outer:HUISlider; private var size:HUISlider; private var seed:HUISlider; private var blur:HUISlider; private var run:CheckBox; private var interval:uint; private var running:Boolean = false; public function MainControls() { //dots //AI.settings( .3, -.4, 6, 8, 5 ); //stripes //AI.settings( .5, -.5, 1, 8, 5 ); AI = new ActivatorInhibitor( 128, 128, true); AI.furColor = 0x00000000; AI.skinColor = 0xFF000000; /////////////////////////////////////////////////////// // interface var ox:int = 10; var oy:int = 505; var render:PushButton = new PushButton( this, ox, oy, 'render', processHandler ); run = new CheckBox( this, ox + 110, oy, 'interactive', loopHandler ); var leopard:PushButton = new PushButton( this, ox + 200, oy, 'leopard', function():void { AI.settings( .3, -.4, 6, 8, 5 ); applySettings(); } ); var stripes:PushButton = new PushButton( this, ox + 290, oy, 'stripes', function():void { AI.settings( .5, -.5, 1, 8, 5 ); applySettings(); } ); leopard.width = stripes.width = 80; var resetBmp:PushButton = new PushButton( this, ox + 380, oy, 'reset bmp', resizeHandler ); seed = new HUISlider( this, ox + 380, oy + 22, 'seed', resizeHandler ); seed.width = 130; seed.minimum = 0; seed.maximum = 1000; blur = new HUISlider( this, ox + 380, oy + 44, 'blur', blurHandler ); blur.width = 130; blur.minimum = 0; blur.maximum = 30; var reset:PushButton = new PushButton( this, ox+380, oy+66, 'reset all', resetHandler ); size = new HUISlider( this, ox, oy + 22, 'size', resizeHandler ); size.minimum = 1; size.maximum = 250; size.value = AI.size; bias = new HUISlider( this, ox + 200, oy + 22, 'bias', settingsHandler ); bias.minimum = 0; bias.maximum = 10; bias.value = AI.bias; activate = new HUISlider( this, ox, oy + 44, 'activate', settingsHandler ); activate.minimum = 0; activate.maximum = 1; activate.value = AI.activate; inhibit = new HUISlider( this, ox + 200, oy + 44, 'inhibit', settingsHandler ); inhibit.minimum = -1; inhibit.maximum = 0; inhibit.value = AI.inhibit; inner = new HUISlider( this, ox, oy + 66, 'inner Radius', settingsHandler ); inner.minimum = 1; inner.maximum = 10; inner.value = AI.innerRadius; outer = new HUISlider( this, ox + 200, oy + 66, 'outer Radius', settingsHandler ); outer.minimum = 2; outer.maximum = 10; outer.value = AI.outerRadius; resetHandler(null); } private function blurHandler( e:Event ):void { bmp.filters = [ new BlurFilter( blur.value,blur.value,3 ) ]; } private function loopHandler( e:Event ):void { clearInterval( interval ); if ( run.selected ) { interval = setInterval( processHandler, 0, e ); } } private function resizeHandler( e:Event ):void { AI.size = size.value; resetNoise( AI.bitmapData); AI.reset(); setBmp(); } private function resetHandler( e:Event ):void { AI.settings( 1, -1, 1, 3, 5 ); AI.size = 125; applySettings(); resetNoise( AI.bitmapData); setBmp(); } private function applySettings():void { size.value = AI.size; activate.value = AI.activate; inhibit.value = AI.inhibit; inner.value = AI.innerRadius; outer.value = AI.outerRadius; bias.value = AI.bias; } private function settingsHandler( e:Event ):void { AI.settings( activate.value, inhibit.value, Math.min(inner.value, outer.value ), Math.max(inner.value, outer.value),bias.value ) setBmp(); } private function setBmp():void { if ( bmp != null ) { removeChild( bmp ); bmp = null; } bmp = Bitmap( addChild( new Bitmap( AI.bitmapData ) ) ); bmp.scaleX = bmp.scaleY = 500 / AI.size; bmp.filters = [ new BlurFilter( blur.value,blur.value,3 ) ]; } private function processHandler( e:Event ):void { AI.process(); } private function resetDots( bd:BitmapData ):void { bd.fillRect( bd.rect, 0); var sp:Sprite = new Sprite(); sp.graphics.beginFill( 0xFFFFFF ); sp.graphics.drawCircle( 0, 0, 10); var i:int = 20; while ( i-- ) { sp.x = Math.random() * AI.size; sp.y = Math.random() * AI.size; bd.draw( sp, new Matrix( 1,0,0,1,sp.x, sp.y ) ); } } private function resetNoise( bd:BitmapData ):void { bd.noise( seed.value, 0, 255, 7, true ); } } }