/zombie-stick-level-editor-workspace/level-editor/src/com/jxl/zombiestick/controls/GameObjectView.as

https://github.com/JesterXL/ZombieStick · ActionScript · 317 lines · 233 code · 48 blank · 36 comment · 21 complexity · 978841ac41da353308687a0057430353 MD5 · raw file

  1. package com.jxl.zombiestick.controls
  2. {
  3. import com.jxl.zombiestick.constants.subtypes.TerrainTypes;
  4. import com.jxl.zombiestick.vo.GameObjectVO;
  5. import flash.display.Graphics;
  6. import flash.display.Shape;
  7. import flash.display.Sprite;
  8. import flash.events.Event;
  9. import flash.events.KeyboardEvent;
  10. import flash.events.MouseEvent;
  11. import flash.ui.Keyboard;
  12. import mx.controls.Alert;
  13. import mx.core.UIComponent;
  14. import mx.events.CloseEvent;
  15. import spark.components.Image;
  16. public class GameObjectView extends UIComponent
  17. {
  18. private var _gameObject:GameObjectVO;
  19. private var gameObjectDirty:Boolean = false;
  20. private var selectedDirty:Boolean = false;
  21. public var dragging:Boolean = false;
  22. private var backgroundShape:Shape;
  23. private var borderShape:Shape;
  24. private var elevatorShape:Shape;
  25. private var imageView:Image;
  26. private var over:Boolean = false;
  27. public function GameObjectView()
  28. {
  29. super();
  30. init();
  31. }
  32. private function init():void
  33. {
  34. mouseChildren = false;
  35. mouseEnabled = true;
  36. tabChildren = false;
  37. tabEnabled = false;
  38. //addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
  39. addEventListener(MouseEvent.ROLL_OVER, onRollOver);
  40. addEventListener(MouseEvent.ROLL_OUT, onRollOut);
  41. }
  42. public function get gameObject():GameObjectVO {
  43. return _gameObject;
  44. }
  45. public function set gameObject(value:GameObjectVO):void
  46. {
  47. if(_gameObject)
  48. {
  49. _gameObject.removeEventListener("xChanged", onGameObjectChanged);
  50. _gameObject.removeEventListener("yChanged", onGameObjectChanged);
  51. _gameObject.removeEventListener("widthChanged", onGameObjectChanged);
  52. _gameObject.removeEventListener("heightChanged", onGameObjectChanged);
  53. _gameObject.removeEventListener("imageChanged", onGameObjectChanged);
  54. _gameObject.removeEventListener("selectedChanged", onGameObjectChanged);
  55. _gameObject.removeEventListener("visibleChanged", onGameObjectChanged);
  56. _gameObject.removeEventListener("subTypeChanged", onGameObjectChanged);
  57. }
  58. _gameObject = value;
  59. if(_gameObject)
  60. {
  61. _gameObject.addEventListener("xChanged", onGameObjectChanged);
  62. _gameObject.addEventListener("yChanged", onGameObjectChanged);
  63. _gameObject.addEventListener("widthChanged", onGameObjectChanged);
  64. _gameObject.addEventListener("heightChanged", onGameObjectChanged);
  65. _gameObject.addEventListener("imageChanged", onGameObjectChanged);
  66. _gameObject.addEventListener("selectedChanged", onGameObjectChanged);
  67. _gameObject.addEventListener("visibleChanged", onGameObjectChanged);
  68. _gameObject.addEventListener("subTypeChanged", onGameObjectChanged);
  69. }
  70. gameObjectDirty = true;
  71. invalidateProperties();
  72. }
  73. public function get selected():Boolean
  74. {
  75. if(gameObject)
  76. {
  77. return gameObject.selected;
  78. }
  79. else
  80. {
  81. return false;
  82. }
  83. }
  84. protected override function createChildren():void
  85. {
  86. super.createChildren();
  87. backgroundShape = new Shape();
  88. addChild(backgroundShape);
  89. borderShape = new Shape();
  90. addChild(borderShape);
  91. imageView = new Image();
  92. addChild(imageView);
  93. imageView.addEventListener(Event.COMPLETE, onImageLoaded);
  94. }
  95. protected override function commitProperties():void
  96. {
  97. super.commitProperties();
  98. if(selectedDirty)
  99. {
  100. selectedDirty = false;
  101. drawSelected();
  102. }
  103. if(gameObjectDirty)
  104. {
  105. gameObjectDirty = false;
  106. if(gameObject)
  107. {
  108. move(gameObject.x, gameObject.y);
  109. setActualSize(gameObject.width, gameObject.height);
  110. imageView.source = gameObject.image;
  111. invalidateDisplayList();
  112. }
  113. }
  114. }
  115. protected override function updateDisplayList(w:Number, h:Number):void
  116. {
  117. super.updateDisplayList(w, h);
  118. var g:Graphics;
  119. g = backgroundShape.graphics;
  120. g.clear();
  121. if(gameObject.image == null)
  122. {
  123. g.beginFill(0x666666, .5);
  124. g.drawRect(0, 0, Math.max(1, width), Math.max(1, height));
  125. }
  126. g.endFill();
  127. drawSelected();
  128. imageView.setActualSize(Math.max(1, width), Math.max(1, height));
  129. if(_gameObject && _gameObject.subType == TerrainTypes.ELEVATOR)
  130. {
  131. if(elevatorShape == null)
  132. {
  133. elevatorShape = new Shape();
  134. addChild(elevatorShape);
  135. }
  136. g = elevatorShape.graphics;
  137. g.clear();
  138. g.lineStyle(0, 0x000000);
  139. g.drawRect(0, 0, 100, 20);
  140. g.moveTo(0, 20);
  141. g.drawRect(0, 20, 100, 80);
  142. g.moveTo(0, Math.max(1, height - 100));
  143. g.drawRect(0, Math.max(1, height - 100), 100, 80);
  144. g.moveTo(0, Math.max(1, height - 20));
  145. g.drawRect(0, Math.max(1, height - 20), 100, 20);
  146. g.endFill();
  147. }
  148. else
  149. {
  150. if(elevatorShape)
  151. {
  152. elevatorShape.graphics.clear();
  153. removeChild(elevatorShape);
  154. }
  155. }
  156. }
  157. private function drawSelected():void
  158. {
  159. var g:Graphics = borderShape.graphics;
  160. g.clear();
  161. var MARGIN:Number = 2;
  162. var MARGIN2:Number = MARGIN * 2;
  163. if(selected)
  164. {
  165. g.lineStyle(2, 0x990000, 1, true);
  166. }
  167. else if(over)
  168. {
  169. g.lineStyle(0, 0xFFFF00, 1, true);
  170. }
  171. else if(over == false)
  172. {
  173. g.lineStyle(0, 0xFFFF00, .1, true);
  174. }
  175. g.drawRect(MARGIN, MARGIN, Math.max(1, width - MARGIN2), Math.max(1, height - MARGIN2));
  176. g.endFill();
  177. }
  178. private function onGameObjectChanged(event:Event):void
  179. {
  180. if(dragging)
  181. return;
  182. var gameObject:GameObjectVO = event.target as GameObjectVO;
  183. switch(event.type)
  184. {
  185. case "xChanged":
  186. x = gameObject.x;
  187. break;
  188. case "yChanged":
  189. y = gameObject.y;
  190. break;
  191. case "widthChanged":
  192. width = gameObject.width;
  193. break;
  194. case "heightChanged":
  195. height = gameObject.height;
  196. break;
  197. case "imageChanged":
  198. imageView.source = gameObject.image;
  199. break;
  200. case "selectedChanged":
  201. onSelectionChanged();
  202. break;
  203. case "visibleChanged":
  204. visible = gameObject.visible;
  205. break;
  206. case "subTypeChanged":
  207. invalidateDisplayList();
  208. break;
  209. }
  210. dispatchEvent(new Event("childSizeChanged"));
  211. }
  212. private function onSelectionChanged():void
  213. {
  214. selectedDirty = true;
  215. invalidateProperties();
  216. }
  217. /*
  218. private function onMouseDown(event:MouseEvent):void
  219. {
  220. if(dragging == false)
  221. {
  222. dragging = true;
  223. startDrag(false);
  224. addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  225. stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, false, 0, true);
  226. addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
  227. }
  228. }
  229. */
  230. private function onRollOver(event:MouseEvent):void
  231. {
  232. over = true;
  233. invalidateDisplayList();
  234. }
  235. private function onRollOut(event:MouseEvent):void
  236. {
  237. over = false;
  238. invalidateDisplayList();
  239. }
  240. /*
  241. private function onMouseMove(event:MouseEvent):void
  242. {
  243. gameObject.x = x;
  244. gameObject.y = y;
  245. event.updateAfterEvent();
  246. }
  247. private function onMouseUp(event:MouseEvent):void
  248. {
  249. if(dragging)
  250. {
  251. dragging = false;
  252. removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
  253. stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
  254. removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  255. stopDrag();
  256. gameObject.x = x;
  257. gameObject.y = y;
  258. }
  259. }
  260. */
  261. private function onImageLoaded(event:Event):void
  262. {
  263. gameObject.width = imageView.sourceWidth;
  264. gameObject.height = imageView.sourceHeight;
  265. setActualSize(imageView.sourceWidth, imageView.sourceHeight);
  266. }
  267. }
  268. }