package
{
    import com.derschmale.fluid.FluidBitmap;
    
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.ColorTransform;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    [SWF(width="256", height="512", frameRate="30", backgroundColor="0x000000")]
    public class FluidsDemo extends Sprite
    {
        private var _fluids : FluidBitmap;
        
        [Embed(source="assets/images/fire.jpg")]
        private var _fireAsset : Class;
        
        private var _colourTransform : ColorTransform = new ColorTransform(1, 1.2, 1.6);
        private var _normalTransform : ColorTransform = new ColorTransform();
        
        public function FluidsDemo()
        {
            var textField : TextField;
            
            addChild(new _fireAsset());
            
            _fluids = new FluidBitmap(64, 128);
            _fluids.scaleX = _fluids.scaleY = 4;
            _fluids.blendMode = BlendMode.ADD;
            addChild(_fluids);
            
            textField = new TextField();
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.text = "CLICK - Show/Hide all channels";
            textField.textColor = 0xffffff;
            addChild(textField);
            
            // give it a smoke-like colour
            _fluids.transform.colorTransform = _colourTransform;
            addEventListener(Event.ENTER_FRAME, handleEnterFrame);
            stage.addEventListener(MouseEvent.CLICK, handleClick);
        }
        
        private function handleEnterFrame(event : Event) : void
        {
            _fluids.addDensity(_fluids.mouseX, _fluids.mouseY, 30);
            _fluids.addDensity(_fluids.mouseX+1, _fluids.mouseY, 30);
            _fluids.addDensity(_fluids.mouseX-1, _fluids.mouseY, 30);
            _fluids.addDensity(_fluids.mouseX, _fluids.mouseY+1, 30);
            _fluids.addDensity(_fluids.mouseX+1, _fluids.mouseY+1, 30);
            _fluids.addDensity(_fluids.mouseX, _fluids.mouseY-1, 30);
        }
        
        private function handleClick(event : MouseEvent) : void
        {
            _fluids.showAllChannels = !_fluids.showAllChannels;
            
            if (_fluids.showAllChannels) {
                _fluids.blendMode = BlendMode.NORMAL;
                _fluids.transform.colorTransform = _normalTransform;
            }
            else {
                _fluids.blendMode = BlendMode.ADD;
                _fluids.transform.colorTransform = _colourTransform;
            }
        }
    }
}