Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1. package bd.utils
  2. {
  3. import bd.graphics.blit.BlitObject;
  4. import flash.display.Bitmap;
  5. import flash.display.BitmapData;
  6. import flash.display.DisplayObject;
  7. import flash.display.InteractiveObject;
  8. import flash.display.Stage;
  9. import flash.geom.Point;
  10. import flash.geom.Rectangle;
  11. import flash.utils.Timer;
  12. import flash.events.TimerEvent;
  13. import flash.events.Event;
  14.  
  15. public class CollisionUtils
  16. {
  17. private static var _collisionData:Array; //CollisionData
  18. private static var _tileSize:int;
  19. private static var _objectPoint:Point; //ObjectPosition
  20.  
  21. public static function Initialize(collisionData:Array, tileSize:int):void
  22. {
  23. _collisionData = collisionData;
  24. _tileSize = tileSize;
  25. }
  26.  
  27. private static function getObjectCorners(playerObject:DisplayObject):Array
  28. {
  29. var c:Array = new Array([[], []], [[], []]);
  30. c[0][0] = new Point(playerObject.x, playerObject.y); //TOP LEFT
  31. c[0][1] = new Point(playerObject.x + playerObject.width, playerObject.y); //TOP RIGHT
  32. c[1][0] = new Point(playerObject.x, playerObject.y + playerObject.height); //BOTTOM LEFT
  33. c[1][1] = new Point(playerObject.x + playerObject.width, playerObject.y + playerObject.height); //BOTTOM RIGHT
  34. return c;
  35. }
  36.  
  37. public static function circleCollision(objOne:DisplayObject, objTwo:DisplayObject):Boolean
  38. {
  39.  
  40. var collisionStatus:Boolean = false;
  41. var distance:Number = 0;
  42. var tolerance:Number = 0;
  43.  
  44. tolerance = objTwo.width / 2 + objOne.width / 2;
  45. distance = Math.sqrt((objTwo.x - objOne.x) ^ 2 + (objTwo.y - objTwo.y) ^ 2);
  46.  
  47. if (tolerance <= distance)
  48. collisionStatus = true;
  49.  
  50. return collisionStatus
  51. }
  52.  
  53. /**
  54. *
  55. * @param playerObject
  56. * @param objectChange:Change
  57. * @param axis:Axis
  58. * @return
  59. */
  60. public static function checkCollision(playerObject:DisplayObject, objectChange:int, axis:String):Boolean
  61. {
  62. var collisionReturn:Boolean = false;
  63. var objectCorners:Array = getObjectCorners(playerObject);
  64. var t:Point = new Point(0, 0);
  65. var v:int = 0;
  66. var b:int = (objectChange > 0) ? 1 : -1; //DIRECTION CONTROL VARIABLE
  67. var b2:int = (objectChange > 0) ? 1 : 0; //DIRECTION CONTROL VARIABLE
  68. if (axis == "x")
  69. {
  70. for (var e:int = 0; e < 2; e++)
  71. {
  72. t.x = (Math.floor(objectCorners[e][b2].x / _tileSize));
  73. t.y = (Math.floor(objectCorners[e][b2].y / _tileSize));
  74. if (b == 1)
  75. if (t.x + b > _tileSize / 2)
  76. v = 1;
  77. else
  78. v = _collisionData[t.y][t.x + b];
  79. else if (b == -1)
  80. if (t.x + b < 0)
  81. v = 1;
  82. else
  83. {
  84. v = _collisionData[t.y][t.x + b];
  85. }
  86.  
  87. if (v == 1)
  88. {
  89. t.x = (t.x + b2) * _tileSize;
  90. t.y = (t.y) * _tileSize;
  91.  
  92. if (b == 1)
  93. {
  94. if (objectCorners[e][b2].x + objectChange >= t.x)
  95. {
  96. playerObject.x += t.x - objectCorners[e][1].x - .5;
  97. collisionReturn = true;
  98. break;
  99. }
  100. }
  101. else if (b == -1)
  102. {
  103. if (objectCorners[e][b2].x + objectChange <= t.x)
  104. {
  105. playerObject.x -= objectCorners[e][0].x - t.x;
  106. collisionReturn = true;
  107. break;
  108. }
  109. }
  110. }
  111. }
  112. }
  113. else if (axis == "y")
  114. {
  115. for (var u:int = 0; u < 2; u++)
  116. {
  117. t.x = (Math.floor(objectCorners[b2][u].x / _tileSize));
  118. t.y = (Math.floor(objectCorners[b2][u].y / _tileSize));
  119.  
  120. if (b == 1)
  121. if (t.x + b > _tileSize / 2)
  122. v = 1;
  123. else
  124. v = _collisionData[t.y][t.x + b];
  125. else if (b == -1)
  126. if (t.x + b < 0)
  127. v = 1;
  128. else
  129. {
  130. v = _collisionData[t.y][t.x + b];
  131. }
  132.  
  133.  
  134. if (b == 1)
  135. if (t.y + b > _tileSize / 2)
  136. v = 1;
  137. else
  138. v = 1;
  139. else if ( b == -1)
  140. if (t.y + b < 0)
  141. v = 1;
  142. else
  143. v = _collisionData[t.y + b][t.x];
  144.  
  145. if (b == 1)
  146. if (t.y + b > _tileSize / 2)
  147. v = 1;
  148. else
  149. {
  150. if (t.y + b >= _collisionData.length)
  151. v = _collisionData[t.y][t.x]
  152. else
  153. v = _collisionData[t.y + b][t.x];
  154. }
  155. else if (b == -1)
  156. if (t.y + b < 0)
  157. v = 1;
  158. else
  159. {
  160. v = _collisionData[t.y + b][t.x];
  161. }
  162.  
  163. if (v == 1)
  164. {
  165. t.x = (t.x) * _tileSize;
  166. t.y = (t.y + b2) * _tileSize;
  167.  
  168. if (b == 1)
  169. {
  170. if (objectCorners[b2][u].y + objectChange >= t.y)
  171. {
  172. playerObject.y += t.y - objectCorners[b2][u].y - .5;
  173. collisionReturn = true;
  174. break;
  175. }
  176. }
  177. else if (b == -1)
  178. {
  179. if (objectCorners[b2][u].y + objectChange <= t.y)
  180. {
  181. playerObject.y -= objectCorners[b2][u].y - t.y;
  182. collisionReturn = true;
  183. break;
  184. }
  185. }
  186. }
  187. }
  188. }
  189. return collisionReturn;
  190. }
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement