package { import flash.utils.*; import flash.display.Sprite; import flash.events.*; import flash.ui.*; import flash.media.Sound; import flash.display.Bitmap; import flash.display.Sprite; import flash.display.BitmapData; import flash.net.URLLoader; import flash.net.URLRequest; import fl.controls.TextArea; import flash.display.Loader; import fl.transitions.*; import fl.transitions.easing.*; import flash.text.TextField; import flash.text.TextFormat; import fl.controls.ProgressBarDirection; import fl.controls.ProgressBarMode; //wow engine import fr.seraf.wow.primitive.*; import fr.seraf.wow.constraint.*; import fr.seraf.wow.core.WOWEngine; import fr.seraf.wow.core.data.WVector; import fr.seraf.wow.math.*; // Sandy import sandy.core.Scene3D; import sandy.core.data.*; import sandy.core.scenegraph.*; import sandy.materials.*; import sandy.materials.attributes.*; import sandy.primitive.*; import sandy.events.*; public class Example033 extends Sprite { private var wow:WOWEngine; private var net:Plane3D; private var arrayWSphere:Array = new Array(); private var arrayWConstraint:Array = new Array(); private var app02:Appearance; private var material03:MovieMaterial; private var scene:Scene3D; private var camera:Camera3D; private var mainCaption:TextField; private var captionText:TextField; private var totalImages:TextField; private var currentIndex:TextField; private var textFieldFormat:TextFormat; private var pLoad: preloader_mc; public var xmlLoader:URLLoader; private var xmlData:XML; private var bPhoto:butterfly_photo_mc; private var imageSprite:Sprite; /* Initialize imageLoader */ private var imageRequest:URLRequest; private var imageLoader:Loader; /* Arrays to store image filenames and image captions */ private var fileArray:Array; private var captionArray:Array; private var fileStr:String; /* Indexes */ private var fileArrayLength:uint; private var currentImage:int; private var i:int; /* Caption text for whole image gallery */ private var mainCaptionText:String; public function Example033() { //create an instance of the physic engine wow=new WOWEngine(); // SELECTIVE is better for dealing with lots of little particles colliding, wow.collisionResponseMode = wow.SELECTIVE; // gravity -- particles of varying masses are affected the same wow.addMasslessForce (new WVector(0,1,0)); var plane01:WOWPlane = new WOWPlane(); plane01.setPosition (0,60,0); plane01.elasticity=0.4; plane01.friction=0.0; //wow.addParticle (plane01); // Sandy code camera = new Camera3D( 800, 800 ); camera.z = -200; camera.y = 50; camera.lookAt (0,0,0); var root:Group = createScene(); scene = new Scene3D( "scene", this, camera, root ); scene.light.setDirection(100, -350, 0); addEventListener ( Event.ENTER_FRAME, enterFrameHandler ); stage.addEventListener (MouseEvent.MOUSE_MOVE, mouseMovedHandler); stage.addEventListener (MouseEvent.MOUSE_DOWN, mouseClickedHandler); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); textFieldFormat = new TextFormat(); textFieldFormat.size = 32; textFieldFormat.italic = true; mainCaption = new TextField(); mainCaption.width = 600; mainCaption.height = 100; mainCaption.x = 100; mainCaption.y = 50; mainCaption.text = String(" "); mainCaption.setTextFormat(textFieldFormat,1,1); mainCaption.textColor = 0xFFFFFF; stage.addChild(mainCaption); captionText = new TextField(); captionText.width = 600; captionText.height = 50; captionText.x = 100; captionText.y = 650; stage.addChild(captionText); totalImages = new TextField(); totalImages.width = 75; totalImages.height = 50; totalImages.x = 100; totalImages.y = 475; stage.addChild(totalImages); currentIndex = new TextField(); currentIndex.width = 75; currentIndex.height = 50; currentIndex.x = 100; currentIndex.y = 475; stage.addChild(currentIndex); pLoad = new preloader_mc(); xmlLoader = new URLLoader(); xmlData = new XML(); fileArray = new Array(); captionArray = new Array(); fileArrayLength = 0; currentImage = 0; xmlLoader.addEventListener(Event.COMPLETE, LoadXML); xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, noFile); imageRequest = new URLRequest(); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener(Event.OPEN,openProgress); imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressFunction); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadImage); var xmlFileName:String = new String("butterfly-photos.xml"); /* Load filenames and image captions from file muotkatunturit-2003.xml */ xmlLoader.load(new URLRequest(xmlFileName)); } private function createScene ():Group { // Create the root Group var g:Group = new Group(); net = new Plane3D( "theNet", 100, 100, 9, 9, Plane3D.ZX_ALIGNED, "quad" ); net.y = 10; net.enableBackFaceCulling = false; imageSprite = new Sprite(); bPhoto = new butterfly_photo_mc(); var materialAttr01:MaterialAttributes = new MaterialAttributes( new LightAttributes( true, 0.01), new LineAttributes(1, 0xFFFFFF, 1) ); var material01:Material = new ColorMaterial( 0x990000, 1, materialAttr01 ); material01.lightingEnable = false; material03 = new MovieMaterial( new init_mc() ); material03.lightingEnable = true; app02 = new Appearance( material03 ); var app01:Appearance = new Appearance( material01 ); net.appearance = app02; // vertex of the pshere for (var i=0; i 0) { currentImage--; } else { currentImage = fileArrayLength - 1; } imageRequest = new URLRequest(xmlData.image.filename[currentImage]); trace(String(xmlData.image.filename[currentImage])); imageLoader.load(imageRequest); currentIndex.text = String(currentImage+1); textFieldFormat = new TextFormat(); textFieldFormat.size = 22; textFieldFormat.bold = true; textFieldFormat.font = "Arial"; textFieldFormat.font = "Comic Sans MS"; textFieldFormat.align = "center"; textFieldFormat.color = 0xFFFFFF; captionText.text = captionArray[currentImage]; captionText.setTextFormat(textFieldFormat,0,new String(captionArray[currentImage]).length); break; case 50: // v if(currentImage < (fileArrayLength-1)) { currentImage++; } else { currentImage = 0; } imageRequest = new URLRequest(xmlData.image.filename[currentImage]); imageLoader.load(imageRequest); currentIndex.text = String(currentImage+1); textFieldFormat = new TextFormat(); textFieldFormat.size = 22; textFieldFormat.bold = true; textFieldFormat.font = "Arial"; textFieldFormat.font = "Comic Sans MS"; textFieldFormat.align = "center"; textFieldFormat.color = 0xFFFFFF; captionText.text = captionArray[currentImage]; captionText.setTextFormat(textFieldFormat,0,new String(captionArray[currentImage]).length); break; } } private function enterFrameHandler ( event : Event ):void { //run the engine once wow.step (); for (var i=0; i imageSprite.width) { imageSprite.x =(bPhoto.width - imageSprite.width)*0.5; } if( bPhoto.height > imageSprite.height) { imageSprite.y = (bPhoto.height - imageSprite.height)*0.5; } } } }