| 1 | package
|
|---|
| 2 | {
|
|---|
| 3 | import flash.display.*;
|
|---|
| 4 | import flash.text.*;
|
|---|
| 5 | import flash.events.*;
|
|---|
| 6 | import flash.net.URLRequest;
|
|---|
| 7 | import flash.geom.*;
|
|---|
| 8 | import mkmap.*;
|
|---|
| 9 |
|
|---|
| 10 | public class Viewer extends MovieClip
|
|---|
| 11 | {
|
|---|
| 12 | private var mCanvas:MCanvas;
|
|---|
| 13 | private var mTextInput:TextField;
|
|---|
| 14 | private var romkan:RomkanMiniAS = new RomkanMiniAS();
|
|---|
| 15 | private var mSearch:RomSearch;
|
|---|
| 16 | private var mSelectedStation:StationData;
|
|---|
| 17 | private var mShowingStation:StationData;
|
|---|
| 18 | private var mStData:StationSampleData = new StationSampleData();
|
|---|
| 19 |
|
|---|
| 20 | private var mOut:TextField;
|
|---|
| 21 | private var mLabelPool:Object;
|
|---|
| 22 | private var mLineList:Array;
|
|---|
| 23 |
|
|---|
| 24 | private var mMapLayer:GMapLayer;
|
|---|
| 25 |
|
|---|
| 26 | private var mDarkScreen:Sprite;
|
|---|
| 27 | private var mDarkCount:int;
|
|---|
| 28 | private var mDarkDir:int;
|
|---|
| 29 | private var mDarkTransform:ColorTransform = new ColorTransform(0.3, 0.3, 0.3, 1);
|
|---|
| 30 | private var mNoTransform:ColorTransform = new ColorTransform();
|
|---|
| 31 |
|
|---|
| 32 | private const DARK_IN:int = 1;
|
|---|
| 33 | private const DARK_OUT:int = -1;
|
|---|
| 34 |
|
|---|
| 35 | private var mCanvasZoom:ZoomController;
|
|---|
| 36 | private var mClearDelayed:int = 0;
|
|---|
| 37 | private var mPrevInputLength:int = 0;
|
|---|
| 38 |
|
|---|
| 39 |
|
|---|
| 40 | private var mArrowPool:SpritePool;
|
|---|
| 41 | private var mMapFade:FadeController;
|
|---|
| 42 | private var mMapArrowFade:FadeController;
|
|---|
| 43 |
|
|---|
| 44 | function Viewer()
|
|---|
| 45 | {
|
|---|
| 46 | mSelectedStation = null;
|
|---|
| 47 |
|
|---|
| 48 | mDarkScreen = createDarkScreen();
|
|---|
| 49 | mDarkScreen.alpha = 0;
|
|---|
| 50 | mDarkCount = 0;
|
|---|
| 51 | mDarkDir = 0;
|
|---|
| 52 | addChild(mDarkScreen);
|
|---|
| 53 |
|
|---|
| 54 | stage.align = StageAlign.TOP_LEFT;
|
|---|
| 55 | stage.scaleMode = StageScaleMode.NO_SCALE;
|
|---|
| 56 |
|
|---|
| 57 | var fmt:TextFormat = new TextFormat();
|
|---|
| 58 | fmt.size = 16;
|
|---|
| 59 |
|
|---|
| 60 | mOut = new TextField();
|
|---|
| 61 | mOut.y = 100;
|
|---|
| 62 | mOut.width = 300;
|
|---|
| 63 | mOut.height = 300;
|
|---|
| 64 | addChild(mOut);
|
|---|
| 65 | setupData();
|
|---|
| 66 |
|
|---|
| 67 | var icon:Loader = new Loader();
|
|---|
| 68 | var url:String = "lens.png";
|
|---|
| 69 | var urlReq:URLRequest = new URLRequest(url);
|
|---|
| 70 | icon.load(urlReq);
|
|---|
| 71 |
|
|---|
| 72 |
|
|---|
| 73 | mTextInput = new TextField();
|
|---|
| 74 | mTextInput.defaultTextFormat = fmt;
|
|---|
| 75 | mTextInput.type = TextFieldType.INPUT;
|
|---|
| 76 | mTextInput.border = true;
|
|---|
| 77 | mTextInput.borderColor = 0xa0afcc;
|
|---|
| 78 | mTextInput.background = true;
|
|---|
| 79 | mTextInput.backgroundColor = 0xffffff;
|
|---|
| 80 | mTextInput.x = 36;
|
|---|
| 81 | mTextInput.y = 9;
|
|---|
| 82 | mTextInput.height = 24;
|
|---|
| 83 | mTextInput.width = 200;
|
|---|
| 84 | mTextInput.addEventListener(Event.CHANGE, onSearchBoxChanged);
|
|---|
| 85 | mTextInput.addEventListener(KeyboardEvent.KEY_DOWN, onSearchBoxKeyDown);
|
|---|
| 86 |
|
|---|
| 87 | mCanvas = new MCanvas(900, 500, false, false);
|
|---|
| 88 | mCanvas.x = 48;
|
|---|
| 89 | mCanvas.y = 24;
|
|---|
| 90 | mCanvas.cacheAsBitmap = true;
|
|---|
| 91 | addChild(mCanvas);
|
|---|
| 92 | mCanvas.objectAdded = onCanvasObjectAdded;
|
|---|
| 93 |
|
|---|
| 94 | mLabelPool = {};
|
|---|
| 95 | mLineList = [];
|
|---|
| 96 | mCanvas.deserializeXML(ViewerSampleData.data);
|
|---|
| 97 | addEventListener(Event.ENTER_FRAME, onEnterFrame);
|
|---|
| 98 |
|
|---|
| 99 | mCanvasZoom = new ZoomController(mCanvas, 48, 24, 852/2, 476/2);
|
|---|
| 100 |
|
|---|
| 101 | mMapLayer = new GMapLayer(5, 3, 450, 250);
|
|---|
| 102 | mMapFade = new FadeController(mMapLayer, 6, false, -1, 9);
|
|---|
| 103 | addChild(mMapLayer);
|
|---|
| 104 | var map_arr:Sprite = makeArrowSprite();
|
|---|
| 105 | addChild(map_arr);
|
|---|
| 106 | map_arr.x = 450;
|
|---|
| 107 | map_arr.y = 250;
|
|---|
| 108 | map_arr.scaleX = 3;
|
|---|
| 109 | map_arr.scaleY = 3;
|
|---|
| 110 | mMapArrowFade = new FadeController(map_arr, 6, false, -1, 11);
|
|---|
| 111 |
|
|---|
| 112 | mArrowPool = new SpritePool();
|
|---|
| 113 | for (var i:int = 0;i < 10;i++)
|
|---|
| 114 | {
|
|---|
| 115 | var arr:Sprite = makeArrowSprite();
|
|---|
| 116 | arr.addEventListener(MouseEvent.CLICK, onArrowClick);
|
|---|
| 117 | arr.buttonMode = true;
|
|---|
| 118 | mCanvas.addChild(arr);
|
|---|
| 119 | mArrowPool.add(arr);
|
|---|
| 120 | }
|
|---|
| 121 |
|
|---|
| 122 | addChild(icon);
|
|---|
| 123 | addChild(mTextInput);
|
|---|
| 124 | }
|
|---|
| 125 |
|
|---|
| 126 | private function onArrowClick(e:MouseEvent):void
|
|---|
| 127 | {
|
|---|
| 128 |
|
|---|
| 129 | }
|
|---|
| 130 |
|
|---|
| 131 | private function onEnterFrame(event:Event):void
|
|---|
| 132 | {
|
|---|
| 133 | if (mSelectedStation == null)
|
|---|
| 134 | {
|
|---|
| 135 | mMapFade.dir = -1;
|
|---|
| 136 | mMapArrowFade.dir = -1;
|
|---|
| 137 | }
|
|---|
| 138 |
|
|---|
| 139 | if (mDarkDir != 0)
|
|---|
| 140 | {
|
|---|
| 141 | mDarkCount += mDarkDir;
|
|---|
| 142 | if (mDarkCount > 5)
|
|---|
| 143 | {
|
|---|
| 144 | mDarkCount = 5;
|
|---|
| 145 | mDarkDir = 0;
|
|---|
| 146 | if (mSelectedStation != null)
|
|---|
| 147 | {
|
|---|
| 148 | mMapFade.dir = 1;
|
|---|
| 149 | mMapArrowFade.dir = 1;
|
|---|
| 150 | }
|
|---|
| 151 | }
|
|---|
| 152 |
|
|---|
| 153 | if (mDarkCount < 0)
|
|---|
| 154 | {
|
|---|
| 155 | mDarkCount = 0;
|
|---|
| 156 | mDarkDir = 0;
|
|---|
| 157 | }
|
|---|
| 158 |
|
|---|
| 159 | mDarkScreen.alpha = Number(mDarkCount) * 0.14;
|
|---|
| 160 | }
|
|---|
| 161 |
|
|---|
| 162 | if (mClearDelayed > 0)
|
|---|
| 163 | {
|
|---|
| 164 | if (--mClearDelayed < 1)
|
|---|
| 165 | {
|
|---|
| 166 | highlightStationList(null);
|
|---|
| 167 | }
|
|---|
| 168 | }
|
|---|
| 169 | }
|
|---|
| 170 |
|
|---|
| 171 | private function createDarkScreen():Sprite
|
|---|
| 172 | {
|
|---|
| 173 | var s:Sprite = new Sprite();
|
|---|
| 174 | var g:Graphics = s.graphics;
|
|---|
| 175 | g.lineStyle();
|
|---|
| 176 | g.beginFill(0, 1);
|
|---|
| 177 | g.drawRect(0, 0, 900, 500);
|
|---|
| 178 | g.endFill();
|
|---|
| 179 |
|
|---|
| 180 | return s;
|
|---|
| 181 | }
|
|---|
| 182 |
|
|---|
| 183 | private function onCanvasObjectAdded(obj:CanvasObject):void
|
|---|
| 184 | {
|
|---|
| 185 | Sprite(obj).cacheAsBitmap = true;
|
|---|
| 186 | if (obj is MTitleBox)
|
|---|
| 187 | {
|
|---|
| 188 | var name:String = MTitleBox(obj).title;
|
|---|
| 189 | mLabelPool[name] = obj;
|
|---|
| 190 | }
|
|---|
| 191 | else if (obj is PolyLine)
|
|---|
| 192 | {
|
|---|
| 193 | var p:PolyLine = PolyLine(obj);
|
|---|
| 194 | if (p.title)
|
|---|
| 195 | {
|
|---|
| 196 | mLineList.push({polyline: p, flag: StationData.lineSymbolToFlag(p.title)});
|
|---|
| 197 | }
|
|---|
| 198 | }
|
|---|
| 199 | }
|
|---|
| 200 |
|
|---|
| 201 | private function setupData():void
|
|---|
| 202 | {
|
|---|
| 203 | var len:int = mStData.data.length;
|
|---|
| 204 | var i:int;
|
|---|
| 205 | mSearch = new RomSearch();
|
|---|
| 206 | for (i = 0;i < len;i++)
|
|---|
| 207 | {
|
|---|
| 208 | var st:StationData = mStData.data[i];
|
|---|
| 209 | mSearch.push(st.name, st.kana, st);
|
|---|
| 210 | }
|
|---|
| 211 |
|
|---|
| 212 |
|
|---|
| 213 | }
|
|---|
| 214 |
|
|---|
| 215 | private function onSearchBoxKeyDown(e:KeyboardEvent):void
|
|---|
| 216 | {
|
|---|
| 217 | mSelectedStation = null;
|
|---|
| 218 | if (e.keyCode == 27)
|
|---|
| 219 | {
|
|---|
| 220 | if (mTextInput.text != "")
|
|---|
| 221 | {
|
|---|
| 222 | mTextInput.text = "";
|
|---|
| 223 | onSearchBoxChanged(null);
|
|---|
| 224 | }
|
|---|
| 225 | }
|
|---|
| 226 | }
|
|---|
| 227 |
|
|---|
| 228 | private function onSearchBoxChanged(e:Event):void
|
|---|
| 229 | {
|
|---|
| 230 | mOut.text = "";
|
|---|
| 231 | var res:Array = mSearch.search(romkan.to_kana(mTextInput.text));
|
|---|
| 232 |
|
|---|
| 233 |
|
|---|
| 234 | var curLen:int = mTextInput.text.length;
|
|---|
| 235 |
|
|---|
| 236 | if (res == null && curLen > mPrevInputLength)
|
|---|
| 237 | mClearDelayed = 6;
|
|---|
| 238 | else
|
|---|
| 239 | highlightStationList(res);
|
|---|
| 240 |
|
|---|
| 241 | mPrevInputLength = curLen;
|
|---|
| 242 | }
|
|---|
| 243 |
|
|---|
| 244 | private function showMap():void
|
|---|
| 245 | {
|
|---|
| 246 | if (mSelectedStation == null || mShowingStation == mSelectedStation)
|
|---|
| 247 | return;
|
|---|
| 248 |
|
|---|
| 249 | mShowingStation = mSelectedStation;
|
|---|
| 250 | mMapLayer.showAround(mSelectedStation.lat, mSelectedStation.lng);
|
|---|
| 251 | }
|
|---|
| 252 |
|
|---|
| 253 | private function highlightStationList(stations:Array):void
|
|---|
| 254 | {
|
|---|
| 255 | var poslist:Array = null;
|
|---|
| 256 |
|
|---|
| 257 | if (stations != null)
|
|---|
| 258 | {
|
|---|
| 259 | mDarkDir = DARK_IN;
|
|---|
| 260 |
|
|---|
| 261 | if (stations.length <= 10)
|
|---|
| 262 | poslist = [];
|
|---|
| 263 | }
|
|---|
| 264 | else
|
|---|
| 265 | mDarkDir = DARK_OUT;
|
|---|
| 266 |
|
|---|
| 267 |
|
|---|
| 268 | mClearDelayed = 0;
|
|---|
| 269 | var o:Object;
|
|---|
| 270 | var toHighlight:Object = {};
|
|---|
| 271 | var hit_lines:uint = 0;
|
|---|
| 272 | if (stations != null)
|
|---|
| 273 | for each(o in stations)
|
|---|
| 274 | {
|
|---|
| 275 | var st:StationData = StationData(o);
|
|---|
| 276 | toHighlight[st.name] = st;
|
|---|
| 277 | hit_lines |= st.line_flag;
|
|---|
| 278 | }
|
|---|
| 279 |
|
|---|
| 280 | for each(o in mLabelPool)
|
|---|
| 281 | {
|
|---|
| 282 | var label:MTitleBox = MTitleBox(o);
|
|---|
| 283 | if (toHighlight[label.title] || stations == null)
|
|---|
| 284 | {
|
|---|
| 285 | if (poslist != null)
|
|---|
| 286 | {
|
|---|
| 287 | poslist.push(label.x);
|
|---|
| 288 | poslist.push(label.y + label.top);
|
|---|
| 289 | }
|
|---|
| 290 | label.transform.colorTransform = mNoTransform;
|
|---|
| 291 | label.showDotLabel(true);
|
|---|
| 292 | }
|
|---|
| 293 | else
|
|---|
| 294 | {
|
|---|
| 295 | label.transform.colorTransform = mDarkTransform;
|
|---|
| 296 | label.showDotLabel(false);
|
|---|
| 297 | }
|
|---|
| 298 | }
|
|---|
| 299 |
|
|---|
| 300 | if (stations == null)
|
|---|
| 301 | hit_lines = 0xffff;
|
|---|
| 302 |
|
|---|
| 303 | if (poslist != null && poslist.length == 2)
|
|---|
| 304 | {
|
|---|
| 305 | mSelectedStation = StationData(stations[0]);
|
|---|
| 306 | mCanvasZoom.pointZoom(poslist[0]+24, poslist[1]+12, 1);
|
|---|
| 307 | showMap();
|
|---|
| 308 | }
|
|---|
| 309 | else
|
|---|
| 310 | mCanvasZoom.center();
|
|---|
| 311 |
|
|---|
| 312 | for each(o in mLineList)
|
|---|
| 313 | {
|
|---|
| 314 | var p:PolyLine = PolyLine(o.polyline);
|
|---|
| 315 | var flg:uint = uint(o.flag);
|
|---|
| 316 | p.transform.colorTransform = ((flg & hit_lines) != 0) ? mNoTransform : mDarkTransform;
|
|---|
| 317 | }
|
|---|
| 318 |
|
|---|
| 319 | mArrowPool.show_bulk(poslist);
|
|---|
| 320 | }
|
|---|
| 321 |
|
|---|
| 322 | private function makeArrowSprite():Sprite
|
|---|
| 323 | {
|
|---|
| 324 | var s:Sprite = new Sprite();
|
|---|
| 325 | var g:Graphics = s.graphics;
|
|---|
| 326 |
|
|---|
| 327 | g.lineStyle(2, 0, 0.8);
|
|---|
| 328 | g.moveTo(0,0);
|
|---|
| 329 | g.lineTo(-10,-10);
|
|---|
| 330 | g.lineTo(-5,-10);
|
|---|
| 331 | g.lineTo(-5,-20);
|
|---|
| 332 | g.lineTo( 5,-20);
|
|---|
| 333 | g.lineTo( 5,-10);
|
|---|
| 334 | g.lineTo(10,-10);
|
|---|
| 335 | g.lineTo(0,0);
|
|---|
| 336 |
|
|---|
| 337 | g.lineStyle(1, 0xffdd66);
|
|---|
| 338 | g.beginFill(0xff8822);
|
|---|
| 339 | g.moveTo(0,0);
|
|---|
| 340 | g.lineTo(-10,-10);
|
|---|
| 341 | g.lineTo(-5,-10);
|
|---|
| 342 | g.lineTo(-5,-20);
|
|---|
| 343 | g.lineTo( 5,-20);
|
|---|
| 344 | g.lineTo( 5,-10);
|
|---|
| 345 | g.lineTo(10,-10);
|
|---|
| 346 | g.lineTo(0,0);
|
|---|
| 347 | g.endFill();
|
|---|
| 348 |
|
|---|
| 349 | return s;
|
|---|
| 350 | }
|
|---|
| 351 | }
|
|---|
| 352 | }
|
|---|