pbjExplorer lite ver.Base64
♥1 |
Line 221 |
Modified 2009-05-28 14:57:12 |
MIT License
archived:2017-03-05 14:49:34
ActionScript3 source code
/**
* Copyright zahir ( http://wonderfl.net/user/zahir )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ehz2
*/
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" verticalGap="3" width="465" height="465"
paddingBottom="0" paddingLeft="3" paddingRight="3" paddingTop="5"
backgroundColor="0x111111"
applicationComplete="init()" >
<mx:Style>
Button{
color: #FFFFFF;
textRollOverColor: #999999;
fillAlphas: 1.0, 1.0;
fillColors: #666666, #333333;
borderColor: #CCCCCC;
}
Label{
color: #CCCCCC;
fontFamily: Georgia;
}
TextArea{
color: #CCCCCC;
backgroundColor: #333333;
borderColor: #000000;
}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.utils.Base64Encoder;
import __AS3__.vec.Vector;
private var file:FileReference;
// パラメーター用配列
private var meta:Array;
private var params:Array;
private var inputs:Array;
private const br:String = "<br />";
private const sFont:String = "<font color=\"#";
private const _sFont:String = "\">";
private const eFont:String = "</font>";
private static const tab:String = "\t";
private static const tab2:String = "\t\t";
private static const tab3:String = "\t\t\t";
private static const tab4:String = "\t\t\t\t";
private const Name:uint = 0x00CCFF;
private const Type:uint = 0x00CC00;
private const Menbers:uint = 0xFF6600;
private var h:int;
private var __Name:String;
private function init():void{
var str:String = "";
str += "<a href=\"http://zahir.s69.coreserver.jp/air/pbjexplorer/pbjExplorer.air\">"
str += "<u><font color=\"#00CCFF\">Get pbjExplorer2</font></u>";
str += "</a>";
str += " AIR 1.5.1"
footer.htmlText = str;
param_txt.text = "pbjファイルをロードしてね";
h = cont.height -25;
viewparam();
Wonderfl.capture_delay( 1 );
}
private function viewparam():void{
param_txt.height = h;
exp_txt.height = 0;
}
private function viewexp():void{
param_txt.height = 0;
exp_txt.height = h;
}
//-------------------------------------------------------------------------
// pbjのロード
private function onLoad():void{
if(file != null) file = null;
file = new FileReference();
file.addEventListener(Event.SELECT, onSelect);
file.browse( [ new FileFilter("pbj File (*.pbj)", "*.pbj") ] );
}
private function onSelect( e:Event ):void{
file.addEventListener(Event.COMPLETE, onComp);
file.load();
}
private function onComp(e:Event):void{
readParam( file.data );
Export( file.data );
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// shaderのパラメータ群を取得
private function readParam( data:ByteArray ):void{
var s:Shader = new Shader( data );
meta = [];
params = [];
inputs = [];
for (var p:String in s.data) {
if(s.data[p] is ShaderParameter){
var o:Vector.<Object> = new Vector.<Object>();
for (var d:String in s.data[p])
o.push({"type":d, "value":s.data[p][d] });
params.push({ "name": p, "type":s.data[p].type, "values": sortParamValues( o ) });
}else if(s.data[p] is ShaderInput == false && s.data[p] is ShaderParameter == false){
meta.push({ "name":p, "value":s.data[p] });
}else{
inputs.push({ "name":p, "channels":s.data[p].channels });
}
}
params.sortOn( "name", Array.CASEINSENSITIVE );
inputs.sortOn("name", Array.CASEINSENSITIVE );
param_txt.htmlText = getMetaData();
param_txt.htmlText += getInputsHTML(inputs);
param_txt.htmlText += getParamsHTML(params);
}
private function sortParamValues( vec:Vector.<Object> ):Vector.<Object>{
var len:int = vec.length;
var _name:Object;
var _description:Object;
var _maxValue:Object;
var _minValue:Object;
var _defaultValue:Object;
for(var i:int = 0; i<len; i++){
if(vec[i].type == "name") _name = vec[i];
else if(vec[i].type == "description") _description = vec[i];
else if(vec[i].type == "maxValue") _maxValue = vec[i];
else if(vec[i].type == "minValue") _minValue = vec[i];
else if(vec[i].type == "defaultValue") _defaultValue = vec[i];
}
vec = new Vector.<Object>();
if(_name) vec.push(_name);
if(_description) vec.push(_description);
if(_maxValue) vec.push(_maxValue);
if(_minValue) vec.push(_minValue);
if(_defaultValue) vec.push(_defaultValue);
return vec;
}
private function getMetaData():String{
var str:String = "";
var _name:String;
var _nameSpace:String;
var _vendor:String;
var _version:String;
var _description:String;
var len:int = meta.length;
for(var i:int = 0; i<len; i++){
if(meta[i].name == "name"){ _name = "<b>" + meta[i].name + "</b> : " + meta[i].value + "\n"; __Name = meta[i].value;}
else if(meta[i].name == "namespace") _nameSpace = "<b>" + meta[i].name + "</b> : " + meta[i].value + "\n";
else if(meta[i].name == "vendor") _vendor = "<b>" + meta[i].name + "</b> : " + meta[i].value + "\n";
else if(meta[i].name == "version") _version = "<b>" + meta[i].name + "</b> : " + meta[i].value + "\n";
else if(meta[i].name == "description") _description = "<b>" + meta[i].name + "</b> : " + meta[i].value + "\n";
}
if(_name) str += _name;
if(_nameSpace) str += _nameSpace;
if(_vendor) str +=_vendor;
if(_version) str += _version;
if(_description ) str += _description;
str += br+br;
return str;
}
private function getInputsHTML( _arr:Array ):String{
var str:String = sFont + (0x00CC33).toString(16) + _sFont;
str += "/////////////////////////////////" + br;
str += "// Input's ////////////////////" + br;
str += "/////////////////////////////////" + eFont + br + br;
var len:int = _arr.length;
for(var i:int = 0; i<len; i++){
str += sFont + Name.toString(16) + _sFont + _arr[i].name + eFont;
str += " ( " + sFont + Type.toString(16) + _sFont + _arr[i].channels + eFont + " ) " + br;
}
str += br + br;
return str;
}
private function getParamsHTML( _arr:Array ):String{
var str:String = sFont + (0x00CC33).toString(16) + _sFont;
str += "/////////////////////////////////" + br;
str += "// Parameter's //////////////" + br;
str += "/////////////////////////////////" + eFont + br + br;
var len:int = _arr.length;
for(var i:int = 0; i<len; i++){
var lv:Vector.<Object> = _arr[i].values as Vector.<Object>;
str += sFont + Name.toString(16) + _sFont + _arr[i].name + eFont;
str += " ( " + sFont + Type.toString(16) + _sFont + _arr[i].type + eFont + " ) " + br;
str += "<" + br;
if(lv){
var l:int = lv.length;
for(var j:int=0; j<l; j++){
str += "\t\t" + sFont + Menbers.toString(16) + _sFont + lv[j].type + eFont + " : " + lv[j].value + br;
}
str += ">;" + br + br;
}
}
return str;
}
//-------------------------------------------------------------------------
// Exporter
private function Export( data:ByteArray ):void{
var enc:Base64Encoder = new Base64Encoder();
enc.encodeBytes( data );
var str2:String = "";
var b64:String = enc.toString();
var len:uint = b64.length;
for (var i:uint = 0; i < len; i++){
var sub:String = b64.substr(i, 1);
if (sub == "\n")
continue;
str2 += sub;
}
var str:String =
"class " + __Name + " extends Shader" + br +
"{" + br +
tab + "public function " + __Name + "():void" + br +
tab + "{" + br +
tab2 +"var dec:Base64Decoder = new Base64Decoder();" + br +
tab2 +"dec.decode( \"" + str2+ "\" );" + br +
tab2 +"this.byteCode = dec.toByteArray();" + br +
tab2 +"super(byteCode);" + br +
tab + "}"+ br +
"}";
exp_txt.htmlText = str;
}
]]>
</mx:Script>
<mx:HBox width="100%">
<mx:Label text="pbjExplorer lite" fontSize="16" fontWeight="bold" />
<mx:Spacer width="100%" />
<mx:Button id="p_btn" label="Params" click="viewparam();" />
<mx:Button id="e_btn" label="Export" click="viewexp();" />
<mx:Button label="load" click="onLoad()" />
</mx:HBox>
<mx:VDividedBox id="cont" width="100%" height="100%">
<mx:TextArea id="param_txt" width="100%" height="100%" editable="false" />
<mx:TextArea id="exp_txt" width="100%" height="100%" editable="false" />
</mx:VDividedBox>
<mx:Text id="footer" />
</mx:Application>