Show
Ignore:
Timestamp:
12/05/07 18:15:26 (13 months ago)
Author:
gyuque
Message:

lang/actionscript/swfgmap: implemented spreading.

Location:
lang/actionscript/swfgmap/trunk
Files:
1 added
8 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/swfgmap/trunk/TestApp.as

    r2425 r2485  
    2121                         
    2222                        var T:Matrix = new Matrix(); 
    23                         T.rotate(0.1); 
     23                        T.rotate(0.2); 
    2424                        vp.setTransform(T); 
    2525                        setViewport(vp); 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as

    r2429 r2485  
    77        import gyuque.gmap.googlemaps.*; 
    88         
    9         public class GMapView extends MovieClip 
     9        public class GMapView extends MovieClip implements IDebugOut 
    1010        { 
    1111                private static const GOOGLE_LOGO_URL:String = "http://www.google.com/intl/ja_jp/mapfiles/poweredby.png"; 
     
    2020                public function GMapView(options:*) 
    2121                { 
    22 GMapCalc.DEFAULT_TILE_SIZE // compile focibly. remove later! 
    2322                        mBaseSprite = putBaseSprite(); 
    2423                        if (options.initial_size) 
     
    7574                protected function addGoogleMapLayer():Boolean 
    7675                { 
    77                         var lyr:Layer = new GMapMapLayer(this); 
     76                        var lyr:GMapMapLayer = new GMapMapLayer(this); 
     77                        lyr.debug_out = this; 
    7878                        mSuperLayer.push(lyr); 
    7979                         
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapViewport.as

    r2425 r2485  
    4040                } 
    4141                 
    42                 private function transformVectorScreenToView(x:Number, y:Number, out:Point):void 
     42                public function transformVectorScreenToView(x:Number, y:Number, out:Point):void 
    4343                { 
    4444                        out.x = x; 
     
    4848                } 
    4949                 
    50                 private function transformVectorViewToScreen(x:Number, y:Number, out:Point):void 
     50                public function transformVectorViewToScreen(x:Number, y:Number, out:Point):void 
    5151                { 
    5252                        out.x = x; 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/IMeshMap.as

    r2477 r2485  
    55        public interface IMeshMap 
    66        { 
    7                 function getCurrentPanning(out:Point) :void; 
     7                function getCurrentPanning(out:Point)  :void; 
     8                function get centerTileX()             :int; 
     9                function get centerTileY()             :int; 
    810                function resetPanning(tx:int, ty:int)  :void; 
    911                function setTileOffset(ox:int, oy:int) :void; 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/LayerManager.as

    r2413 r2485  
    33        public class LayerManager extends Layer 
    44        { 
    5                 import flash.display.DisplayObjectContainer; 
     5                import flash.display.*; 
    66                import flash.geom.Matrix; 
    77                 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/Math2D.as

    r2413 r2485  
    88                public static function transformNoMove(v:Point, M:Matrix):void 
    99                { 
    10                         var x:Number = v.x; 
    11                         var y:Number = v.y; 
     10                        var m:Matrix = M.clone(); 
     11                        m.tx = 0; 
     12                        m.ty = 0; 
    1213 
    13                         v.x = x*M.a + y*M.b; 
    14                         v.y = x*M.c + y*M.d; 
     14                        var res:Point = m.transformPoint(v); 
     15                        v.x = res.x; 
     16                        v.y = res.y; 
    1517                } 
    1618        } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/ViewportUpdater.as

    r2477 r2485  
    33        import flash.events.*; 
    44        import flash.utils.Timer; 
    5         import flash.geom.Point; 
     5        import flash.geom.*; 
    66         
    77        public class ViewportUpdater 
    88        { 
     9public var dout:IDebugOut; 
     10         
    911                private var mCurViewport:GMapViewport = null; 
    1012                private var mListener:IMeshMap; 
     
    5658                } 
    5759                 
    58                 private function spread(tx:int, ty:int):void 
     60                private static const AROUND_POS:Array = [0, 1, 0, -1]; 
     61                private function spread(tx:int, ty:int, nest:int = -1):Boolean 
    5962                { 
    60                         addLoadJob(tx    , ty - 1); 
    61                         addLoadJob(tx + 1, ty    ); 
    62                         addLoadJob(tx    , ty + 1); 
    63                         addLoadJob(tx - 1, ty    ); 
     63                        if (nest == -1) 
     64                        { 
     65                                for (var n:int = 0;n < 5;n++) 
     66                                { 
     67                                        if (!spread(tx, ty, n)) 
     68                                                break; 
     69                                } 
     70                                return false; 
     71                        } 
     72                         
     73                        var retval:Boolean = false; 
     74                        for (var i:int = 0;i < 4;i++) 
     75                        { 
     76                                var x:int = tx + AROUND_POS[i]; 
     77                                var y:int = ty + AROUND_POS[(i+3)%4]; 
     78                                 
     79                                if (nest == 0) 
     80                                { 
     81                                        if (isTileVisible(x, y) != T_INVISIBLE) 
     82                                        { 
     83                                                retval = true; 
     84                                                addLoadJob(x, y); 
     85                                        } 
     86                                } 
     87                                else 
     88                                        retval = spread(x, y, nest-1) || retval; 
     89                        } 
     90                         
     91                         
     92                         
     93                        return retval; 
    6494                } 
    6595                 
    6696                private function checkAndLoad(tx:int, ty:int):void 
    6797                { 
    68                         if (!mGHash.peek(tx, ty)) 
    69                         { 
    70                                 mGHash.poke(tx, ty, 1); 
     98                        if (mGHash.peek(tx, ty)) 
    7199                                mListener.loadTile(tx, ty); 
    72                         } 
    73100                } 
    74101                 
    75102                private function addLoadJob(tx:int, ty:int):void 
    76103                { 
    77                         mReqQueue.push(tx, ty, 1); 
     104                        if (!mGHash.peek(tx, ty)) 
     105                        { 
     106                                mGHash.poke(tx, ty, 1); 
     107                                mReqQueue.push(tx, ty, 1); 
     108 
     109                                dout.puts((tx-29095)+", "+(ty-12855)); 
     110                        } 
    78111                } 
    79112                 
     
    86119                        mListener.setTileOffset(tiledata.offset.x, tiledata.offset.y); 
    87120                         
    88                         checkAndLoad(tiledata.tile_index.x, tiledata.tile_index.y); 
     121                        addLoadJob(tiledata.tile_index.x, tiledata.tile_index.y); 
    89122                        spread(tiledata.tile_index.x, tiledata.tile_index.y); 
     123                } 
     124                 
     125                private static const T_INVISIBLE :int = 0; 
     126                private static const T_CLOSELY   :int = 1; 
     127                private static const T_VISIBLE   :int = 2; 
     128                private function isTileVisible(tx:int, ty:int):int 
     129                { 
     130                        if (!mListener) 
     131                                return T_INVISIBLE; 
     132                                 
     133                        var bx:Number = (tx - mListener.centerTileX) * GMapCalc.TILE_SIZE; 
     134                        var by:Number = (ty - mListener.centerTileY) * GMapCalc.TILE_SIZE; 
     135                         
     136                        var p:Point = new Point(); 
     137 
     138                        mListener.getCurrentPanning(p); 
     139                        bx += p.x; 
     140                        by += p.y; 
     141 
     142                        mCurViewport.transformVectorViewToScreen(bx, by, p); 
     143                         
     144                        var padding:Number = GMapCalc.TILE_SIZE*0.7; 
     145                        for (var i:int = 0;i < 2;i++) { 
     146                        if (p.x >= (-mCurViewport.width*0.5 - padding) && p.y >= (-mCurViewport.height*0.5 - padding) && p.x < (mCurViewport.width*0.5 + padding) && p.y < (mCurViewport.height*0.5 + padding)) 
     147                                return T_VISIBLE-i; 
     148                                 
     149                                padding *= 1.5; 
     150                        } 
     151                         
     152                        return T_INVISIBLE; 
    90153                } 
    91154        } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/googlemaps/GMapMapLayer.as

    r2477 r2485  
    1212                protected var mCenterTX:int; 
    1313                protected var mCenterTY:int; 
     14                 
     15                public function set debug_out(d:IDebugOut):void 
     16                { 
     17                        mVPobs.dout = d; 
     18                } 
    1419                 
    1520                public function GMapMapLayer(eventSrc:EventDispatcher) 
     
    7075                { 
    7176                        out.x = x; 
    72                         out.x = y; 
     77                        out.y = y; 
     78                } 
     79                 
     80                public function get centerTileX():int 
     81                { 
     82                        return mCenterTX; 
     83                } 
     84                 
     85                public function get centerTileY():int            
     86                { 
     87                        return mCenterTY; 
    7388                } 
    7489        }