WallItem.as
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package wall
{
import away3d.core.base.SubGeometry;
import away3d.core.base.data.UV;
import away3d.entities.Mesh;
import away3d.events.MouseEvent3D;
import away3d.materials.AnimatedBitmapMaterial;
import away3d.materials.BitmapMaterial;
import away3d.materials.MaterialBase;
import away3d.primitives.Plane;
import com.greensock.TweenMax;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.GradientType;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.net.URLRequest;
public class WallItem extends Plane
{
private var url:String
private var bitMap0:BitmapMaterial
private var bitMap:AnimatedBitmapMaterial
private var ldr:Loader
private var urlR:URLRequest
private var _width:int
private var _height:int
private var _object:Object
private var _ratio:Number
private var _uv:Vector.<Number>
public function WallItem(data:Object)
{
Data=data;
_uv=new Vector.<Number>
url = data.thumb;
_width = data.thumbWidth;
_height = data.thumbHeight;
ldr = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,comp);
ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioerror);
urlR = new URLRequest(url);
_ratio = _width/_height;
if(_ratio>2){
_height *= 256/_width;
_width = 256;
}else{
_width *= 128/_height;
_height = 128;
}
super(null, _width, _height, 3,3, true);
this.mouseEnabled=true;
_uv= this.geometry.subGeometries[0].UVData;
createDefaultImage();
}
private function createDefaultImage():void
{
var mat:Matrix;
var colors:Array;
var alphas:Array;
var ratios:Array;
mat=new Matrix();
colors=[0xCCCCCC,0x000000];
alphas=[1,1];
ratios=[0,255];
mat.createGradientBox(256,128,-90);
var m:Sprite=new Sprite();
m.graphics.beginGradientFill(GradientType.LINEAR,colors,alphas,ratios,mat);
m.graphics.drawRect(0,0,256,128);
m.graphics.endFill();
var bit:BitmapData=new BitmapData(256,128);
bit.draw(m);
bitMap0 = new BitmapMaterial(bit,true,false,false);
//////////////UV manipulation
for(var i:int = 0;i<_uv.length;i++)
{
if(i%2 == 0)
_uv[i] *= (_width-1)/256;
else
_uv[i] *= (_height-1)/128
}
/////////////
this.material=bitMap0;
}
public function load():void
{
ldr.load(urlR);
}
public function set Data(e:Object):void
{
_object=e;
}
public function get Data():Object
{
return _object;
}
private function comp(e:Event):void
{
e.target.content.width = _width;
e.target.content.height = _height;
var a:BitmapData = new BitmapData(256,128,true);
a.draw(ldr);
bitMap0 = new BitmapMaterial(a,true,false,false);
//////////////UV manipulation
var v:Vector.<Number> = this.geometry.subGeometries[0].UVData;
for(var i:int = 0;i<v.length;i++)
{
v[i] = _uv[i]
}
/////////////
this.material = bitMap0;
}
private function ioerror(e:IOErrorEvent):void
{
trace(e);
}
}
}