/src/editor/ui/ObjectButton.as

https://github.com/initials/Ogmo-Editor
ActionScript | 160 lines | 136 code | 24 blank | 0 comment | 23 complexity | fee59e0a97493fbe55244990eef79783 MD5 | raw file
  1. package editor.ui
  2. {
  3. import editor.*;
  4. import editor.definitions.*;
  5. import editor.tools.object.*;
  6. import flash.display.Bitmap;
  7. import flash.display.BitmapData;
  8. import flash.display.Sprite;
  9. import flash.events.Event;
  10. import flash.events.MouseEvent;
  11. import flash.geom.Matrix;
  12. public class ObjectButton extends Sprite
  13. {
  14. static public const FOLDER:int = 0;
  15. static public const BACK:int = 1;
  16. static public const OBJECT:int = 2;
  17. static public const SIZE:int = 32;
  18. static public const FOLDER_IMAGE_SIZE:uint = 8;
  19. public var type:int;
  20. public var object:Object;
  21. private var _selected:Boolean;
  22. private var bitmap:Bitmap;
  23. private var selBox:SelBox;
  24. public function ObjectButton( type:int, object:Object )
  25. {
  26. this.type = type;
  27. this.object = object;
  28. _selected = false;
  29. selBox = new SelBox( SIZE, SIZE );
  30. selBox.visible = false;
  31. addChild( selBox );
  32. if (type == FOLDER)
  33. {
  34. var of:ObjectFolder = object as ObjectFolder;
  35. bitmap = new Ogmo.ImgFolder;
  36. if (of.loaded)
  37. loadedFolder();
  38. else
  39. of.loader.contentLoaderInfo.addEventListener( Event.COMPLETE, loadedFolder, false, 0, true );
  40. }
  41. else if (type == BACK)
  42. {
  43. bitmap = new Ogmo.ImgArrow;
  44. init();
  45. }
  46. else if (type == OBJECT)
  47. {
  48. var od:ObjectDefinition = object as ObjectDefinition;
  49. if (od.loaded)
  50. loadedObject();
  51. else
  52. od.loader.contentLoaderInfo.addEventListener( Event.COMPLETE, loadedObject, false, 0, true );
  53. }
  54. }
  55. private function loadedFolder( e:Event = null ):void
  56. {
  57. var of:ObjectFolder = object as ObjectFolder;
  58. if (of.bitmapData)
  59. {
  60. var matrix:Matrix = new Matrix;
  61. matrix.scale( FOLDER_IMAGE_SIZE / of.bitmapData.width, FOLDER_IMAGE_SIZE / of.bitmapData.height );
  62. matrix.translate( 4, 5 );
  63. bitmap.bitmapData.draw( of.bitmapData, matrix );
  64. }
  65. init();
  66. }
  67. private function loadedObject( e:Event = null ):void
  68. {
  69. var od:ObjectDefinition = object as ObjectDefinition;
  70. bitmap = new Bitmap( od.bitmapData );
  71. init();
  72. if (od == Ogmo.level.selObject)
  73. selected = true;
  74. }
  75. private function init():void
  76. {
  77. bitmap.scaleX = SIZE / bitmap.bitmapData.width;
  78. bitmap.scaleY = SIZE / bitmap.bitmapData.height;
  79. addChildAt( bitmap, 0 );
  80. addEventListener( Event.REMOVED_FROM_STAGE, destroy );
  81. addEventListener( MouseEvent.CLICK, onClick );
  82. addEventListener( MouseEvent.MOUSE_OVER, onMouseOver );
  83. addEventListener( MouseEvent.MOUSE_OUT, onMouseOut );
  84. }
  85. private function destroy( e:Event ):void
  86. {
  87. removeEventListener( Event.REMOVED_FROM_STAGE, destroy );
  88. removeEventListener( MouseEvent.CLICK, onClick );
  89. removeEventListener( MouseEvent.MOUSE_OVER, onMouseOver );
  90. removeEventListener( MouseEvent.MOUSE_OUT, onMouseOut );
  91. }
  92. public function get selected():Boolean
  93. {
  94. return _selected;
  95. }
  96. public function set selected( to:Boolean ):void
  97. {
  98. _selected = to;
  99. if (selBox)
  100. {
  101. selBox.setColor(0xFF00FF00);
  102. selBox.visible = to;
  103. }
  104. }
  105. private function onClick( e:MouseEvent ):void
  106. {
  107. if (type == FOLDER || type == BACK)
  108. Ogmo.windows.setObjectFolder( object as ObjectFolder );
  109. else
  110. {
  111. Ogmo.level.selObject = object as ObjectDefinition;
  112. Ogmo.windows.resetObjectsSelected();
  113. (Ogmo.level.currentLayer as ObjectLayer).setTool(new ToolObjectPaint(Ogmo.level.currentLayer as ObjectLayer));
  114. selected = true;
  115. }
  116. }
  117. private function onMouseOver( e:MouseEvent ):void
  118. {
  119. if (object is ObjectFolder)
  120. Ogmo.windows.windowObjectPalette.mouseText = (object as ObjectFolder).name;
  121. else if (object is ObjectDefinition)
  122. Ogmo.windows.windowObjectPalette.mouseText = (object as ObjectDefinition).name;
  123. if (!_selected)
  124. {
  125. selBox.setColor(0xFFFFFF00);
  126. selBox.visible = true;
  127. }
  128. }
  129. private function onMouseOut( e:MouseEvent ):void
  130. {
  131. Ogmo.windows.windowObjectPalette.mouseText = "";
  132. if (!_selected)
  133. selBox.visible = false;
  134. }
  135. }
  136. }