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

Revision 1009, 6.9 KB checked in by dave, 10 years ago (diff)

fixed character names, click-through plants working, misc fixes

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        EnableMouse(false);
69        Update(0,null); // <-- calls inherited class update???
70        }
71
72    public function Hide(s:Bool) : Void
73    {
74        Hidden=s;
75        visible=!s;
76    }
77
78        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null)
79        {
80        EnableMouse(true);
81        MouseDownFunc=f;
82        MouseDownContext=c;
83                addEventListener(MouseEvent.MOUSE_DOWN, MouseDownCB);
84        }
85
86    public function MouseDownCB(e)
87    {
88        MouseDownFunc(MouseDownContext);
89    }
90
91        public function MouseUp(c:Dynamic, f:Dynamic -> Void=null)
92        {
93        EnableMouse(true);
94        MouseUpFunc=f;
95        MouseUpContext=c;
96                addEventListener(MouseEvent.MOUSE_UP, MouseUpCB);
97        }
98
99    public function MouseUpCB(e)
100    {
101        MouseUpFunc(MouseUpContext);
102    }
103
104        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null)
105        {
106        EnableMouse(true);
107        MouseOverFunc=f;
108        MouseOverContext=c;
109                addEventListener(MouseEvent.MOUSE_OVER, MouseOverCB);
110        }
111
112    public function MouseOverCB(e)
113    {
114        MouseOverFunc(MouseOverContext);
115    }
116
117        public function MouseOut(c:Dynamic, f:Dynamic -> Void=null)
118        {
119        EnableMouse(true);
120        MouseOutFunc=f;
121        MouseOutContext=c;
122                addEventListener(MouseEvent.MOUSE_OUT, MouseOutCB);
123        }
124
125    public function MouseOutCB(e)
126    {
127        MouseOutFunc(MouseOutContext);
128    }
129
130    public function SetDepth(s:Int)
131    {
132        parent.setChildIndex(this,s);
133        Depth=s;
134    }
135   
136    public function GetDepth() : Int
137    {
138        return Depth;
139    }
140
141    public function CentreMiddleBottom(s:Bool) : Void
142    {
143        DoCentreMiddleBottom=s;
144    }
145
146    function SetSize(x:Int,y:Int)
147    {
148        Width=x;
149        Height=y;
150        if (DoCentreMiddleBottom)
151        {
152            Centre.x=Width/2;
153            Centre.y=Height;           
154        }
155        else
156        {
157            Centre.x=Width/2;
158            Centre.y=Height/2;
159        }
160    }
161
162    public function EnableMouse(s:Bool)
163    {
164        mouseEnabled=s;
165        mouseChildren=s;
166    }
167
168        public function ChangeBitmap(t:TextureDesc)
169        {
170        var tex = cast(t,truffle.flash.FlashTextureDesc);
171        SetSize(tex.data.width,tex.data.height);
172                graphics.clear();
173                graphics.beginBitmapFill(tex.data);
174        graphics.drawRect(0,0,Width,Height);
175                graphics.endFill();
176        }
177
178    public function LoadFromURL(url:String)
179    {
180        var loader:Loader = new Loader();
181        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
182                                                  function(e:IOErrorEvent):Void
183                                                  { 
184                                                      trace(e.text+' '+url);
185                                                  });
186
187        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
188        loader.load(new URLRequest(url));
189    }
190   
191    function ImageLoaded(e:Event)
192    {       
193        e.target.content.smoothing = true;
194        var dupBitmap:Bitmap = new Bitmap(cast(e.target.content,Bitmap).bitmapData);
195        SetSize(cast(dupBitmap.width,Int),cast(dupBitmap.height,Int));
196                graphics.clear();
197                graphics.beginBitmapFill(dupBitmap.bitmapData);
198        graphics.drawRect(0,0,Width,Height);
199                graphics.endFill();   
200
201/*              graphics.lineStyle(1, 0x000000, 1);     
202        graphics.moveTo(0,0);
203        graphics.lineTo(Width/2,Height/2);
204        graphics.lineTo(Width,Height);
205        graphics.lineTo(0,Height);
206        graphics.lineTo(0,0);*/
207    }
208
209    /*public function ScreenPos()
210    {
211        var p:Point = Transform.transformPoint(new Point(0, 0));
212        return new Vec3(p.x,p.y,0);
213    }*/
214
215    public function SetPos(s:Vec2) { Pos=s; }
216        public function SetScale(s:Vec2) { MyScale=s; }
217        public function SetRotate(angle:Float) { Angle=angle; }
218    public function GetTx() : Dynamic { return Transform; }
219
220    public function TransformedPos() : Vec2
221    {
222        var p:Point = new Point(0,0);
223        p=Transform.transformPoint(p);
224        return new Vec2(p.x,p.y);
225    }
226   
227        public function Update(frame:Int, tx:Dynamic)
228        {
229        // we don't want to pass on the centering offset to the hierachy
230        Transform.identity();       
231        var tmp = new Matrix(Transform.a,Transform.b,Transform.c,Transform.d,
232           Transform.tx-Centre.x,Transform.ty-Centre.y);
233
234                Transform.rotate(Angle*(Math.PI/180));
235        Transform.scale(MyScale.x,MyScale.y);
236        Transform.translate(Pos.x,Pos.y);
237        if (tx!=null)
238                {
239            Transform.concat(tx);
240        }
241
242                tmp.rotate(Angle*(Math.PI/180));
243        tmp.scale(MyScale.x,MyScale.y);
244        tmp.translate(Pos.x,Pos.y);
245        if (tx!=null)
246                {
247            tmp.concat(tx);
248        }
249        transform.matrix = tmp;
250
251        //transform.matrix = Transform;
252        //x=x-Centre.x;
253        //y=y-Centre.y;
254        }
255}
Note: See TracBrowser for help on using the repository browser.