Colorz

by WLAD
♥0 | Line 243 | Modified 2013-05-11 10:27:14 | MIT License
play

ActionScript3 source code

/**
 * Copyright WLAD ( http://wonderfl.net/user/WLAD )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aHU1
 */

package {import flash.display.Sprite;import flash.events.Event;[SWF(backgroundColor=0x000000, width=465, height=456, frameRate=30)]public class FakeStage extends Sprite {
    public var bgColor:uint = 0x000000;            
public function FakeStage() {stage ? init() : addEventListener(Event.ADDED_TO_STAGE,init);} private function init(e:Event = null):void {removeEventListener(Event.ADDED_TO_STAGE,init);fillBg();addChild(new Main());stage.addEventListener(Event.RESIZE,fillBg);}private function fillBg(e:Event=null):void{graphics.clear();graphics.beginFill(bgColor);graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);graphics.endFill();}}}
import flash.display.BlendMode;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
import flash.events.Event;
import flash.display.Graphics;
import flash.geom.ColorTransform;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.display.Sprite;
import frocessing.color.ColorRGB;
import frocessing.color.ColorHSV;
import com.bit101.components.*;

class Vars
{
    public static var multi              :Number = 0.87;    
    
    public static var redOffset       :Number = 0.00;    
    public static var greenOffset   :Number = 0.00;    
    public static var blueOffset     :Number = 0.00;    
    public static var alphaOffset   :Number = 1.00;
    
    public static var redMulti        :Number = multi;    
    public static var greenMulti    :Number = multi;    
    public static var blueMulti      :Number = multi;    
    public static var alphaMulti    :Number = 1.00;
}



function max(value1:Number,value2:Number):Number
{
    return value1 > value2 ? value1 : value2;
}
function min(value1:Number,value2:Number):Number
{
    return value1 < value2 ? value1 : value2;
}
function range(value:Number,min:Number = 0,max:Number = 1):Number
{
    return (value < min ? min : (value > max ? max : value));
}
function sign(value:Number):int
{
    return value < 0 ? -1 : 1;
}
function rnd(value:Number = 0 ,noZero:Boolean = false):Number
{
    if(value == 0) return Math.random();
    return Math.random() * value + (noZero ? 1 : 0);
}
function rndRange(min:Number,max:Number):Number
{
    return rnd() * (max - min) + min;
}
function rndSign():int
{
     return sign(rnd() - .5);   
}





class Main extends Sprite
{
    private var s:ShadowSprite;
    
    private var c:ColorShape;
    
    private var r1:RotateColorShape;
    private var r2:RotateColorShape;
    private var r3:RotateColorShape;
    
    private var l:ColorLine;
    
    public function Main()
    {
        s = new ShadowSprite(465,465);
        c = new ColorShape();
        l = new ColorLine();
        
        addChild(s);
        s.s.addChild(c);
        s.s.addChild(l);
        
        var lbl:Label = new Label(this,5,5,"Click on stage");
        lbl.scaleX = lbl.scaleY = 3;
        
        change();
        
        addEventListener(Event.ENTER_FRAME,draw);
        addEventListener(MouseEvent.CLICK,change);
    }
    
    private function draw(e:Event):void
    {
        r1.rotate();
        r2.rotate();
        r3.rotate();
        
        c.draw(mouseX,mouseY);
        l.move();
        
        s.fade();
    }
    
    private function change(e:MouseEvent = null):void
    {
        if(r1) 
        {
            s.s.removeChild(r1);
            s.s.removeChild(r2);
            s.s.removeChild(r3);
            
        }
        
        r1 = new RotateColorShape(465 / 2,465 / 2, 200);
        r2 = new RotateColorShape(465 / 2,465 / 2, 200);
        r3 = new RotateColorShape(465 / 2,465 / 2, 200);
        
        r1.rotationSpeed = rndSign() * Math.PI / rndRange(60,130);
        r2.rotationSpeed = rndSign() * Math.PI / rndRange(60,130);
        r3.rotationSpeed = rndSign() * Math.PI / rndRange(60,130);
        
        r1.draw(0,0);
        r2.draw(0,0);
        r3.draw(0,0);
        
        r1.angle = 0;
        r2.angle = (Math.PI * 2) / 3;
        r3.angle = 4 * Math.PI / 3;
        
        
        s.s.addChild(r1);
        s.s.addChild(r2);
        s.s.addChild(r3);
        
        l.draw(0,0);
    }

}


