import flash.display.BitmapData; import flash.filters.DropShadowFilter; import flash.filters.GradientGlowFilter ; import flash.filters.DisplacementMapFilter; import flash.filters.BlurFilter; import flash.geom.Point; var mouseListener = new Object(); var perlinBmp:BitmapData = BitmapData.loadBitmap("displacement.jpg"); //perlinBmp.perlinNoise(200, 200, 10, 1, false, true, 1, false); var displacementMap:DisplacementMapFilter; var Photos = new Array(); var totalPhotos = 0; var movieLoaded = false; var shadowFilter = new DropShadowFilter(0, 45, 0x000000, 0.5, 30, 30, 1, 1, false, false, false); var blurFilter = new BlurFilter(5, 5, 3); var displacementFilter = new DisplacementMapFilter(perlinBmp, new Point(0, 0), 1, 1, 50, 50, "color"); var glowFilter = new GradientGlowFilter(0, 0, [0x000000, 0x000000], [0, 0.3], [0, 255], 30, 30, 1, 1, "outer"); mouseListener.onMouseUp = function() { for(i=0;i<_root.totalPhotos;i++) { _root.Photos[i].held = false; } } function getDistance(x1, y1, x2, y2) { var xDist = Math.round(x1 - x2); var yDist = Math.round(y1 - y2); var distance = Math.round(Math.sqrt((xDist * xDist) + (yDist * yDist))); return distance; } function bringToFront(topPhoto) { topPhoto.swapDepths(this.getNextHighestDepth()); } function rotate(photo) { var newAngle = Math.atan2((_root._xmouse-photo._x), (_root._ymouse-photo._y)) * (180.0 / Math.PI); photo._rotation = (-newAngle) + photo.cornerAngle; distance = getDistance(_root._xmouse, _root._ymouse, photo._x, photo._y); photo._xscale = distance*0.8; photo._yscale = distance*0.8; if(photo._xscale < 50) photo._xscale = 50; if(photo._yscale < 50) photo._yscale = 50; if(photo._xscale > 250) photo._xscale = 250; if(photo._yscale > 250) photo._yscale = 250; } function addPhoto(image, imagew, imageh) { var current = Photos.length; imagew = Number(imagew); imageh = Number(imageh); // Container Photos[current] = _root.createEmptyMovieClip("Container"+current, this.getNextHighestDepth()); // Background var bitmapData = new BitmapData(imagew+20, imageh+20, true, 0xFFFFFFFF); Photos[current].Background = Photos[current].createEmptyMovieClip("Photo"+current, this.getNextHighestDepth()); Photos[current].Background.attachBitmap(bitmapData, this.getNextHighestDepth()); Photos[current].Background._x = -(imagew/2)-10; Photos[current].Background._y = -(imageh/2)-10; // Filters var photoFilters = new Array(); //photoFilters.push(shadowFilter); //photoFilters.push(blurFilter); //photoFilters.push(displacementFilter); photoFilters.push(glowFilter); Photos[current].filters = photoFilters; Photos[current]._x = random(Stage.width); Photos[current]._y = -50; Photos[current].direction = -360+random(360); Photos[current].initx = random(Stage.width); Photos[current].inity = random(Stage.height); Photos[current].init = true; Photos[current].held = false; Photos[current]._xscale = 80; Photos[current]._yscale = 80; Photos[current].cornerAngle = Math.atan2(((Photos[current]._x+Photos[current]._width)-Photos[current]._x), ((Photos[current]._y+Photos[current]._height)-Photos[current]._y)) * (180.0 / Math.PI); // Photo Image Photos[current].Image = Photos[current].createEmptyMovieClip("PhotoImage"+current, Photos[current].getNextHighestDepth()); Photos[current].Image.loadMovie("gallery/"+image); Photos[current].Image._x = -(imagew/2); Photos[current].Image._y = -(imageh/2); Photos[current].Image.loaded = false; // Handle var bitmapData = new BitmapData(30, 30, true, 0xFFFFFFFF); Photos[current].Handle = Photos[current].createEmptyMovieClip("Handle"+current, Photos[current].getNextHighestDepth()); Photos[current].Handle.attachBitmap(bitmapData, this.getNextHighestDepth()); //Photos[current].Handle = Photos[current].attachMovie("Handle", "Handle", Photos[current].getNextHighestDepth()); //Photos[current].Handle._x = imagew/2-20; //Photos[current].Handle._y = imageh/2-20; Photos[current].onEnterFrame = function() { if(this.Image._width > 0) this.Image.loaded = true; if(this.Image.loaded) { this.Image._width = imagew; this.Image._height = imageh; this.Handle._x = imagew/2-20; this.Handle._y = imageh/2-20; } else { this._y = -imageh; } if(this.init) { this.Handle._x = this.Image._width; if(this._y < this.inity-5) { this._y += (this.inity-this._y)/15; this._rotation+=(this.inity-this._y)/50; } else this.init = false; this.Handle._alpha = 0; } else { if(this.Handle._alpha < 100) this.Handle._alpha+=5; } //mouseDist = getDistance(_root._xmouse, _root._ymouse, this._x, this._y); //this.Image._alpha = 100-(mouseDist/10) * (100/this._xscale); if(this.held) { rotate(this); } } Photos[current].onPress = function() { this.init = false; bringToFront(this); if(Photos[current].Handle.hitTest(_root._xmouse, _root._ymouse, true)) this.held = true; else this.startDrag(); } Photos[current].onRelease = function() { this.held = false; this.stopDrag(); } _root.totalPhotos++; } // Loads in the list of images and spawn them function loadScript() { var XMLLoader = new XML(); XMLLoader.ignoreWhite = true; XMLLoader.onLoad = function() { for(node in XMLLoader.firstChild.childNodes) { thisNode = XMLLoader.firstChild.childNodes[node]; addPhoto(thisNode.attributes.thumb, thisNode.attributes.width, thisNode.attributes.height); } } XMLLoader.load("images.txt"); return true; } Mouse.addListener(mouseListener); loadScript();