source: scenarios/GerminationX/fungi/src/truffle/flash/FlashSprite.hx @ 976

Revision 976, 6.7 KB checked in by dave, 10 years ago (diff)

critters added and clamped excitement

Line 
1// t r u f f l e Copyright (C) 2010 FoAM vzw   \_\ __     /\
2//                                          /\    /_/    / / 
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU Affero General Public License as
5// published by the Free Software Foundation, either version 3 of the
6// License, or (at your option) any later version.
7//
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11// GNU Affero General Public License for more details.
12//
13// You should have received a copy of the GNU Affero General Public License
14// along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16package truffle.flash;
17
18import flash.display.Sprite;
19import flash.display.Bitmap;
20import flash.display.BitmapData;
21import flash.events.MouseEvent;
22import flash.events.Event;
23import flash.events.IOErrorEvent;
24import flash.geom.Matrix;
25import flash.geom.Point;
26import flash.net.URLRequest;
27import flash.display.Loader;
28import truffle.Vec2;
29import truffle.interfaces.Sprite;
30import truffle.interfaces.World;
31import truffle.interfaces.TextureDesc;
32
33class FlashSprite implements truffle.interfaces.Sprite, extends flash.display.Sprite
34{       
35    public var Pos:Vec2;
36    public var Width:Int;
37    public var Height:Int;
38    public var Angle:Float;
39    public var MyScale:Vec2;
40    public var Hidden:Bool;
41    public var Centre:Vec2;
42    var Transform:Matrix;
43    var Depth:Int;
44    var MouseDownFunc:Dynamic -> Void;
45    var MouseDownContext:Dynamic;
46    var MouseUpFunc:Dynamic -> Void;
47    var MouseUpContext:Dynamic;
48    var MouseOverFunc:Dynamic -> Void;
49    var MouseOverContext:Dynamic;
50    var MouseOutFunc:Dynamic -> Void;
51    var MouseOutContext:Dynamic;
52    var DoCentreMiddleBottom:Bool;
53
54        public function new(pos:Vec2, t:TextureDesc, midbot:Bool=false, viz=true)
55        {
56                super();
57        visible=viz;
58        Pos=pos;
59        Angle=0;
60        Depth=-1;
61        MyScale = new Vec2(1,1);
62        Transform = new Matrix();
63        Width=64;
64        Height=112;
65        Centre=new Vec2(0,0);
66        DoCentreMiddleBottom=midbot;
67        ChangeBitmap(t);
68        Update(0,null); // <-- calls inherited class update???
69        }
70
71    public function Hide(s:Bool) : Void
72    {
73        Hidden=s;
74        visible=!s;
75    }
76
77        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null)
78        {
79        MouseDownFunc=f;
80        MouseDownContext=c;
81                addEventListener(MouseEvent.MOUSE_DOWN, MouseDownCB);
82        }
83
84    public function MouseDownCB(e)
85    {
86        MouseDownFunc(MouseDownContext);
87    }
88
89        public function MouseUp(c:Dynamic, f:Dynamic -> Void=null)
90        {
91        MouseUpFunc=f;
92        MouseUpContext=c;
93                addEventListener(MouseEvent.MOUSE_UP, MouseUpCB);
94        }
95
96    public function MouseUpCB(e)
97    {
98        MouseUpFunc(MouseUpContext);
99    }
100
101        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null)
102        {
103        MouseOverFunc=f;
104        MouseOverContext=c;
105                addEventListener(MouseEvent.MOUSE_OVER, MouseOverCB);
106        }
107
108    public function MouseOverCB(e)
109    {
110        MouseOverFunc(MouseOverContext);
111    }
112
113        public function MouseOut(c:Dynamic, f:Dynamic -> Void=null)
114        {
115        MouseOutFunc=f;
116        MouseOutContext=c;
117                addEventListener(MouseEvent.MOUSE_OUT, MouseOutCB);
118        }
119
120    public function MouseOutCB(e)
121    {
122        MouseOutFunc(MouseOutContext);
123    }
124
125    public function SetDepth(s:Int)
126    {
127        parent.setChildIndex(this,s);
128        Depth=s;
129    }
130   
131    public function GetDepth() : Int
132    {
133        return Depth;
134    }
135
136    public function CentreMiddleBottom(s:Bool) : Void
137    {
138        DoCentreMiddleBottom=s;
139    }
140
141    function SetSize(x:Int,y:Int)
142    {
143        Width=x;
144        Height=y;
145        if (DoCentreMiddleBottom)
146        {
147            Centre.x=Width/2;
148            Centre.y=Height;           
149        }
150        else
151        {
152            Centre.x=Width/2;
153            Centre.y=Height/2;
154        }
155    }
156
157        public function ChangeBitmap(t:TextureDesc)
158        {
159        var tex = cast(t,truffle.flash.FlashTextureDesc);
160        SetSize(tex.data.width,tex.data.height);
161                graphics.clear();
162                graphics.beginBitmapFill(tex.data);
163        graphics.drawRect(0,0,Width,Height);
164                graphics.endFill();
165        }
166
167    public function LoadFromURL(url:String)
168    {
169        var loader:Loader = new Loader();
170        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
171                                                  function(e:IOErrorEvent):Void
172                                                  { 
173                                                      trace(e.text+' '+url);
174                                                  });
175
176        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
177        loader.load(new URLRequest(url));
178    }
179   
180    function ImageLoaded(e:Event)
181    {       
182        e.target.content.smoothing = true;
183        var dupBitmap:Bitmap = new Bitmap(cast(e.target.content,Bitmap).bitmapData);
184        SetSize(cast(dupBitmap.width,Int),cast(dupBitmap.height,Int));
185                graphics.clear();
186                graphics.beginBitmapFill(dupBitmap.bitmapData);
187        graphics.drawRect(0,0,Width,Height);
188                graphics.endFill();   
189
190/*              graphics.lineStyle(1, 0x000000, 1);     
191        graphics.moveTo(0,0);
192        graphics.lineTo(Width/2,Height/2);
193        graphics.lineTo(Width,Height);
194        graphics.lineTo(0,Height);
195        graphics.lineTo(0,0);*/
196    }
197
198    /*public function ScreenPos()
199    {
200        var p:Point = Transform.transformPoint(new Point(0, 0));
201        return new Vec3(p.x,p.y,0);
202    }*/
203
204    public function SetPos(s:Vec2) { Pos=s; }
205        public function SetScale(s:Vec2) { MyScale=s; }
206        public function SetRotate(angle:Float) { Angle=angle; }
207    public function GetTx() : Dynamic { return Transform; }
208
209    public function TransformedPos() : Vec2
210    {
211        var p:Point = new Point(0,0);
212        p=Transform.transformPoint(p);
213        return new Vec2(p.x,p.y);
214    }
215   
216        public function Update(frame:Int, tx:Dynamic)
217        {
218        // we don't want to pass on the centering offset to the hierachy
219        Transform.identity();       
220        var tmp = new Matrix(Transform.a,Transform.b,Transform.c,Transform.d,
221           Transform.tx-Centre.x,Transform.ty-Centre.y);
222
223                Transform.rotate(Angle*(Math.PI/180));
224        Transform.scale(MyScale.x,MyScale.y);
225        Transform.translate(Pos.x,Pos.y);
226        if (tx!=null)
227                {
228            Transform.concat(tx);
229        }
230
231                tmp.rotate(Angle*(Math.PI/180));
232        tmp.scale(MyScale.x,MyScale.y);
233        tmp.translate(Pos.x,Pos.y);
234        if (tx!=null)
235                {
236            tmp.concat(tx);
237        }
238        transform.matrix = tmp;
239
240        //transform.matrix = Transform;
241        //x=x-Centre.x;
242        //y=y-Centre.y;
243        }
244}
Note: See TracBrowser for help on using the repository browser.