PageRenderTime 56ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/2.0/arpg/src/arpg.as

http://as3chat.googlecode.com/
ActionScript | 758 lines | 602 code | 109 blank | 47 comment | 76 complexity | d6e42daa1fcbb78b183ff79d9caa05b7 MD5 | raw file
  1. package
  2. {
  3. import mx.core.ClassFactory;
  4. import as3isolib.display.IsoSprite;
  5. import as3isolib.display.IsoView;
  6. import as3isolib.display.primitive.IsoBox;
  7. import as3isolib.display.renderers.*;
  8. import as3isolib.display.scene.IsoGrid;
  9. import as3isolib.display.scene.IsoScene;
  10. import as3isolib.geom.IsoMath;
  11. import as3isolib.geom.Pt;
  12. import as3isolib.graphics.SolidColorFill;
  13. import as3isolib.graphics.Stroke;
  14. import com.gskinner.motion.GTween;
  15. import component.LoginJFrame;
  16. import component.MiniMap;
  17. import component.PlayerStatusContainer;
  18. import component.ToolContainer;
  19. import eDpLib.events.ProxyEvent;
  20. import flash.display.Sprite;
  21. import flash.events.Event;
  22. import flash.events.MouseEvent;
  23. import flash.net.URLLoader;
  24. import flash.net.URLRequest;
  25. import org.aswing.ASColor;
  26. import org.aswing.AsWingManager;
  27. import org.aswing.CursorManager;
  28. import org.aswing.GeneralListCellFactory;
  29. import org.aswing.JFrame;
  30. import org.aswing.JList;
  31. import org.aswing.JOptionPane;
  32. import org.aswing.JPanel;
  33. import org.aswing.JScrollPane;
  34. import org.aswing.JTextArea;
  35. import org.aswing.JWindow;
  36. import org.aswing.UIManager;
  37. import org.aswing.VectorListModel;
  38. import org.aswing.event.AWEvent;
  39. import org.myleft.UserListCell;
  40. import org.myleft.astar.AStar;
  41. import org.myleft.core.MyleftServer;
  42. import org.myleft.data.CharacterStatic;
  43. import org.myleft.data.Define;
  44. import org.myleft.data.TileMap;
  45. import org.myleft.data.User;
  46. import org.myleft.events.SocketConnectionEvent;
  47. import org.myleft.geom.IntPoint;
  48. import skins.ALookAndFeel;
  49. [SWF(backgroundColor="#869ca7")]//,frameRate="30"
  50. public class arpg extends Sprite
  51. {
  52. private var server:MyleftServer;
  53. private var param:Object;
  54. private var host:String = 'myleft.org';
  55. private var port:int = 8888;
  56. private var userJlist:JList
  57. private var model:VectorListModel = new VectorListModel;
  58. private var myinfo:User;
  59. private var time:Date;
  60. //????
  61. private var minimap:MiniMap;
  62. private var floorScene:IsoScene;
  63. private var mainScene:IsoScene;
  64. private var frontScene:IsoScene;
  65. //????
  66. private var view:IsoView;
  67. private var rectBox:IsoBox;
  68. private var heroBox:IsoSprite;
  69. private var boxfills:Array=[new SolidColorFill(0xff0000, .5), new SolidColorFill(0x00ff00, .5), new SolidColorFill(0x0000ff, .5), new SolidColorFill(0xff0000, .5), new SolidColorFill(0x00ff00, .5), new SolidColorFill(0x0000ff, .5)];
  70. //????
  71. private var tileSize:int=50;
  72. private var tileMap:TileMap;
  73. //??????
  74. private var currentPt:IntPoint;
  75. private var myGTween:GTween;
  76. //????
  77. private var mainWindow:JWindow;
  78. private var topContainer:JPanel;//????
  79. private var playerStatusContainer:PlayerStatusContainer;//?????
  80. private var toolContainer:ToolContainer;//?????
  81. private var scrollPane:JScrollPane;
  82. private var chatText:JTextArea;
  83. private var loginDialog:LoginJFrame;
  84. private var progressDialog:progressJFrame;
  85. private var mysound:mySound;
  86. private var xmlLoader:URLLoader;
  87. public function arpg()
  88. {
  89. AsWingManager.initAsStandard(this);
  90. CursorManager.getManager().showCustomCursor(CursorAnimation.defaultCursor);
  91. UIManager.setLookAndFeel(new ALookAndFeel());
  92. param = root.loaderInfo.parameters;
  93. if (param['host']) {
  94. host = param['host'];
  95. }
  96. if (param['port']) {
  97. port = param['port'];
  98. }
  99. myGTween=new GTween();
  100. this.cacheAsBitmap = true;
  101. currentPt=new IntPoint(1, 1);
  102. mysound = new mySound();
  103. loadmap("data/map01.xml");
  104. game_init();
  105. this.addChild(view);
  106. /** ??? **/
  107. playerStatusContainer=new PlayerStatusContainer;
  108. playerStatusContainer.mouseEnabled = false;
  109. playerStatusContainer.validate();
  110. this.addChild(playerStatusContainer);
  111. //????
  112. var userJframe:JFrame = new JFrame(this, "??????");
  113. userJframe.setClosable(false);
  114. userJframe.setResizable(false);
  115. userJlist = new JList(model, new GeneralListCellFactory(UserListCell,false,false));
  116. userJframe.setSizeWH(200, 300);
  117. userJframe.getContentPane().append(new JScrollPane(userJlist));
  118. userJframe.setLocationXY(0, playerStatusContainer.height);
  119. userJframe.show();
  120. myinfo = new User;
  121. /** ??? **/
  122. minimap = new MiniMap();
  123. minimap.mouseEnabled = false;
  124. minimap.x = stage.stageWidth - minimap.width;
  125. minimap.y = 0;
  126. this.addChild(minimap);
  127. /** ??? **/
  128. toolContainer=new ToolContainer();
  129. toolContainer.mouseEnabled=false;
  130. toolContainer.setSizeWH(stage.stageWidth, 30);
  131. toolContainer.y = stage.stageHeight - toolContainer.height;
  132. toolContainer.validate();
  133. this.addChild(toolContainer);
  134. //????
  135. chatText = new JTextArea;
  136. chatText.setWordWrap(true);
  137. chatText.setBackground(new ASColor(0, 0));
  138. chatText.setForeground(new ASColor(0xff0000));
  139. scrollPane = new JScrollPane(chatText);
  140. scrollPane.mouseEnabled = false;
  141. scrollPane.setSizeWH(300, 150);
  142. scrollPane.validate();
  143. scrollPane.y = toolContainer.y - scrollPane.height;
  144. this.addChild(scrollPane);
  145. toolContainer.messageText.addActionListener(sendFun);
  146. toolContainer.sendButton.addActionListener(sendFun);
  147. toolContainer.quitButton.addActionListener(quitFun);
  148. toolContainer.walkButton.addActionListener(function(e:AWEvent):void
  149. {
  150. var p:IntPoint;
  151. switch (heroBox.sprites[0].getDirection())
  152. {
  153. case 0: //x
  154. p=screenToMap(heroBox.x + tileSize, heroBox.y);
  155. break;
  156. case 1: //y
  157. p=screenToMap(heroBox.x, heroBox.y + tileSize);
  158. break;
  159. case 2: //-x
  160. p=screenToMap(heroBox.x - tileSize, heroBox.y);
  161. break;
  162. case 3: //-y
  163. p=screenToMap(heroBox.x, heroBox.y - tileSize);
  164. break;
  165. }
  166. if (tileMap.isWalkable(p.x, p.y))
  167. {
  168. myinfo.solution=[];
  169. myinfo.solution.push(p);
  170. if (myGTween && myGTween.position < 1)
  171. return;
  172. timeStart(null, myinfo);
  173. }
  174. });
  175. toolContainer.toggleButton.addActionListener(function(e:AWEvent):void
  176. {
  177. heroBox.sprites[0].toggleDirection();
  178. });
  179. toolContainer.upButton.addActionListener(function(e:AWEvent):void
  180. {
  181. heroBox.sprites[0].setDirection(3);
  182. });
  183. toolContainer.downButton.addActionListener(function(e:AWEvent):void
  184. {
  185. heroBox.sprites[0].setDirection(1);
  186. });
  187. toolContainer.leftButton.addActionListener(function(e:AWEvent):void
  188. {
  189. heroBox.sprites[0].setDirection(2);
  190. });
  191. toolContainer.rightButton.addActionListener(function(e:AWEvent):void
  192. {
  193. heroBox.sprites[0].setDirection(0);
  194. });
  195. time = new Date;
  196. var username:String = '??'+((Math.random()*1000)>>0)+time.getHours()+time.getSeconds()+time.getHours()
  197. loginDialog = new LoginJFrame(mainWindow, "??", true);
  198. loginDialog.setResizable(false);
  199. loginDialog.pack();
  200. loginDialog.usernameText.setText(username);
  201. loginDialog.setLocationXY((stage.stageWidth-loginDialog.width)*0.5, (stage.stageHeight-loginDialog.height)*0.5);
  202. loginDialog.loginButton.addActionListener(loginClickHandle);
  203. loginDialog.connectButton.addActionListener(connectClickHandle);
  204. loginDialog.hostText.setText(host.toString());
  205. loginDialog.portText.setText(port.toString());
  206. loginDialog.show();
  207. //???
  208. progressDialog = new progressJFrame(mainWindow, "???");
  209. progressDialog.pack();
  210. progressDialog.setLocationXY((stage.stageWidth-progressDialog.width)*0.5, (stage.stageHeight-progressDialog.height)*0.5);
  211. server = new MyleftServer;
  212. server.addEventListener(Define.CONNECT, eventHandle);
  213. server.addEventListener(Define.CLOSE, eventHandle);
  214. server.addEventListener(Define.EV_TYPE_AUTH_SUCCESS, eventHandle);
  215. server.addEventListener(Define.EV_TYPE_AUTH_FAILURE, eventHandle);
  216. server.addEventListener(Define.EV_TYPE_AUTH_OTHER_LOGIN, eventHandle);
  217. server.addEventListener(Define.EV_TYPE_USER_LOGIN, eventHandle);
  218. server.addEventListener(Define.EV_TYPE_USER_LOGOUT, eventHandle);
  219. server.addEventListener(Define.EV_TYPE_USER_ADD, eventHandle);
  220. server.addEventListener(Define.EV_TYPE_SYSTEM_MESSAGE, eventHandle);
  221. server.addEventListener(Define.EV_TYPE_PRIVATE_MESSAGE, eventHandle);
  222. server.addEventListener(Define.EV_TYPE_PUBLIC_MESSAGE, eventHandle);
  223. server.addEventListener(Define.EV_TYPE_CHANGE_ROOM, eventHandle);
  224. server.addEventListener(Define.EV_TYPE_ROOM_ADD, eventHandle);
  225. server.addEventListener(Define.EV_TYPE_MOVE, eventHandle);
  226. stage.addEventListener(Event.RESIZE, resizeHandler);
  227. }
  228. public function loadmap(url:String):void {
  229. if (!this.xmlLoader) this.xmlLoader = new URLLoader();
  230. this.xmlLoader.addEventListener(Event.COMPLETE, createData);
  231. this.xmlLoader.load(new URLRequest(url));
  232. }
  233. private function createData(e:Event):void {
  234. this.xmlLoader.removeEventListener(Event.COMPLETE, createData);
  235. XML.ignoreWhitespace = true;
  236. var mapdata:XML = new XML(e.target.data);
  237. var building:XMLList = mapdata.building.item;
  238. if (mapdata.grid.attribute('tileSize')) this.tileSize = mapdata.grid.attribute('tileSize');
  239. //????
  240. if (!tileMap) tileMap=new TileMap();
  241. tileMap.initialize(mapdata.grid.attribute('w'), mapdata.grid.attribute('h'));
  242. var a:IsoSprite=new IsoSprite();
  243. a.setSize(this.tileSize*2, this.tileSize*1/2, this.tileSize*1/2);
  244. a.moveTo(tileSize*3+10, tileSize*3+10, tileSize*1);
  245. a.sprites=[new Talisman()];
  246. mainScene.addChild(a);
  247. var pos:Array,size:Array;
  248. for each (var item:XML in building) {
  249. pos = item.attribute('pos').toString().split(',');
  250. size = item.attribute('size').toString().split(',');
  251. trace('walkable', item.attribute('walkable')!='0');
  252. tileMap.setWalkableRect(pos[0], pos[1], size[0], size[1], item.attribute('walkable')!='0');
  253. var b:IsoSprite=new IsoSprite();
  254. b.setSize(this.tileSize*size[0], this.tileSize*size[1], this.tileSize*size[2]);
  255. b.moveTo(tileSize*pos[0], tileSize*pos[1], tileSize*pos[2]);
  256. b.sprites=[Building[item.attribute('name')]];
  257. mainScene.addChild(b);
  258. trace(" item: "+ item.attributes().toString());
  259. }
  260. minimap.initialize(tileMap);
  261. }
  262. private function sendFun(e:AWEvent):void
  263. {
  264. if (toolContainer.messageText.getText().length>256)
  265. {
  266. JOptionPane.showMessageDialog("Hello", "????????256???");
  267. }
  268. else if (toolContainer.messageText.getText().length>0)
  269. {
  270. if (!userJlist.getSelectedValue() || userJlist.getSelectedValue().username=='???') {
  271. server.sendPublicMessage(toolContainer.messageText.getText());
  272. } else if (userJlist.getSelectedValue()) {
  273. server.sendPrivateMessage(User(userJlist.getSelectedValue()).username, toolContainer.messageText.getText());
  274. }
  275. toolContainer.messageText.setText("");
  276. }
  277. }
  278. private function quitFun(e:Event):void
  279. {
  280. server.logout();
  281. }
  282. private function eventHandle(e:SocketConnectionEvent):void
  283. {
  284. progressDialog.hide();
  285. //trace('eventHandle', e.type, e.body.toString());
  286. var o:XML = e.body;
  287. var msgStr:String;
  288. var date:Date;
  289. var dateStr:String;
  290. var i:int;
  291. if (o.attribute('timestamp').length()==1) {
  292. date = new Date(int(o.attribute('timestamp')) * 1000);
  293. } else {
  294. date = new Date();
  295. }
  296. dateStr = '<font color="#999999">[' + date.hours + ':' + date.minutes + ':' + date.seconds + ']</font>';
  297. var regex:RegExp = new RegExp("\\n", "gi");
  298. if (o.child('body').length()==1) {
  299. msgStr = o.body.toString();
  300. msgStr = msgStr.replace(regex, "<br>");
  301. //trace(msgStr);
  302. }
  303. switch(e.type)
  304. {
  305. case Define.CONNECT:
  306. loginDialog.setConnectEnabled(false);
  307. loginDialog.setLoginEnabled(true);
  308. break;
  309. case Define.EV_TYPE_AUTH_OTHER_LOGIN:
  310. this.mylogout();
  311. loginDialog.show();
  312. JOptionPane.showMessageDialog("Hello", o.message);
  313. break;
  314. case Define.CLOSE:
  315. this.mylogout();
  316. loginDialog.setConnectEnabled(true);
  317. loginDialog.setLoginEnabled(false);
  318. loginDialog.show();
  319. break;
  320. case Define.EV_TYPE_USER_ADD:
  321. case Define.EV_TYPE_USER_LOGIN:
  322. var user:User = new User(o.attribute('username'), createSprite(o.attribute('username'), o.attribute('x'), o.attribute('y')));
  323. //trace("append", o.username, o.x, o.y);
  324. user.nextpoint = user.point = new IntPoint(o.attribute('x'), o.attribute('y'));
  325. if (myinfo.username == o.attribute('username'))
  326. {
  327. myinfo = user;
  328. heroBox = myinfo.display;
  329. minimap.drawRole(myinfo.point);
  330. this.view.centerOnIso(heroBox);
  331. this.view.render();
  332. }
  333. else
  334. {
  335. mysound.play(mySound.online);
  336. //trace("append2", o.username, o.x, o.y);
  337. }
  338. model.append(user);
  339. this.mainScene.addChild(user.display);
  340. this.mainScene.render();
  341. break;
  342. case Define.EV_TYPE_USER_LOGOUT://??????
  343. for (i=0;i < model.getSize(); i++)
  344. {
  345. if (User(model.get(i)).username == o.attribute('username'))
  346. {
  347. deleteUser( User(model.get(i)) );
  348. break;
  349. }
  350. }
  351. this.mainScene.render();
  352. break;
  353. case Define.EV_TYPE_AUTH_SUCCESS:
  354. myinfo.username = o.attribute('username');
  355. server.username = o.attribute('username');
  356. mainScene.render();
  357. loginDialog.hide();
  358. this.mainScene.container.visible = true;
  359. JOptionPane.showMessageDialog("Hello", "????");
  360. break;
  361. case Define.EV_TYPE_AUTH_FAILURE:
  362. loginDialog.show();
  363. this.mainScene.container.visible = false;
  364. JOptionPane.showMessageDialog("Hello", o.message);
  365. break;
  366. case Define.EV_TYPE_SYSTEM_MESSAGE:
  367. chatText.setHtmlText( '<b>?????</b>' + msgStr + dateStr + "<br/>" + chatText.getHtmlText());
  368. break;
  369. case Define.EV_TYPE_PRIVATE_MESSAGE:
  370. var ismy:Boolean = false;
  371. var istomy:Boolean = false;
  372. if (myinfo.username==o.attribute('from')) {
  373. o.from = '<font color="#FF6600">?'+o.attribute('from')+'?</font>';
  374. ismy = true;
  375. }
  376. if (myinfo.username==o.to) {
  377. o.to = '<font color="#FF6600">?'+o.attribute('to')+'?</font>';
  378. istomy = true;
  379. }
  380. var toString:String =o.attribute('to') ? ' ? <b>'+ o.attribute('to') + '</b>' : '';
  381. if (ismy)
  382. {
  383. msgStr = '<font color="#0066FF">' + msgStr + '</font>';
  384. }
  385. if (istomy && !ismy)
  386. {
  387. mysound.play(mySound.msg);
  388. }
  389. chatText.setHtmlText( '<b>' + o.attribute('from') + '</b>'+ toString +' ?:' + msgStr + dateStr + "<br/>" + chatText.getHtmlText());
  390. for (i=0;i < model.getSize(); i++)
  391. {
  392. user = User(model.get(i));
  393. if (user.username == o.attribute('from'))
  394. {
  395. if (user.display) user.display.sprites[0].talk(msgStr);
  396. break;
  397. }
  398. }
  399. break;
  400. case Define.EV_TYPE_PUBLIC_MESSAGE:
  401. chatText.setHtmlText( '<b>' + o.attribute('from') + '</b> ?:' + msgStr + dateStr + "<br/>" + chatText.getHtmlText());
  402. for (i=0;i < model.getSize(); i++)
  403. {
  404. user = User(model.get(i));
  405. if (user.username == o.attribute('from'))
  406. {
  407. if (user.display) user.display.sprites[0].talk(msgStr);
  408. break;
  409. }
  410. }
  411. break;
  412. case Define.EV_TYPE_MOVE:
  413. //trace("EV_TYPE_MOVE");
  414. for (i=0;i < model.getSize(); i++)
  415. {
  416. //trace('username'+User(model.get(i)).username, 'from'+o.attribute('from'));
  417. if (User(model.get(i)).username == o.attribute('from') && o.attribute('from')!=myinfo.username)
  418. {
  419. //trace('????');
  420. User(model.get(i)).solution.push(new IntPoint(o.attribute('x'), o.attribute('y')));
  421. if (User(model.get(i)).gt && User(model.get(i)).gt.position<1 && User(model.get(i)).gt.position>0) return;
  422. timeStart(User(model.get(i)).gt, User(model.get(i)));
  423. //User(model.get(i)).display.moveTo(o.x * tileSize, o.y * tileSize, 0);
  424. //this.mainScene.render();
  425. break;
  426. }
  427. }
  428. break;
  429. case Define.EV_TYPE_CHANGE_ROOM:
  430. chatText.setHtmlText('<font color="#FF9900">??????'+o.attribute('name')+'?</font>');
  431. model.clear();
  432. model.append(new User('???'));
  433. break;
  434. }
  435. }
  436. //??
  437. private function connectClickHandle(e:AWEvent):void
  438. {
  439. progressDialog.setTitle('???...');
  440. progressDialog.show();
  441. server.connect(loginDialog.hostText.getText(), int(loginDialog.portText.getText()));
  442. }
  443. //??
  444. private function loginClickHandle(e:AWEvent):void
  445. {
  446. progressDialog.setTitle('???...');
  447. progressDialog.show();
  448. if (loginDialog.usernameText.getText().length>0 && loginDialog.passwordText.getText().length>0)
  449. {
  450. server.auth(loginDialog.usernameText.getText(), loginDialog.passwordText.getText(), 0);
  451. }
  452. else
  453. {
  454. server.anonymousAuth(0);
  455. }
  456. }
  457. //????
  458. private function sendMove(x:int, y:int):void
  459. {
  460. server.move(x, y);
  461. }
  462. //????
  463. private function mylogout():void
  464. {
  465. this.rectBox.moveTo(0, 0, 0);
  466. this.floorScene.render();
  467. myinfo.gt.paused = true;
  468. myinfo.clear();
  469. while (model.getSize())
  470. {
  471. deleteUser( User(model.get(0)) );
  472. }
  473. model.clear();
  474. //this.mainScene.removeAllChildren();
  475. this.mainScene.render();
  476. this.mainScene.container.visible = false;
  477. }
  478. private function deleteUser(user:User):void
  479. {
  480. var obj:IsoSprite;
  481. obj = IsoSprite(user.display);
  482. obj.removeAllChildren();
  483. this.mainScene.removeChild(obj);
  484. obj = null;
  485. model.remove(user);
  486. user = null;
  487. }
  488. //???
  489. private function game_init():void
  490. {
  491. /** ?? **/
  492. view=new IsoView();
  493. view.mouseEnabled = false;
  494. //view.autoUpdate = true;
  495. view.clipContent=true; //??
  496. //view.viewRenderers = [new ClassFactory(DefaultViewRenderer)];//,new ClassFactory(ViewBoundsRenderer)
  497. //view.setSize(300, 400);
  498. view.setSize(stage.stageWidth, stage.stageHeight);
  499. /** ?? ?? **/
  500. floorScene=new IsoScene();
  501. rectBox=new IsoBox();
  502. rectBox.fills=[null, null, null, null, null, new SolidColorFill(0xff0000, .5)];
  503. rectBox.setSize(tileSize, tileSize, 0);
  504. floorScene.addChild(rectBox);
  505. floorScene.render();
  506. view.addScene(floorScene);
  507. /** ?? ?? **/
  508. mainScene=new IsoScene();
  509. //mainScene.layoutEnabled = true;
  510. mainScene.hostContainer=this;
  511. var factory:ClassFactory=new ClassFactory(DefaultShadowRenderer);
  512. factory.properties={shadowColor: 0x000000, shadowAlpha: 0.3, drawAll: true};
  513. mainScene.styleRenderers=[factory];
  514. view.addScene(mainScene);
  515. //??
  516. frontScene = new IsoScene;
  517. var grid:IsoGrid=new IsoGrid();
  518. grid.showOrigin = false;
  519. grid.gridlines = new Stroke(0, 0xCCCCCC, 0.1);
  520. grid.cellSize=tileSize;
  521. grid.setGridSize(20, 20);
  522. grid.addEventListener(MouseEvent.CLICK, grid_mouseHandler);
  523. frontScene.addChild(grid);
  524. frontScene.render();
  525. view.addScene(frontScene);
  526. view.render();
  527. }
  528. //??????
  529. private function createSprite(username:String, x:int, y:int):IsoSprite
  530. {
  531. var spritex:IsoSprite=new IsoSprite();
  532. spritex.setSize(40, 40, 40);
  533. spritex.moveTo(x*tileSize, y*tileSize, 0);
  534. spritex.sprites=[new Character(username)];
  535. return spritex;
  536. }
  537. //????
  538. private function grid_mouseHandler(evt:ProxyEvent):void
  539. {
  540. var mEvt:MouseEvent=MouseEvent(evt.targetEvent);
  541. var pt:Pt=new Pt(mEvt.localX, mEvt.localY);
  542. IsoMath.screenToIso(pt);
  543. var goal:IntPoint=screenToMap(pt.x, pt.y);
  544. if (evt.type == MouseEvent.CLICK)
  545. {
  546. if (tileMap.isWalkable(goal.x, goal.y))
  547. {
  548. var a:AStar=new AStar(tileMap, myinfo.nextpoint, goal);
  549. myinfo.solution = a.solve();
  550. myinfo.solution.pop();
  551. if (myinfo.solution)
  552. {
  553. this.rectBox.moveTo(goal.x * tileSize, goal.y * tileSize, 0);
  554. this.floorScene.render();
  555. if (myinfo.gt && myinfo.gt.position < 1 && myinfo.gt.paused==false)
  556. {
  557. //trace('myinfo timeStart return ');
  558. return;
  559. }
  560. timeStart(myinfo.gt, myinfo);
  561. }
  562. }
  563. }
  564. }
  565. private function pointToDirection(p1:IntPoint, p2:IntPoint):int
  566. {
  567. if (p1.x < p2.x)
  568. {
  569. return 0;
  570. }
  571. else if (p1.y < p2.y)
  572. {
  573. return 1;
  574. }
  575. else if (p1.x > p2.x)
  576. {
  577. return 2;
  578. }
  579. else if (p1.y > p2.y)
  580. {
  581. return 3;
  582. }
  583. return this.heroBox.sprites[0].getDirection();
  584. }
  585. private function screenToMap(x:int, y:int):IntPoint
  586. {
  587. return new IntPoint((x / this.tileSize)>>0, (y / this.tileSize)>>0);//Math.floor uint
  588. }
  589. //????
  590. private function resizeHandler(e:Event):void
  591. {
  592. view.setSize(stage.stageWidth, stage.stageHeight);
  593. /** ??? **/
  594. minimap.x = stage.stageWidth - minimap.width;
  595. /** ??? **/
  596. toolContainer.y = stage.stageHeight - toolContainer.height;
  597. scrollPane.y = toolContainer.y - scrollPane.height;
  598. }
  599. //??
  600. private function timeStart(e:GTween, user:User):void
  601. {
  602. if (user.solution.length > 0)
  603. {
  604. if (user.username == myinfo.username)
  605. {
  606. var path:Array = user.solution.concat();
  607. path.push(user.nextpoint);
  608. minimap.drawPath(path);
  609. //minimap.drawPath(user.solution);
  610. }
  611. if (e==null)
  612. e=new GTween();
  613. e.target = user.display;
  614. e.paused = false;
  615. e.duration = 1;
  616. e.onComplete = function(event:GTween):void{
  617. //trace('onComplete', user.username);
  618. user.point = user.nextpoint;
  619. timeStart(event, user);
  620. };
  621. e.onChange = function():void
  622. {
  623. if (user.username == myinfo.username)
  624. {
  625. view.centerOnIso(heroBox);
  626. view.render();
  627. }
  628. mainScene.render();
  629. };
  630. //trace(user.solution[user.solution.length-1].x, user.solution[user.solution.length-1].y);
  631. user.nextpoint = user.solution.pop();
  632. if (user.username==myinfo.username) sendMove(user.nextpoint.x, user.nextpoint.y);
  633. var p1:IntPoint=screenToMap(user.point.x, user.point.y);
  634. //trace('.toString()',user.point.toString(), user.nextpoint.toString());
  635. //trace(user.display.sprites[0]);
  636. if (user.display) user.display.sprites[0].setDirection(pointToDirection(user.point, user.nextpoint));
  637. if (user.display && user.display.sprites[0].state != CharacterStatic.walk)
  638. if (user.display) user.display.sprites[0].walk();
  639. e.setValues({"y":user.nextpoint.y * tileSize, "x":user.nextpoint.x * tileSize});
  640. }
  641. else
  642. {
  643. if (user.display) user.display.sprites[0].stand();
  644. }
  645. if (user.username==myinfo.username) minimap.drawRole(user.point);
  646. mainScene.render();
  647. }
  648. }
  649. }