PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/ASSource/iscript/gameFramework/IsoEngine/display/IsoBox.as

http://iscript.codeplex.com
ActionScript | 285 lines | 234 code | 42 blank | 9 comment | 10 complexity | 1156ebb4ba676d2745a7fe846cfe5460 MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, Apache-2.0
  1. package iscript.gameFramework.IsoEngine.display
  2. {
  3. import flash.display.BitmapData;
  4. import flash.display.DisplayObject;
  5. import flash.display.Sprite;
  6. import flash.geom.Point;
  7. import flash.geom.Vector3D;
  8. import iscript.gameFramework.IsoEngine.data.IsoConfig;
  9. import iscript.gameFramework.IsoEngine.util.IsoSkew;
  10. import iscript.gameFramework.IsoEngine.util.IsoUtil;
  11. import iscript.uiFramework.baseShape.Ball;
  12. public class IsoBox extends IsoObject
  13. {
  14. /**
  15. * FacePoint
  16. * ? ???? top right bottom left
  17. */
  18. private var bottomFacePoint:Vector.<Point>;
  19. private var frontFacePoint:Vector.<Point>;
  20. private var topFacePoint:Vector.<Point>;
  21. private var backFacePoint:Vector.<Point>;
  22. private var leftFacePoint:Vector.<Point>;
  23. private var rightFacePoint:Vector.<Point>;
  24. private var _topBitmap:BitmapData;
  25. private var _frontBitmap:BitmapData;
  26. private var _rightBitmap:BitmapData;
  27. //sin
  28. private var _degreesTop_Right:Number = 0.4472135954999579;
  29. private var _degreesTop_Left:Number = 0.4472135954999579;
  30. private var _container:Sprite;
  31. public function IsoBox(width:Number = 0, length:Number = 0, height:Number = 0)
  32. {
  33. super(0, width, length, height);
  34. _innerIsoOffX = -IsoConfig.IsoGridSize >> 1;
  35. _innerIsoOffZ = -IsoConfig.IsoGridSize >> 1;
  36. draw();
  37. addChild(new Ball(5));
  38. }
  39. public function setBoxSize(width:Number = 0, length:Number = 0, height:Number = 0):void
  40. {
  41. _width = width;
  42. _length = length;
  43. _height = height;
  44. draw();
  45. }
  46. override public function get width():Number
  47. {
  48. return super.width;
  49. }
  50. override public function set width(value:Number):void
  51. {
  52. super.width = value;
  53. _width = value;
  54. }
  55. override public function get height():Number
  56. {
  57. return super.height;
  58. }
  59. override public function set height(value:Number):void
  60. {
  61. super.height = value;
  62. draw();
  63. }
  64. override protected function draw():void
  65. {
  66. for (var i:int = numChildren - 1; i >= 0; i--)
  67. {
  68. removeChildAt(i);
  69. }
  70. bottomFacePoint = new Vector.<Point>();
  71. topFacePoint = new Vector.<Point>();
  72. frontFacePoint = new Vector.<Point>();
  73. backFacePoint = new Vector.<Point>();
  74. leftFacePoint = new Vector.<Point>();
  75. rightFacePoint = new Vector.<Point>();
  76. createBottomFace();
  77. createLeftFace();
  78. createBackFace();
  79. _container = new Sprite();
  80. addChild(_container);
  81. createRightFace();
  82. createFrontFace();
  83. createTopFace();
  84. updateScreenPosition();
  85. }
  86. public function createBottomFace():void
  87. {
  88. if (_width == 0)
  89. {
  90. bottomFacePoint.push(new Point(0, 0)); //Top Point
  91. bottomFacePoint.push(new Point(_size, _size >> 1)); //Right Point
  92. bottomFacePoint.push(new Point(0, _size)); //Bottom Point
  93. bottomFacePoint.push(new Point(-_size, _size >> 1)); //Left Point
  94. }
  95. else
  96. {
  97. var topPoint:Point = new Point(0, 0);
  98. var rightHeight:Number = _degreesTop_Right * _width;
  99. var rightWidth:Number = Math.sqrt(_width * _width - rightHeight * rightHeight);
  100. var rightPoint:Point = new Point(rightWidth, rightHeight);
  101. var leftHeight:Number = _degreesTop_Left * _length;
  102. var leftWidth:Number = -Math.sqrt(_length * _length - leftHeight * leftHeight);
  103. var leftPoint:Point = new Point(leftWidth, leftHeight);
  104. var bottomPoint:Point = new Point(leftWidth + rightWidth, leftHeight + rightHeight)
  105. bottomFacePoint.push(topPoint); //Top Point
  106. bottomFacePoint.push(rightPoint); //Right Point
  107. bottomFacePoint.push(bottomPoint); //Bottom Point
  108. bottomFacePoint.push(leftPoint); //Left Point
  109. }
  110. createFace("bottom", bottomFacePoint);
  111. }
  112. public function createLeftFace():void
  113. {
  114. leftFacePoint.push(new Point(bottomFacePoint[3].x, bottomFacePoint[3].y - _height));
  115. leftFacePoint.push(new Point(bottomFacePoint[0].x, bottomFacePoint[0].y - _height));
  116. leftFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y));
  117. leftFacePoint.push(new Point(bottomFacePoint[3].x, bottomFacePoint[3].y));
  118. createFace("left", leftFacePoint);
  119. }
  120. public function createBackFace():void
  121. {
  122. backFacePoint.push(new Point(bottomFacePoint[0].x, bottomFacePoint[0].y - _height));
  123. backFacePoint.push(new Point(bottomFacePoint[1].x, bottomFacePoint[1].y - _height));
  124. backFacePoint.push(new Point(bottomFacePoint[1].x, bottomFacePoint[1].y));
  125. backFacePoint.push(new Point(bottomFacePoint[0].x, bottomFacePoint[0].y));
  126. createFace("back", backFacePoint);
  127. }
  128. public function createFrontFace():void
  129. {
  130. frontFacePoint.push(new Point(bottomFacePoint[3].x, bottomFacePoint[3].y - _height)); //Top Left
  131. frontFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y - _height)); //Top Right
  132. frontFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y)); //Bottom Right
  133. frontFacePoint.push(new Point(bottomFacePoint[3].x, bottomFacePoint[3].y)); //Bottom Left
  134. createFace("front", frontFacePoint);
  135. }
  136. public function createRightFace():void
  137. {
  138. rightFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y - _height));
  139. rightFacePoint.push(new Point(bottomFacePoint[1].x, bottomFacePoint[1].y - _height));
  140. rightFacePoint.push(new Point(bottomFacePoint[1].x, bottomFacePoint[1].y));
  141. rightFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y));
  142. createFace("right", rightFacePoint);
  143. }
  144. public function createTopFace():void
  145. {
  146. topFacePoint.push(new Point(bottomFacePoint[0].x, bottomFacePoint[0].y - _height));
  147. topFacePoint.push(new Point(bottomFacePoint[1].x, bottomFacePoint[1].y - _height));
  148. topFacePoint.push(new Point(bottomFacePoint[2].x, bottomFacePoint[2].y - _height));
  149. topFacePoint.push(new Point(bottomFacePoint[3].x, bottomFacePoint[3].y - _height));
  150. createFace("top", topFacePoint);
  151. }
  152. private function createFace(faceName:String, points:Vector.<Point>):void
  153. {
  154. var container:Sprite = new Sprite();
  155. container.name = faceName;
  156. container.graphics.clear();
  157. container.graphics.beginFill(Math.random() * 0xFFFFFF, 0);
  158. //container.graphics.beginFill(Math.random()*0xFFFFFF,Math.random());
  159. container.graphics.lineStyle(1, 0x000000, 1);
  160. container.graphics.moveTo(points[0].x, points[0].y); //Top Point
  161. container.graphics.lineTo(points[1].x, points[1].y); //Right Point
  162. container.graphics.lineTo(points[2].x, points[2].y); //Bottom Point
  163. container.graphics.lineTo(points[3].x, points[3].y); //Left Point
  164. container.graphics.endFill();
  165. addChild(container);
  166. }
  167. public function get topBitmap():BitmapData
  168. {
  169. return _topBitmap;
  170. }
  171. public function set topBitmap(value:BitmapData):void
  172. {
  173. _topBitmap = value;
  174. if (value)
  175. {
  176. setFaceBitmap("top", value);
  177. }
  178. else
  179. {
  180. }
  181. }
  182. public function get frontBitmap():BitmapData
  183. {
  184. return _frontBitmap;
  185. }
  186. public function set frontBitmap(value:BitmapData):void
  187. {
  188. _frontBitmap = value;
  189. if (value)
  190. setFaceBitmap("front", value)
  191. }
  192. public function get rightBitmap():BitmapData
  193. {
  194. return _rightBitmap;
  195. }
  196. public function set rightBitmap(value:BitmapData):void
  197. {
  198. _rightBitmap = value;
  199. if (value)
  200. setFaceBitmap("right", value)
  201. }
  202. /**
  203. * ????
  204. */
  205. public function get container():Sprite
  206. {
  207. return _container;
  208. }
  209. private function setFaceBitmap(faceName:String, bd:BitmapData):void
  210. {
  211. faceName = faceName.toLocaleLowerCase();
  212. var target:Sprite = Sprite(getChildByName(faceName));
  213. if (target == null)
  214. return;
  215. for (var i:int = target.numChildren - 1; i >= 0; i--)
  216. {
  217. target.removeChildAt(i);
  218. }
  219. var skew:IsoSkew = new IsoSkew(target, bd);
  220. switch (faceName)
  221. {
  222. case "top":
  223. skew.setTransformPoints(topFacePoint[0], topFacePoint[1], topFacePoint[2], topFacePoint[3]);
  224. break;
  225. case "bottom":
  226. skew.setTransformPoints(bottomFacePoint[0], bottomFacePoint[1], bottomFacePoint[2], bottomFacePoint[3]);
  227. break;
  228. case "left":
  229. skew.setTransformPoints(leftFacePoint[0], leftFacePoint[1], leftFacePoint[2], leftFacePoint[3]);
  230. break;
  231. case "right":
  232. skew.setTransformPoints(rightFacePoint[0], rightFacePoint[1], rightFacePoint[2], rightFacePoint[3]);
  233. break;
  234. case "front":
  235. skew.setTransformPoints(frontFacePoint[0], frontFacePoint[1], frontFacePoint[2], frontFacePoint[3]);
  236. break;
  237. case "back":
  238. skew.setTransformPoints(backFacePoint[0], backFacePoint[1], backFacePoint[2], backFacePoint[3]);
  239. break;
  240. }
  241. }
  242. }
  243. }