PageRenderTime 57ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/DreamYourLevel/src/view/LevelEditorView.hx

https://code.google.com/p/dreamyour2dgame/
Haxe | 667 lines | 596 code | 51 blank | 20 comment | 74 complexity | 24dc911a34ba689af6bcdfd739174d2c MD5 | raw file
  1. package view;
  2. import events.ResizeEvent;
  3. import flash.display.DisplayObject;
  4. import flash.display.LineScaleMode;
  5. import flash.display.MovieClip;
  6. import flash.events.Event;
  7. import flash.events.KeyboardEvent;
  8. import flash.events.MouseEvent;
  9. import flash.filters.GlowFilter;
  10. import flash.geom.Point;
  11. import flash.geom.Rectangle;
  12. import flash.Lib;
  13. import graphic.RenderObject;
  14. import graphic.Scene;
  15. import gui.menu.MainMenuItem;
  16. import gui.menu.MenuItemType;
  17. import gui.menu.MenuBar;
  18. import flash.display.Sprite;
  19. import gui.menu.MenuItem;
  20. import model.LevelEditorModel;
  21. import model.LevelEditorModelEvent;
  22. import model.ModelUpdateType;
  23. import phx.Body;
  24. import phx.FlashDraw;
  25. import phx.Shape;
  26. import phx.Vector;
  27. import view.events.LevelEditorViewKeyboardEvent;
  28. import view.events.LevelEditorViewMouseEvent;
  29. /**
  30. * @author Damien Mabin
  31. */
  32. class LevelEditorView extends Sprite
  33. {
  34. private var m_Menu : MenuBar;
  35. private var m_LoadLevelItem : MenuItem;
  36. private var m_SaveLevelItem : MenuItem;
  37. private var m_Model : LevelEditorModel;
  38. private var m_InternalScene : Scene;
  39. private var m_Correspondance : Array<{ modelRO : RenderObject, internalRO : RenderObject }>;
  40. private var m_AskedSize : Point;
  41. private var m_LastDragPosition : Point;
  42. private var m_CreateROPanel : CreateRenderObjectPanel;
  43. private var m_PropertyPanel : PropertyPanel;
  44. private var m_ActionBar : ActionBar;
  45. private var m_PhysicPoints : Array<{ internalPoint : PhysicPoint, modelPoint : Vector }>;
  46. private var m_PhysWorldDisplay : Sprite;
  47. private var m_PhysWorldDrawer : FlashDraw;
  48. // Skin :
  49. static var s_MenuStyle = { backgroundColor : 0xBFCC85, backgroundAlpha : 1.0, borderColor : 0x748F74, borderAlpha : 1.0, foregroundColor : 0x88FFED9C, foregroundAlpha : 0.15};
  50. static var s_LevelEditorStyle = { backgroundColor : 0x454545 };
  51. static var s_RenderObjectSelectedFilter : GlowFilter = new GlowFilter(0xD9B500, 0.8, 10, 10, 5, 5, false);
  52. static var s_PhysPointSelectedFilter : GlowFilter = new GlowFilter(0x454545, 0.8, 10, 10, 5, 5, false);
  53. static var s_CreateROPanelStyle = { backgroundColor : 0x748F74, separatorColor : 0x454545, hightlightColor : 0xD9B500 };
  54. static var s_PropertyPanelStyle = { backgroundColor : 0x748F74, separatorColor : 0x454545, buttonBackgroundColor : 0xBFCC85, buttonForegroundColor : 0x88FFED9C };
  55. static var s_ActionBarStyle = { backgroundColor : 0x748F74, buttonBackgroundColor : 0xBFCC85, buttonForegroundColor : 0x88FFED9C };
  56. public function new(_Model:LevelEditorModel)
  57. {
  58. super();
  59. m_Model = _Model;
  60. m_AskedSize = new Point();
  61. m_LastDragPosition = new Point();
  62. m_Correspondance = new Array<{ modelRO : RenderObject, internalRO : RenderObject }>();
  63. m_PhysicPoints = new Array<{ internalPoint : PhysicPoint, modelPoint : Vector }>();
  64. m_PhysWorldDisplay = new Sprite();
  65. m_PhysWorldDrawer = new FlashDraw(m_PhysWorldDisplay.graphics);
  66. m_PhysWorldDrawer.drawCircleRotation = true;
  67. m_ActionBar = new ActionBar(m_Model, s_ActionBarStyle);
  68. // ************************************************************************************************
  69. // Top menu bar
  70. m_Menu = new MenuBar(s_MenuStyle);
  71. MainMenuItem.PADDINGSIZE = 0;
  72. // ------------------------------------------------
  73. // File menu :
  74. var fileTree : MainMenuItem = new MainMenuItem();
  75. // New project
  76. m_LoadLevelItem = new MenuItem(MenuItemType.CLASSIC, "Load level");
  77. m_LoadLevelItem.addEventListener(MouseEvent.MOUSE_DOWN, OnMouseEvent);
  78. fileTree.AddItem(m_LoadLevelItem);
  79. // Save project
  80. m_SaveLevelItem = new MenuItem(MenuItemType.CLASSIC, "Save level");
  81. m_SaveLevelItem.addEventListener(MouseEvent.MOUSE_DOWN, OnMouseEvent);
  82. fileTree.AddItem(m_SaveLevelItem);
  83. fileTree.m_Style = s_MenuStyle;
  84. fileTree.m_IsExtendableArrow = MainMenuItem.getDefaultIsExtendableArrow();
  85. fileTree.UpdateStyle();
  86. m_Menu.AddMenu("File", fileTree);
  87. // ------------------------------------------------
  88. // ************************************************************************************************
  89. // Create render object panel :
  90. m_CreateROPanel = new CreateRenderObjectPanel(s_CreateROPanelStyle);
  91. // ************************************************************************************************
  92. // Property panel : Display the properties of selected element :
  93. m_PropertyPanel = new PropertyPanel(s_PropertyPanelStyle);
  94. // ************************************************************************************************
  95. LoadModel();
  96. this.addChild(m_InternalScene);
  97. this.addChild(m_CreateROPanel);
  98. this.addChild(m_PropertyPanel);
  99. this.addChild(m_ActionBar);
  100. this.addChild(m_Menu);
  101. this.addEventListener(ResizeEvent.EVENT, OnResize);
  102. Lib.current.stage.addEventListener(Event.ENTER_FRAME, OnEnterFrameEvent);
  103. Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyboardEvent);
  104. Lib.current.stage.addEventListener(KeyboardEvent.KEY_UP, OnKeyboardEvent);
  105. m_Model.addEventListener(LevelEditorModelEvent.EVENT, OnModelUpdate);
  106. this.addEventListener(LevelEditorModelEvent.EVENT, OnModelUpdate);
  107. }
  108. private function OnKeyboardEvent(_Evt:KeyboardEvent):Void
  109. {
  110. switch(_Evt.type)
  111. {
  112. case KeyboardEvent.KEY_UP :
  113. {
  114. this.dispatchEvent(cast new LevelEditorViewKeyboardEvent(E_KeyboardInteractionType.KEY_UP, _Evt.keyCode));
  115. }
  116. case KeyboardEvent.KEY_DOWN :
  117. {
  118. this.dispatchEvent(cast new LevelEditorViewKeyboardEvent(E_KeyboardInteractionType.KEY_DOWN, _Evt.keyCode));
  119. }
  120. }
  121. }
  122. private function OnEnterFrameEvent(_Evt:Event):Void
  123. {
  124. m_InternalScene.Update(Std.int(1000/Lib.current.stage.frameRate));
  125. }
  126. private function OnModelUpdate(_Evt:LevelEditorModelEvent)
  127. {
  128. #if debug
  129. trace("View Update : " + _Evt.m_Type);
  130. #end
  131. switch(_Evt.m_Type)
  132. {
  133. case RELOAD_MODEL :
  134. {
  135. LoadModel();
  136. }
  137. case ADD_RENDER_OBJECT_TO_SELECTION(ro) :
  138. {
  139. for (corres in m_Correspondance)
  140. {
  141. if (corres.modelRO == ro)
  142. {
  143. corres.internalRO.filters = [s_RenderObjectSelectedFilter];
  144. break;
  145. }
  146. }
  147. if (m_Model.VUE_GetSelection(RenderObject).length == 1)
  148. {
  149. m_PropertyPanel.DisplayProperties(RenderObject, ro);
  150. }
  151. else
  152. {
  153. m_PropertyPanel.DisplayProperties(null, null);
  154. }
  155. }
  156. case ADD_PHYSIC_POINT_TO_SELECTION(pt) :
  157. {
  158. for (physPt in m_PhysicPoints)
  159. {
  160. if (physPt.modelPoint == pt)
  161. {
  162. physPt.internalPoint.filters = [s_PhysPointSelectedFilter];
  163. }
  164. }
  165. }
  166. case ADD_NEW_RENDER_OBJECT(ro) :
  167. {
  168. var internalRO : RenderObject = ro.Clone();
  169. m_Correspondance.push( { modelRO : ro, internalRO : internalRO } );
  170. m_InternalScene.AddRenderObject(internalRO);
  171. internalRO.addEventListener(MouseEvent.MOUSE_DOWN, OnRenderObjectMouseEvent);
  172. RedrawPhysicWorld();
  173. OnResize(new ResizeEvent(m_AskedSize.x, m_AskedSize.y));
  174. }
  175. case ADD_PHYSIC_POINT(previousPt, newPt) :
  176. {
  177. trace("TODO : Update view !");
  178. var index : Int = 0;
  179. for (corres in m_PhysicPoints)
  180. {
  181. if (corres.modelPoint == previousPt)
  182. {
  183. var internalPoint : PhysicPoint = new PhysicPoint();
  184. internalPoint.x = newPt.x;
  185. internalPoint.y = newPt.y;
  186. internalPoint.scaleX = 0.2;
  187. internalPoint.scaleY = 0.2;
  188. internalPoint.addEventListener(MouseEvent.MOUSE_DOWN, OnPhysicPointMouseEvent);
  189. m_PhysicPoints.insert(index, { modelPoint : newPt, internalPoint : internalPoint });
  190. var parent : Sprite = cast corres.internalPoint.parent;
  191. parent.addChildAt(internalPoint, index + 1);
  192. parent.graphics.clear();
  193. parent.graphics.lineStyle(1, 0x454545, 2.0, false, LineScaleMode.NONE);
  194. if (parent.numChildren > 1)
  195. {
  196. parent.graphics.moveTo(parent.getChildAt(1).x, parent.getChildAt(1).y);
  197. for (i in 1 ... parent.numChildren)
  198. {
  199. parent.graphics.lineTo(parent.getChildAt(i).x, parent.getChildAt(i).y);
  200. }
  201. parent.graphics.lineTo(parent.getChildAt(1).x, parent.getChildAt(1).y);
  202. }
  203. RedrawPhysicWorld();
  204. break;
  205. }
  206. index++;
  207. }
  208. }
  209. case REMOVE_RENDER_OBJECT_FROM_SELECTION(ro) :
  210. {
  211. for (corres in m_Correspondance)
  212. {
  213. if (corres.modelRO == ro)
  214. {
  215. corres.internalRO.filters = [];
  216. break;
  217. }
  218. }
  219. if (m_Model.VUE_GetSelection(RenderObject).length == 1)
  220. {
  221. m_PropertyPanel.DisplayProperties(RenderObject, ro);
  222. }
  223. else
  224. {
  225. m_PropertyPanel.DisplayProperties(null, null);
  226. }
  227. }
  228. case REMOVE_PHYSIC_POINT_FROM_SELECTION(pt) :
  229. {
  230. for (corres in m_PhysicPoints)
  231. {
  232. if (corres.modelPoint == pt)
  233. {
  234. corres.internalPoint.filters = [];
  235. break;
  236. }
  237. }
  238. }
  239. case MOVE_VIEW_POINT(pt) :
  240. {
  241. m_InternalScene.SetViewPoint(pt);
  242. }
  243. case MOVE_RENDER_OBJECT(ro) :
  244. {
  245. for (corres in m_Correspondance)
  246. {
  247. if (corres.modelRO == ro)
  248. {
  249. var p : Point = ro.GetPosition();
  250. corres.internalRO.SetPosition(p.x, p.y);
  251. var body = corres.internalRO.GetPhysicalBody();
  252. if (body != null)
  253. {
  254. m_InternalScene.GetWorld().sync(corres.internalRO.GetPhysicalBody());
  255. }
  256. RedrawPhysicWorld();
  257. break;
  258. }
  259. }
  260. if (m_Model.VUE_GetSelection(RenderObject).length == 1)
  261. {
  262. m_PropertyPanel.DisplayProperties(RenderObject, ro);
  263. }
  264. else
  265. {
  266. m_PropertyPanel.DisplayProperties(null, null);
  267. }
  268. }
  269. case MOVE_PHYSIC_POINT(pt) :
  270. {
  271. for (corres in m_PhysicPoints)
  272. {
  273. if (corres.modelPoint == pt)
  274. {
  275. corres.internalPoint.x = pt.x;
  276. corres.internalPoint.y = pt.y;
  277. var parent : Sprite = cast corres.internalPoint.parent;
  278. parent.graphics.clear();
  279. parent.graphics.lineStyle(1, 0x454545, 2.0, false, LineScaleMode.NONE);
  280. if (parent.numChildren > 1)
  281. {
  282. parent.graphics.moveTo(parent.getChildAt(1).x, parent.getChildAt(1).y);
  283. for (i in 1 ... parent.numChildren)
  284. {
  285. parent.graphics.lineTo(parent.getChildAt(i).x, parent.getChildAt(i).y);
  286. }
  287. parent.graphics.lineTo(parent.getChildAt(1).x, parent.getChildAt(1).y);
  288. }
  289. RedrawPhysicWorld();
  290. break;
  291. }
  292. }
  293. }
  294. case DELETE_RENDER_OBJECT(ro) :
  295. {
  296. for (corres in m_Correspondance)
  297. {
  298. if (corres.modelRO == ro)
  299. {
  300. m_InternalScene.RemoveRenderObject(corres.internalRO);
  301. m_Correspondance.remove(corres);
  302. RedrawPhysicWorld();
  303. break;
  304. }
  305. }
  306. }
  307. case PREPARE_RENDER_OBJECT_CREATION(name, file) :
  308. {
  309. m_CreateROPanel.SetSelectedRenderObject(name, file);
  310. }
  311. case UPDATE_RENDER_OBJECT_PROPERTIES(ro) :
  312. {
  313. for (corres in m_Correspondance)
  314. {
  315. if (corres.modelRO == ro)
  316. {
  317. corres.internalRO.name = ro.name;
  318. corres.internalRO.SetPosition(ro.GetPosition().x, ro.GetPosition().y);
  319. corres.internalRO.z = ro.z;
  320. corres.internalRO.scaleX = ro.scaleX;
  321. corres.internalRO.scaleY = ro.scaleY;
  322. corres.internalRO.rotation = ro.rotation;
  323. var internalBody:Body = corres.internalRO.GetPhysicalBody();
  324. var modelBody:Body = corres.modelRO.GetPhysicalBody();
  325. internalBody.isStatic == modelBody.isStatic;
  326. internalBody.setPos(modelBody.x, modelBody.y, modelBody.a);
  327. m_InternalScene.GetWorld().sync(internalBody);
  328. RedrawPhysicWorld();
  329. break;
  330. }
  331. }
  332. if (m_Model.VUE_GetSelection(RenderObject).length == 1)
  333. {
  334. m_PropertyPanel.DisplayProperties(RenderObject, m_Model.VUE_GetSelection(RenderObject)[0]);
  335. }
  336. else
  337. {
  338. m_PropertyPanel.DisplayProperties(null, null);
  339. }
  340. }
  341. case PREPARE_RENDER_OBJECT_PHYSIC_SHAPE_EDITION(ro) :
  342. {
  343. for (corres in m_Correspondance)
  344. {
  345. if (corres.modelRO == ro)
  346. {
  347. EnablePhysicShapeEdit(corres.internalRO);
  348. m_PropertyPanel.DisplayPropertiesForPhysics(RenderObject, ro);
  349. }
  350. else
  351. {
  352. corres.internalRO.alpha = 0.3;
  353. }
  354. }
  355. }
  356. case QUITE_RENDER_OBJECT_PHYSIC_SHAPE_EDITION(ro) :
  357. {
  358. if (m_PhysicPoints[0] != null)
  359. {
  360. m_InternalScene.m_SceneContent.removeChild(m_PhysicPoints[0].internalPoint.parent);
  361. while(m_PhysicPoints.length > 0)
  362. {
  363. m_PhysicPoints.pop();
  364. }
  365. m_PropertyPanel.DisplayProperties(null, null);
  366. }
  367. for (corres in m_Correspondance)
  368. {
  369. corres.internalRO.alpha = 1.0;
  370. }
  371. for (corres in m_Correspondance)
  372. {
  373. if (corres.modelRO == ro)
  374. {
  375. m_InternalScene.RemoveRenderObject(corres.internalRO);
  376. m_Correspondance.remove(corres);
  377. break;
  378. }
  379. }
  380. var internalRO : RenderObject = ro.Clone();
  381. m_Correspondance.push( { modelRO : ro, internalRO : internalRO } );
  382. m_InternalScene.AddRenderObject(internalRO);
  383. internalRO.addEventListener(MouseEvent.MOUSE_DOWN, OnRenderObjectMouseEvent);
  384. RedrawPhysicWorld();
  385. OnResize(new ResizeEvent(m_AskedSize.x, m_AskedSize.y));
  386. }
  387. case CHANGE_ZOOM(zoom):
  388. {
  389. m_InternalScene.SetZoom(zoom);
  390. }
  391. }
  392. }
  393. private function EnablePhysicShapeEdit(_ModelRO:RenderObject):Void
  394. {
  395. for (shape in _ModelRO.GetPhysicalBody().shapes.iterator())
  396. {
  397. switch(shape.type)
  398. {
  399. case Shape.POLYGON :
  400. {
  401. var shapeBackground:Sprite = new Sprite();
  402. var internalCenter : CenterPoint = new CenterPoint();
  403. internalCenter.scaleX = 0.3;
  404. internalCenter.scaleY = 0.3;
  405. internalCenter.x = 0;
  406. internalCenter.y = 0;
  407. shapeBackground.addChild(internalCenter);
  408. var ite:Vector = shape.polygon.verts;
  409. shapeBackground.graphics.moveTo(ite.x, ite.y);
  410. while (ite != null)
  411. {
  412. var polyPoint : PhysicPoint = new PhysicPoint();
  413. polyPoint.addEventListener(MouseEvent.MOUSE_DOWN, OnPhysicPointMouseEvent);
  414. polyPoint.scaleX = 0.2;
  415. polyPoint.scaleY = 0.2;
  416. polyPoint.x = ite.x;
  417. polyPoint.y = ite.y;
  418. shapeBackground.addChild(polyPoint);
  419. m_PhysicPoints.push({modelPoint : ite, internalPoint : polyPoint});
  420. shapeBackground.graphics.lineStyle(1, 0x454545, 2.0, false, LineScaleMode.NONE);
  421. shapeBackground.graphics.lineTo(ite.x, ite.y);
  422. ite = ite.next;
  423. }
  424. shapeBackground.graphics.lineTo(shape.polygon.verts.x, shape.polygon.verts.y);
  425. shapeBackground.x = _ModelRO.x;
  426. shapeBackground.y = _ModelRO.y;
  427. m_InternalScene.m_SceneContent.addChild(shapeBackground);
  428. }
  429. }
  430. }
  431. }
  432. /**
  433. * Erase all what we have previously in the view, and load the model (var m_Model)
  434. */
  435. public function LoadModel():Void
  436. {
  437. if (m_InternalScene != null)
  438. {
  439. this.removeChild(m_InternalScene);
  440. m_Correspondance = new Array<{ modelRO : RenderObject, internalRO : RenderObject }>();
  441. }
  442. m_InternalScene = new Scene();
  443. m_InternalScene.GetWorld().gravity = new Vector(0, 0);
  444. m_InternalScene.SetViewPoint(m_Model.VUE_GetViewPoint());
  445. m_InternalScene.SetZoom(m_Model.VUE_GetZoomLevel());
  446. m_InternalScene.m_PlayPhysic = false;
  447. this.addChild(m_InternalScene);
  448. m_InternalScene.m_SceneContent.addChild(m_PhysWorldDisplay);
  449. for (ro in m_Model.VUE_GetRenderObjects())
  450. {
  451. var internalRO : RenderObject = ro.Clone();
  452. m_Correspondance.push( { modelRO : ro, internalRO : internalRO } );
  453. m_InternalScene.AddRenderObject(internalRO);
  454. internalRO.addEventListener(MouseEvent.MOUSE_DOWN, OnRenderObjectMouseEvent);
  455. }
  456. RedrawPhysicWorld();
  457. m_InternalScene.addEventListener(MouseEvent.MOUSE_DOWN, OnSceneMouseEvent);
  458. m_InternalScene.addEventListener(MouseEvent.MOUSE_UP, OnSceneMouseEvent);
  459. m_InternalScene.addEventListener(MouseEvent.MOUSE_WHEEL, OnSceneMouseEvent);
  460. OnResize(new ResizeEvent(m_AskedSize.x, m_AskedSize.y));
  461. }
  462. private function RedrawPhysicWorld()
  463. {
  464. m_PhysWorldDisplay.graphics.clear();
  465. m_PhysWorldDrawer.drawWorld(m_InternalScene.GetWorld());
  466. }
  467. private function OnPhysicPointMouseEvent(_Evt:MouseEvent):Void
  468. {
  469. var modelPt : Vector = null;
  470. for (physicPt in m_PhysicPoints)
  471. {
  472. if (physicPt.internalPoint == _Evt.currentTarget)
  473. {
  474. modelPt = physicPt.modelPoint;
  475. break;
  476. }
  477. }
  478. if (modelPt != null)
  479. {
  480. switch(_Evt.type)
  481. {
  482. case MouseEvent.MOUSE_DOWN :
  483. {
  484. m_LastDragPosition.x = _Evt.stageX;
  485. m_LastDragPosition.y = _Evt.stageY;
  486. var tempoPoint : Point = new Point(_Evt.stageX, _Evt.stageY);
  487. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_DOWN, E_TargetType.PHYSIC_POINT, m_InternalScene.globalToLocal(tempoPoint));
  488. evt.m_Target = modelPt;
  489. this.dispatchEvent(evt);
  490. m_InternalScene.addEventListener(MouseEvent.MOUSE_MOVE, OnSceneMouseEvent);
  491. }
  492. default :
  493. {
  494. }
  495. }
  496. }
  497. }
  498. private function OnRenderObjectMouseEvent(_Evt:MouseEvent):Void
  499. {
  500. // On cherche sur quel element de la scene du modele on a cliqu?Š
  501. var modelRO : RenderObject = null;
  502. for (corres in m_Correspondance)
  503. {
  504. if (corres.internalRO == _Evt.target)
  505. {
  506. modelRO = corres.modelRO;
  507. break;
  508. }
  509. }
  510. if (modelRO != null)
  511. {
  512. switch(_Evt.type)
  513. {
  514. case MouseEvent.MOUSE_DOWN :
  515. {
  516. m_LastDragPosition.x = _Evt.stageX;
  517. m_LastDragPosition.y = _Evt.stageY;
  518. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_DOWN, E_TargetType.RENDER_OBJECT, m_InternalScene.globalToLocal(m_LastDragPosition));
  519. evt.m_Target = modelRO;
  520. this.dispatchEvent(evt);
  521. m_InternalScene.addEventListener(MouseEvent.MOUSE_MOVE, OnSceneMouseEvent);
  522. }
  523. default :
  524. {
  525. }
  526. }
  527. }
  528. }
  529. private function OnSceneMouseEvent(_Evt:MouseEvent):Void
  530. {
  531. switch(_Evt.type)
  532. {
  533. case MouseEvent.MOUSE_DOWN :
  534. {
  535. if (_Evt.target == m_InternalScene)
  536. {
  537. m_LastDragPosition.x = _Evt.stageX;
  538. m_LastDragPosition.y = _Evt.stageY;
  539. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_DOWN, E_TargetType.SCENE, m_InternalScene.globalToLocal(m_LastDragPosition));
  540. evt.m_Target = m_InternalScene;
  541. this.dispatchEvent(cast evt);
  542. m_InternalScene.addEventListener(MouseEvent.MOUSE_MOVE, OnSceneMouseEvent);
  543. }
  544. }
  545. case MouseEvent.MOUSE_MOVE :
  546. {
  547. var tempoPoint : Point = new Point(_Evt.stageX, _Evt.stageY);
  548. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_MOVE, E_TargetType.SCENE, m_InternalScene.globalToLocal(tempoPoint));
  549. evt.m_Target = m_InternalScene;
  550. evt.m_MouseMovement.x = tempoPoint.x - m_LastDragPosition.x;
  551. evt.m_MouseMovement.y = tempoPoint.y - m_LastDragPosition.y;
  552. this.dispatchEvent(cast evt);
  553. m_LastDragPosition = tempoPoint;
  554. }
  555. case MouseEvent.MOUSE_UP :
  556. {
  557. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_UP, E_TargetType.SCENE, m_InternalScene.globalToLocal(new Point(_Evt.stageX, _Evt.stageY)));
  558. evt.m_Target = m_InternalScene;
  559. this.dispatchEvent(cast evt);
  560. m_InternalScene.removeEventListener(MouseEvent.MOUSE_MOVE, OnSceneMouseEvent);
  561. }
  562. case MouseEvent.MOUSE_WHEEL :
  563. {
  564. var evt : LevelEditorViewMouseEvent = new LevelEditorViewMouseEvent(E_MouseInteractionType.MOUSE_WHEEL, E_TargetType.SCENE, m_InternalScene.globalToLocal(new Point(_Evt.stageX, _Evt.stageY)));
  565. evt.m_Target = m_InternalScene;
  566. evt.m_DeltaWheel = _Evt.delta;
  567. this.dispatchEvent(cast evt);
  568. }
  569. }
  570. }
  571. private function OnMouseEvent(_Evt:MouseEvent):Void
  572. {
  573. switch(_Evt.type)
  574. {
  575. case MouseEvent.MOUSE_DOWN :
  576. {
  577. if (_Evt.currentTarget == m_LoadLevelItem)
  578. {
  579. m_Menu.CollapseAll();
  580. m_Model.CTRL_LoadNewScene();
  581. }
  582. else if (_Evt.currentTarget == m_SaveLevelItem)
  583. {
  584. m_Menu.CollapseAll();
  585. m_Model.CTRL_SaveScene();
  586. }
  587. }
  588. default :
  589. {
  590. }
  591. }
  592. }
  593. private function OnResize(_Evt : ResizeEvent) : Void
  594. {
  595. m_AskedSize.x = _Evt.m_Width;
  596. m_AskedSize.y = _Evt.m_Height;
  597. this.graphics.beginFill(s_LevelEditorStyle.backgroundColor);
  598. this.graphics.drawRect(0, 0, _Evt.m_Width, _Evt.m_Height);
  599. var margin : Float = 5;
  600. m_Menu.dispatchEvent(new ResizeEvent(_Evt.m_Width, 30));
  601. m_Menu.x = 0;
  602. m_Menu.y = 0;
  603. m_CreateROPanel.x = margin;
  604. m_CreateROPanel.y = 30 + margin;
  605. m_CreateROPanel.dispatchEvent(new ResizeEvent(_Evt.m_Width * 0.25, (_Evt.m_Height - 30) * 0.5));
  606. m_PropertyPanel.x = m_CreateROPanel.x;
  607. m_PropertyPanel.y = m_CreateROPanel.y + m_CreateROPanel.height + margin;
  608. m_PropertyPanel.dispatchEvent(new ResizeEvent(_Evt.m_Width * 0.25, _Evt.m_Height - 30 - 2 * margin - 50 - margin - m_CreateROPanel.height-margin));
  609. m_InternalScene.x = m_CreateROPanel.x + _Evt.m_Width * 0.25 + margin;
  610. m_InternalScene.y = 30 + margin;
  611. m_InternalScene.dispatchEvent(new ResizeEvent(_Evt.m_Width * 0.6 - margin, _Evt.m_Height - 30 - 2 * margin - 50 - margin));
  612. m_ActionBar.x = m_InternalScene.x + _Evt.m_Width * 0.6;
  613. m_ActionBar.y = m_InternalScene.y;
  614. m_ActionBar.dispatchEvent(new ResizeEvent(_Evt.m_Width - m_ActionBar.x - margin, _Evt.m_Height - 30 - 2 * margin - 50 - margin));
  615. }
  616. }