topical media & game development

talk show tell print

student-powerrail-PowerRailObjectLoader.ax

student-powerrail-PowerRailObjectLoader.ax (swf ) [ flash ] flex


  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 @ax-student-powerrail-PowerRailObjectLoader
          {
                  
                  public function @ax-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;
                  }
                  
          }
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.