package { import flash.display.Loader; import flash.display.MovieClip; import flash.events.AsyncErrorEvent; import flash.events.Event; import flash.filters.GlowFilter; import flash.geom.Rectangle; import flash.media.Camera; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.net.URLLoader; import flash.net.URLRequest; import flash.system.Security; import flash.text.AntiAliasType; import flash.text.TextField; import flash.text.TextFormat; import misc.StreamClient; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.materials.MovieMaterial; import org.papervision3d.materials.VideoStreamMaterial; import youtube.*; public class student_powerrail_PowerRailObjectLoader { public function student_powerrail_PowerRailObjectLoader() { //constructor } /* Loads image object such as jpg, png, gif */ public static function loadImageObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { var mat:BitmapFileMaterial = new BitmapFileMaterial("../assets/student/powerrail/" + xml.attribute("source")); mat.oneSide = false; mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); setProperties(obj, xml, view); return obj; } /* Loads text object, reads the contents of "source" inside xml */ public static function loadTextObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { var mc:MovieClip = new MovieClip(); var txt:TextField = new TextField(); txt.wordWrap = true; txt.width = xml.attribute("width"); txt.height = xml.attribute("height"); txt.multiline = true; txt.text = xml.attribute("source"); /* Create textformat with default settings */ var textformat:TextFormat = new TextFormat("Helvetica", 30, 0xFFFFFF,false,false,false,"http://www.power-rail.net/"); /* Try to load settings from xml. Default fontsize is 30, color 0xffffff */ if (xml.attribute("fontsize")) { textformat.size = xml.attribute("fontsize"); } /* Border check (default is border activated) */ if (xml.attribute("border") == "false") { txt.border = false; } else { txt.borderColor = 0xffffff; txt.border = true; } /* Color check */ if (xml.attribute("fontcolor")) { textformat.color = xml.attribute("fontcolor"); } /* Underline switch */ if (xml.attribute("underline")=="true") { textformat.underline = true; } txt.setTextFormat(textformat); txt.antiAliasType = AntiAliasType.ADVANCED; mc.addChild(txt); /* Glow if defined in xml */ if (xml.attribute("glow") == "true") { var glow:GlowFilter = new GlowFilter; glow.color = 0xff0000; glow.blurX = 7; glow.blurY = 7; mc.filters = [glow]; } /* Transparent background if defined in xml */ var mat:MovieMaterial; if (xml.attribute("transparency") == "true") { mat = new MovieMaterial(mc, true, false, true); } else { mat = new MovieMaterial(mc, false, false, true); } mat.doubleSided = true; mat.smooth = true; mat.tiled = true; mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"),4,4); setProperties(obj, xml, view); return obj; } /* Loads html object with the passed html file */ public static function loadHTMLObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { //dit werkt bijna: alleen bij het event wordt het resultaat niet goed in de txt gezet var txt:TextField = new TextField(); var html:URLLoader = new URLLoader(); html.addEventListener(Event.COMPLETE, function handler(evt:Event):void { txt.htmlText = "sd";// + evt.target.data; }); html.load(new URLRequest("../assets/student/powerrail/test.html")); var mc:MovieClip = new MovieClip(); txt.wordWrap = true; txt.width = 200; txt.height = 100; txt.multiline = true; txt.htmlText = "test: "; //txt.htmlText = html.data; //txt.text = xml.attribute("source"); txt.setTextFormat(new TextFormat("Arial", 36, 0xF2FF27,false,false,false,"http://www.power-rail.net/")); txt.antiAliasType = AntiAliasType.ADVANCED; mc.addChild(txt); var mat:MovieMaterial = new MovieMaterial(mc, true, true, true); mat.doubleSided = true; mat.smooth = true; mat.tiled = true; mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, 200, 100); setProperties(obj, xml, view); return obj; } /* Loads dae object */ public static function loadDaeObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailCollada { var obj:student_powerrail_PowerRailCollada = new student_powerrail_PowerRailCollada("../assets/student/powerrail/" + xml.attribute("source")); //TODO: Maak object clickable, misschien alle obj.faces interactive maken? of powerrail.collada.materials.interactive obj.scale = xml.attribute("scale"); setProperties(obj, xml, view); return obj; } /* Loads flash (SWF) object */ public static function loadSWFObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { // Materials var loader:Loader = new Loader(); var req:URLRequest = new URLRequest("../assets/student/powerrail/" + xml.attribute("source"));//"http://www.youtube.com/v/RH241a1bRkQ"); //loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); loader.load(req); var movie:MovieClip = new MovieClip();//new MovieClip("../assets/student/powerrail/test.swf"); //var textField:TextField = new TextField(); movie.addChild(loader); //height and width should be >0!!! //we could do something with transparency in the future var mat:MovieMaterial = new MovieMaterial(movie,false,true,false,new Rectangle(0,0,xml.attribute("height"),xml.attribute("height"))); //var frontMaterial:BitmapFileMaterial = new BitmapFileMaterial("../assets/student/powerrail/front.png"); mat.interactive = true; mat.animated = true; /*var loader:Loader = new Loader(); var req:URLRequest = new URLRequest("../assets/student/powerrail/" + xml.attribute("source")); loader.load(req); //loader.contentLoaderInfo.addEventListener(Event.COMPLETE, kaas) var mc:MovieClip = new MovieClip(); mc.addChild(loader); var mat:MovieMaterial = new MovieMaterial(mc, false, true, false, new Rectangle(0, 0, xml.attribute("width"), xml.attribute("height"))); mat.interactive = true;*/ var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); setProperties(obj, xml, view); return obj; } /* Loads movie (FLV) object */ public static function loadMovieObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { var connection:NetConnection = new NetConnection(); connection.connect(null); trace("../assets/student/powerrail/" + xml.attribute("source")); var stream:NetStream = new NetStream(connection); stream.client = new StreamClient(); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function asyncErrorHandler(event:AsyncErrorEvent):void { trace(event.text); }); //stream.checkPolicyFile = true; var video:Video = new Video(xml.attribute("width"), xml.attribute("height")); video.attachNetStream(stream); //this is a bit of a hack, better play a few seconds of silence instead! stream.play("../assets/student/powerrail/" + xml.attribute("source")); var mat:VideoStreamMaterial = new VideoStreamMaterial(video,stream); mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); //hack pt. 2 stream.pause(); stream.seek(60); obj.stream = stream; setProperties(obj, xml, view); return obj; } /* Loads the passed youtube stream object */ public static function loadYoutubeObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { Security.allowDomain("http://www.youtube.com"); Security.allowDomain("http://s.ytimg.com"); Security.allowDomain('gdata.youtube.com'); Security.allowInsecureDomain('gdata.youtube.com'); Security.allowInsecureDomain('www.youtube.com'); Security.loadPolicyFile("http://www.youtube.com/crossdomain.xml"); /*var myVideo:YouTubeVideo = new YouTubeVideo("http://youtube.com/watch?v=" + xml.attribute("source")); myVideo.addEventListener(YouTubeVideoEvent.COMPLETE, function handler(evt:YouTubeVideoEvent):void { trace(evt.video); });*/ //Security.allowDomain("http://s.ytimg.com"); // Materials var loader:Loader = new Loader(); var req:URLRequest = new URLRequest("http://www.youtube.com/v/" + xml.attribute("source")); //loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); loader.load(req); //loader.width = xml.attribute("width"); var movie:MovieClip = new MovieClip();//new MovieClip("../assets/student/powerrail/test.swf"); //movie.width = xml.attribute("width"); //var textField:TextField = new TextField(); movie.addChild(loader); /*var connection:NetConnection = new NetConnection(); connection.connect(null); var stream:NetStream = new NetStream(connection); //stream.checkPolicyFile = true; stream.play(stream); var video:Video = new Video(xml.attribute("width"), xml.attribute("height")); video.attachNetStream(stream);*?*/ var mat:MovieMaterial = new MovieMaterial(movie,false,true,false,new Rectangle(0,0,320,240)); //var frontMaterial:BitmapFileMaterial = new BitmapFileMaterial("../assets/student/powerrail/front.png"); mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); setProperties(obj, xml, view); return obj; /*var mat:VideoStreamMaterial = new VideoStreamMaterial(video,stream); mat.interactive = true; var obj:student_powerrail_PowerRailPlane = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); setProperties(obj, xml, view); return obj;*/ } /* Loads the webcam object */ public static function loadWebcamObject(xml:XML, view:student_powerrail_PowerRailView):student_powerrail_PowerRailPlane { var obj:student_powerrail_PowerRailPlane; var cam:Camera = Camera.getCamera(); if(cam) { //cam.setMode(640,480,30); var livevideo:Video = new Video(); livevideo.attachCamera(cam); var mat:MovieMaterial = new MovieMaterial(livevideo,false,true,false,new Rectangle(0,0,300,300)); mat.oneSide = false; mat.interactive = true; obj = new student_powerrail_PowerRailPlane(mat, xml.attribute("width"), xml.attribute("height"), 8, 8); } else { //we should put a basic "you do not have a webcam installed picture here"? } setProperties(obj, xml, view); return obj; } /* Reads the attributes from the xml and sets the object with the data */ private static function setProperties(obj:Object, xml:XML, view:student_powerrail_PowerRailView):void { var x:Number = xml.attribute("x"); x += view.x; var y:Number = xml.attribute("y"); y += view.y; var z:Number = xml.attribute("z"); z += view.z; obj.x = x; obj.y = y; obj.z = z; obj.rotationX = xml.attribute("rotationX"); obj.rotationY = xml.attribute("rotationY"); obj.rotationZ = xml.attribute("rotationZ"); obj.xml = xml; } } }