topical media & game development
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.