class ColorShape extends Sprite
{
    public static var nextColor:int = 0;
    
    public function draw(nx:Number,ny:Number):void
    {
        blendMode = BlendMode.ADD;
        
        nextColor+= 8;
        
        range(nextColor,0,360);
        
        var color:int = new ColorHSV(nextColor, 1, 1).toRGB().value
        
        //0xFFFFFF * rnd();
        
        var g:Graphics = graphics;
        var rt:Number = rndRange(1.3,3);
        var rr:Number = rndRange(5,25);
        var rx:Number = rndRange(0,5) * rndSign();
        var ry:Number = rndRange(0,5) * rndSign();
        g.clear();
        g.lineStyle(rt,0xFFFFFF);
        
        var drawShape:Number = rnd();
        
        if(drawShape > .66)
            g.drawCircle(0,0,rr);
        else if(drawShape > .33)
        {
            g.drawRect(-rr,-rr,rr * 2, rr * 2);
        } else {
            g.moveTo(-rr,rr);
            g.lineTo(rr,rr);
            g.lineTo(0,-rr);
            g.lineTo(-rr,rr);
        }

        rotation = rnd() * 360;
        
        
        filters = [new GlowFilter(
            
            color
            ,1              // Alpha
            ,6 * rt        // BlurX
            ,6 * rt        // BlurY
            ,4             // Strength
            ,3
        )];
        
        x = nx + rx;
        y = ny + ry;
    }
}

class ColorLine extends ColorShape
{
    private var dir:int = 1;
    private var pos:Number = 0;
    
    override public function draw(nx:Number,ny:Number):void
    {
        super.draw(0,0);
        
    }
    
    public function move():void
    {
        pos += 2 * dir;
        if(pos >= 465)
        {
            pos = 465;
            dir = -1;
        } else if(pos <= 0) {
            pos = 0;
            dir = 1; 
        }
        
        x = y = 0;
        rotation = 0;
        
        var g:Graphics = graphics;
        g.clear();
        g.lineStyle(5,0xFFFFFF);
        g.moveTo(0,pos);
        g.lineTo(465,pos);
    }


}

class RotateColorShape extends ColorShape
{
    public var radius:Number = 90;
    public var px:Number = 200;
    public var py:Number = 200;
    public var angle:Number = 0;
    public var rotationSpeed:Number = Math.PI / 100;
    
    public function RotateColorShape(x:Number,y:Number,radius:Number)
    {
        px = x;
        py = y;
        this.radius = radius;
    }
    //rotate me in radians.
    public function rotate(value:Number = 0):void
    {
        angle += value == 0 ? rotationSpeed : value;
        range(angle, 0, Math.PI * 2);
        this.x = Math.cos(angle) * radius + px;
        this.y = Math.sin(angle) * radius + py;
    }
}






class ShadowSprite extends Sprite
{
    public var bmp:Bitmap;
    public var bmpdata:BitmapData;
    public var drawMe:Sprite;
    
    public function ShadowSprite(w:Number,h:Number)
    {
        bmpdata = new BitmapData(w, h,false,0);
        bmp = new Bitmap(bmpdata);
        addChild(bmp);
        drawMe = new Sprite();
    }
    public function get g():Graphics
    {
        return drawMe.graphics;
    }
    public function get s():Sprite
    {
        return drawMe;
    }

    
    public function fade():void
    {
        var result:Sprite = new Sprite();
        result.addChild(bmp);
        bmp.transform.colorTransform = new ColorTransform(
            Vars.redMulti,
            Vars.greenMulti, 
            Vars.blueMulti, 
            Vars.alphaMulti, 
            Vars.redOffset, 
            Vars.greenOffset, 
            Vars.blueOffset,
            Vars.alphaOffset
        );
        result.addChild(drawMe);
        bmpdata.draw(result);
        addChild(bmp);
        bmp.transform.colorTransform = new ColorTransform();        
    }
}