excalibur 0.25.2 → 0.25.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/build/dist/Actions/Action/Blink.js +51 -0
  3. package/build/dist/Actions/Action/Blink.js.map +1 -0
  4. package/build/dist/Actions/Action/CallMethod.js +21 -0
  5. package/build/dist/Actions/Action/CallMethod.js.map +1 -0
  6. package/build/dist/Actions/Action/Delay.js +25 -0
  7. package/build/dist/Actions/Action/Delay.js.map +1 -0
  8. package/build/dist/Actions/Action/Die.js +22 -0
  9. package/build/dist/Actions/Action/Die.js.map +1 -0
  10. package/build/dist/Actions/Action/EaseTo.js +69 -0
  11. package/build/dist/Actions/Action/EaseTo.js.map +1 -0
  12. package/build/dist/Actions/Action/Fade.js +46 -0
  13. package/build/dist/Actions/Action/Fade.js.map +1 -0
  14. package/build/dist/Actions/Action/Follow.js +55 -0
  15. package/build/dist/Actions/Action/Follow.js.map +1 -0
  16. package/build/dist/Actions/Action/Meet.js +52 -0
  17. package/build/dist/Actions/Action/Meet.js.map +1 -0
  18. package/build/dist/Actions/Action/MoveBy.js +47 -0
  19. package/build/dist/Actions/Action/MoveBy.js.map +1 -0
  20. package/build/dist/Actions/Action/MoveTo.js +40 -0
  21. package/build/dist/Actions/Action/MoveTo.js.map +1 -0
  22. package/build/dist/Actions/Action/Repeat.js +31 -0
  23. package/build/dist/Actions/Action/Repeat.js.map +1 -0
  24. package/build/dist/Actions/Action/RepeatForever.js +37 -0
  25. package/build/dist/Actions/Action/RepeatForever.js.map +1 -0
  26. package/build/dist/Actions/Action/RotateBy.js +91 -0
  27. package/build/dist/Actions/Action/RotateBy.js.map +1 -0
  28. package/build/dist/Actions/Action/RotateTo.js +90 -0
  29. package/build/dist/Actions/Action/RotateTo.js.map +1 -0
  30. package/build/dist/Actions/Action/ScaleBy.js +45 -0
  31. package/build/dist/Actions/Action/ScaleBy.js.map +1 -0
  32. package/build/dist/Actions/Action/ScaleTo.js +56 -0
  33. package/build/dist/Actions/Action/ScaleTo.js.map +1 -0
  34. package/build/dist/Actions/Action.js +2 -0
  35. package/build/dist/Actions/Action.js.map +1 -0
  36. package/build/dist/Actions/ActionContext.js +305 -0
  37. package/build/dist/Actions/ActionContext.js.map +1 -0
  38. package/build/dist/Actions/ActionQueue.js +87 -0
  39. package/build/dist/Actions/ActionQueue.js.map +1 -0
  40. package/build/dist/Actions/Actionable.js +2 -0
  41. package/build/dist/Actions/Actionable.js.map +1 -0
  42. package/build/dist/Actions/ActionsComponent.js +198 -0
  43. package/build/dist/Actions/ActionsComponent.js.map +1 -0
  44. package/build/dist/Actions/ActionsSystem.js +18 -0
  45. package/build/dist/Actions/ActionsSystem.js.map +1 -0
  46. package/build/dist/Actions/Index.js +22 -0
  47. package/build/dist/Actions/Index.js.map +1 -0
  48. package/build/dist/Actions/RotationType.js +27 -0
  49. package/build/dist/Actions/RotationType.js.map +1 -0
  50. package/build/dist/Actor.js +831 -0
  51. package/build/dist/Actor.js.map +1 -0
  52. package/build/dist/Camera.js +663 -0
  53. package/build/dist/Camera.js.map +1 -0
  54. package/build/dist/Class.js +48 -0
  55. package/build/dist/Class.js.map +1 -0
  56. package/build/dist/Collision/BodyComponent.js +351 -0
  57. package/build/dist/Collision/BodyComponent.js.map +1 -0
  58. package/build/dist/Collision/BoundingBox.js +361 -0
  59. package/build/dist/Collision/BoundingBox.js.map +1 -0
  60. package/build/dist/Collision/ColliderComponent.js +198 -0
  61. package/build/dist/Collision/ColliderComponent.js.map +1 -0
  62. package/build/dist/Collision/Colliders/CircleCollider.js +264 -0
  63. package/build/dist/Collision/Colliders/CircleCollider.js.map +1 -0
  64. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js +211 -0
  65. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js.map +1 -0
  66. package/build/dist/Collision/Colliders/Collider.js +26 -0
  67. package/build/dist/Collision/Colliders/Collider.js.map +1 -0
  68. package/build/dist/Collision/Colliders/CollisionJumpTable.js +301 -0
  69. package/build/dist/Collision/Colliders/CollisionJumpTable.js.map +1 -0
  70. package/build/dist/Collision/Colliders/CompositeCollider.js +232 -0
  71. package/build/dist/Collision/Colliders/CompositeCollider.js.map +1 -0
  72. package/build/dist/Collision/Colliders/EdgeCollider.js +253 -0
  73. package/build/dist/Collision/Colliders/EdgeCollider.js.map +1 -0
  74. package/build/dist/Collision/Colliders/PolygonCollider.js +389 -0
  75. package/build/dist/Collision/Colliders/PolygonCollider.js.map +1 -0
  76. package/build/dist/Collision/Colliders/SeparatingAxis.js +67 -0
  77. package/build/dist/Collision/Colliders/SeparatingAxis.js.map +1 -0
  78. package/build/dist/Collision/Colliders/Shape.js +102 -0
  79. package/build/dist/Collision/Colliders/Shape.js.map +1 -0
  80. package/build/dist/Collision/CollisionSystem.js +116 -0
  81. package/build/dist/Collision/CollisionSystem.js.map +1 -0
  82. package/build/dist/Collision/CollisionType.js +33 -0
  83. package/build/dist/Collision/CollisionType.js.map +1 -0
  84. package/build/dist/Collision/Detection/CollisionContact.js +46 -0
  85. package/build/dist/Collision/Detection/CollisionContact.js.map +1 -0
  86. package/build/dist/Collision/Detection/CollisionProcessor.js +2 -0
  87. package/build/dist/Collision/Detection/CollisionProcessor.js.map +1 -0
  88. package/build/dist/Collision/Detection/DynamicTree.js +442 -0
  89. package/build/dist/Collision/Detection/DynamicTree.js.map +1 -0
  90. package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js +211 -0
  91. package/build/dist/Collision/Detection/DynamicTreeCollisionProcessor.js.map +1 -0
  92. package/build/dist/Collision/Detection/Pair.js +92 -0
  93. package/build/dist/Collision/Detection/Pair.js.map +1 -0
  94. package/build/dist/Collision/Group/CollisionGroup.js +114 -0
  95. package/build/dist/Collision/Group/CollisionGroup.js.map +1 -0
  96. package/build/dist/Collision/Group/CollisionGroupManager.js +52 -0
  97. package/build/dist/Collision/Group/CollisionGroupManager.js.map +1 -0
  98. package/build/dist/Collision/Index.js +29 -0
  99. package/build/dist/Collision/Index.js.map +1 -0
  100. package/build/dist/Collision/Integrator.js +11 -0
  101. package/build/dist/Collision/Integrator.js.map +1 -0
  102. package/build/dist/Collision/MotionSystem.js +42 -0
  103. package/build/dist/Collision/MotionSystem.js.map +1 -0
  104. package/build/dist/Collision/Physics.js +163 -0
  105. package/build/dist/Collision/Physics.js.map +1 -0
  106. package/build/dist/Collision/Side.js +51 -0
  107. package/build/dist/Collision/Side.js.map +1 -0
  108. package/build/dist/Collision/Solver/ArcadeSolver.js +101 -0
  109. package/build/dist/Collision/Solver/ArcadeSolver.js.map +1 -0
  110. package/build/dist/Collision/Solver/ContactConstraintPoint.js +83 -0
  111. package/build/dist/Collision/Solver/ContactConstraintPoint.js.map +1 -0
  112. package/build/dist/Collision/Solver/RealisticSolver.js +248 -0
  113. package/build/dist/Collision/Solver/RealisticSolver.js.map +1 -0
  114. package/build/dist/Collision/Solver/Solver.js +37 -0
  115. package/build/dist/Collision/Solver/Solver.js.map +1 -0
  116. package/build/dist/Color.js +461 -0
  117. package/build/dist/Color.js.map +1 -0
  118. package/build/dist/Configurable.js +32 -0
  119. package/build/dist/Configurable.js.map +1 -0
  120. package/build/dist/Debug/Debug.js +375 -0
  121. package/build/dist/Debug/Debug.js.map +1 -0
  122. package/build/dist/Debug/DebugFlags.js +40 -0
  123. package/build/dist/Debug/DebugFlags.js.map +1 -0
  124. package/build/dist/Debug/DebugSystem.js +251 -0
  125. package/build/dist/Debug/DebugSystem.js.map +1 -0
  126. package/build/dist/Debug/index.js +4 -0
  127. package/build/dist/Debug/index.js.map +1 -0
  128. package/build/dist/Deprecated.js +2 -0
  129. package/build/dist/Deprecated.js.map +1 -0
  130. package/build/dist/Drawing/Animation.js +294 -0
  131. package/build/dist/Drawing/Animation.js.map +1 -0
  132. package/build/dist/Drawing/CanvasDrawComponent.js +16 -0
  133. package/build/dist/Drawing/CanvasDrawComponent.js.map +1 -0
  134. package/build/dist/Drawing/CanvasDrawingSystem.js +95 -0
  135. package/build/dist/Drawing/CanvasDrawingSystem.js.map +1 -0
  136. package/build/dist/Drawing/Index.js +10 -0
  137. package/build/dist/Drawing/Index.js.map +1 -0
  138. package/build/dist/Drawing/Polygon.js +139 -0
  139. package/build/dist/Drawing/Polygon.js.map +1 -0
  140. package/build/dist/Drawing/Sprite.js +355 -0
  141. package/build/dist/Drawing/Sprite.js.map +1 -0
  142. package/build/dist/Drawing/SpriteEffects.js +246 -0
  143. package/build/dist/Drawing/SpriteEffects.js.map +1 -0
  144. package/build/dist/Drawing/SpriteSheet.js +413 -0
  145. package/build/dist/Drawing/SpriteSheet.js.map +1 -0
  146. package/build/dist/Drawing/Texture.js +69 -0
  147. package/build/dist/Drawing/Texture.js.map +1 -0
  148. package/build/dist/Engine.d.ts +4 -1
  149. package/build/dist/Engine.js +985 -0
  150. package/build/dist/Engine.js.map +1 -0
  151. package/build/dist/EntityComponentSystem/Component.js +65 -0
  152. package/build/dist/EntityComponentSystem/Component.js.map +1 -0
  153. package/build/dist/EntityComponentSystem/Components/MotionComponent.js +33 -0
  154. package/build/dist/EntityComponentSystem/Components/MotionComponent.js.map +1 -0
  155. package/build/dist/EntityComponentSystem/Components/TransformComponent.js +249 -0
  156. package/build/dist/EntityComponentSystem/Components/TransformComponent.js.map +1 -0
  157. package/build/dist/EntityComponentSystem/Entity.js +452 -0
  158. package/build/dist/EntityComponentSystem/Entity.js.map +1 -0
  159. package/build/dist/EntityComponentSystem/EntityManager.js +128 -0
  160. package/build/dist/EntityComponentSystem/EntityManager.js.map +1 -0
  161. package/build/dist/EntityComponentSystem/Query.js +91 -0
  162. package/build/dist/EntityComponentSystem/Query.js.map +1 -0
  163. package/build/dist/EntityComponentSystem/QueryManager.js +90 -0
  164. package/build/dist/EntityComponentSystem/QueryManager.js.map +1 -0
  165. package/build/dist/EntityComponentSystem/System.js +76 -0
  166. package/build/dist/EntityComponentSystem/System.js.map +1 -0
  167. package/build/dist/EntityComponentSystem/SystemManager.js +102 -0
  168. package/build/dist/EntityComponentSystem/SystemManager.js.map +1 -0
  169. package/build/dist/EntityComponentSystem/Util.js +5 -0
  170. package/build/dist/EntityComponentSystem/Util.js.map +1 -0
  171. package/build/dist/EntityComponentSystem/World.js +55 -0
  172. package/build/dist/EntityComponentSystem/World.js.map +1 -0
  173. package/build/dist/EntityComponentSystem/index.js +11 -0
  174. package/build/dist/EntityComponentSystem/index.js.map +1 -0
  175. package/build/dist/EventDispatcher.js +114 -0
  176. package/build/dist/EventDispatcher.js.map +1 -0
  177. package/build/dist/Events/ExEvent.js +12 -0
  178. package/build/dist/Events/ExEvent.js.map +1 -0
  179. package/build/dist/Events/MediaEvents.js +75 -0
  180. package/build/dist/Events/MediaEvents.js.map +1 -0
  181. package/build/dist/Events/PointerEvents.js +52 -0
  182. package/build/dist/Events/PointerEvents.js.map +1 -0
  183. package/build/dist/Events.js +497 -0
  184. package/build/dist/Events.js.map +1 -0
  185. package/build/dist/Flags.js +90 -0
  186. package/build/dist/Flags.js.map +1 -0
  187. package/build/dist/Graphics/Animation.js +310 -0
  188. package/build/dist/Graphics/Animation.js.map +1 -0
  189. package/build/dist/Graphics/Canvas.js +38 -0
  190. package/build/dist/Graphics/Canvas.js.map +1 -0
  191. package/build/dist/Graphics/Circle.js +47 -0
  192. package/build/dist/Graphics/Circle.js.map +1 -0
  193. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js +2 -0
  194. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js.map +1 -0
  195. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js +207 -0
  196. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js.map +1 -0
  197. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js +331 -0
  198. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js.map +1 -0
  199. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js +160 -0
  200. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js.map +1 -0
  201. package/build/dist/Graphics/Context/debug-text.js +47 -0
  202. package/build/dist/Graphics/Context/debug-text.js.map +1 -0
  203. package/build/dist/Graphics/Context/image-renderer/image-renderer.js +209 -0
  204. package/build/dist/Graphics/Context/image-renderer/image-renderer.js.map +1 -0
  205. package/build/dist/Graphics/Context/line-renderer/line-renderer.js +87 -0
  206. package/build/dist/Graphics/Context/line-renderer/line-renderer.js.map +1 -0
  207. package/build/dist/Graphics/Context/point-renderer/point-renderer.js +82 -0
  208. package/build/dist/Graphics/Context/point-renderer/point-renderer.js.map +1 -0
  209. package/build/dist/Graphics/Context/quad-index-buffer.js +69 -0
  210. package/build/dist/Graphics/Context/quad-index-buffer.js.map +1 -0
  211. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js +272 -0
  212. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js.map +1 -0
  213. package/build/dist/Graphics/Context/render-source.js +16 -0
  214. package/build/dist/Graphics/Context/render-source.js.map +1 -0
  215. package/build/dist/Graphics/Context/render-target.js +65 -0
  216. package/build/dist/Graphics/Context/render-target.js.map +1 -0
  217. package/build/dist/Graphics/Context/renderer.js +2 -0
  218. package/build/dist/Graphics/Context/renderer.js.map +1 -0
  219. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js +53 -0
  220. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js.map +1 -0
  221. package/build/dist/Graphics/Context/shader.js +236 -0
  222. package/build/dist/Graphics/Context/shader.js.map +1 -0
  223. package/build/dist/Graphics/Context/state-stack.js +27 -0
  224. package/build/dist/Graphics/Context/state-stack.js.map +1 -0
  225. package/build/dist/Graphics/Context/texture-loader.d.ts +8 -0
  226. package/build/dist/Graphics/Context/texture-loader.js +121 -0
  227. package/build/dist/Graphics/Context/texture-loader.js.map +1 -0
  228. package/build/dist/Graphics/Context/transform-stack.js +30 -0
  229. package/build/dist/Graphics/Context/transform-stack.js.map +1 -0
  230. package/build/dist/Graphics/Context/vertex-buffer.js +45 -0
  231. package/build/dist/Graphics/Context/vertex-buffer.js.map +1 -0
  232. package/build/dist/Graphics/Context/vertex-layout.js +93 -0
  233. package/build/dist/Graphics/Context/vertex-layout.js.map +1 -0
  234. package/build/dist/Graphics/Context/webgl-adapter.js +19 -0
  235. package/build/dist/Graphics/Context/webgl-adapter.js.map +1 -0
  236. package/build/dist/Graphics/Context/webgl-util.js +105 -0
  237. package/build/dist/Graphics/Context/webgl-util.js.map +1 -0
  238. package/build/dist/Graphics/DebugGraphicsComponent.js +15 -0
  239. package/build/dist/Graphics/DebugGraphicsComponent.js.map +1 -0
  240. package/build/dist/Graphics/Filtering.js +17 -0
  241. package/build/dist/Graphics/Filtering.js.map +1 -0
  242. package/build/dist/Graphics/Font.js +293 -0
  243. package/build/dist/Graphics/Font.js.map +1 -0
  244. package/build/dist/Graphics/FontCommon.js +109 -0
  245. package/build/dist/Graphics/FontCommon.js.map +1 -0
  246. package/build/dist/Graphics/Graphic.js +200 -0
  247. package/build/dist/Graphics/Graphic.js.map +1 -0
  248. package/build/dist/Graphics/GraphicsComponent.js +290 -0
  249. package/build/dist/Graphics/GraphicsComponent.js.map +1 -0
  250. package/build/dist/Graphics/GraphicsDiagnostics.js +9 -0
  251. package/build/dist/Graphics/GraphicsDiagnostics.js.map +1 -0
  252. package/build/dist/Graphics/GraphicsGroup.js +69 -0
  253. package/build/dist/Graphics/GraphicsGroup.js.map +1 -0
  254. package/build/dist/Graphics/GraphicsSystem.js +153 -0
  255. package/build/dist/Graphics/GraphicsSystem.js.map +1 -0
  256. package/build/dist/Graphics/ImageSource.js +116 -0
  257. package/build/dist/Graphics/ImageSource.js.map +1 -0
  258. package/build/dist/Graphics/Polygon.js +59 -0
  259. package/build/dist/Graphics/Polygon.js.map +1 -0
  260. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js +7 -0
  261. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js.map +1 -0
  262. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js +52 -0
  263. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js.map +1 -0
  264. package/build/dist/Graphics/PostProcessor/PostProcessor.js +2 -0
  265. package/build/dist/Graphics/PostProcessor/PostProcessor.js.map +1 -0
  266. package/build/dist/Graphics/PostProcessor/ScreenShader.js +56 -0
  267. package/build/dist/Graphics/PostProcessor/ScreenShader.js.map +1 -0
  268. package/build/dist/Graphics/Raster.js +207 -0
  269. package/build/dist/Graphics/Raster.js.map +1 -0
  270. package/build/dist/Graphics/Rectangle.js +29 -0
  271. package/build/dist/Graphics/Rectangle.js.map +1 -0
  272. package/build/dist/Graphics/Sprite.js +103 -0
  273. package/build/dist/Graphics/Sprite.js.map +1 -0
  274. package/build/dist/Graphics/SpriteFont.js +120 -0
  275. package/build/dist/Graphics/SpriteFont.js.map +1 -0
  276. package/build/dist/Graphics/SpriteSheet.js +115 -0
  277. package/build/dist/Graphics/SpriteSheet.js.map +1 -0
  278. package/build/dist/Graphics/Text.js +94 -0
  279. package/build/dist/Graphics/Text.js.map +1 -0
  280. package/build/dist/Graphics/index.js +42 -0
  281. package/build/dist/Graphics/index.js.map +1 -0
  282. package/build/dist/Id.js +8 -0
  283. package/build/dist/Id.js.map +1 -0
  284. package/build/dist/Input/CapturePointerConfig.js +5 -0
  285. package/build/dist/Input/CapturePointerConfig.js.map +1 -0
  286. package/build/dist/Input/EngineInput.js +2 -0
  287. package/build/dist/Input/EngineInput.js.map +1 -0
  288. package/build/dist/Input/Gamepad.js +358 -0
  289. package/build/dist/Input/Gamepad.js.map +1 -0
  290. package/build/dist/Input/Index.js +22 -0
  291. package/build/dist/Input/Index.js.map +1 -0
  292. package/build/dist/Input/Keyboard.js +267 -0
  293. package/build/dist/Input/Keyboard.js.map +1 -0
  294. package/build/dist/Input/NativePointerButton.js +12 -0
  295. package/build/dist/Input/NativePointerButton.js.map +1 -0
  296. package/build/dist/Input/PointerAbstraction.js +41 -0
  297. package/build/dist/Input/PointerAbstraction.js.map +1 -0
  298. package/build/dist/Input/PointerButton.js +12 -0
  299. package/build/dist/Input/PointerButton.js.map +1 -0
  300. package/build/dist/Input/PointerComponent.js +28 -0
  301. package/build/dist/Input/PointerComponent.js.map +1 -0
  302. package/build/dist/Input/PointerEvent.js +25 -0
  303. package/build/dist/Input/PointerEvent.js.map +1 -0
  304. package/build/dist/Input/PointerEventReceiver.js +414 -0
  305. package/build/dist/Input/PointerEventReceiver.js.map +1 -0
  306. package/build/dist/Input/PointerScope.js +16 -0
  307. package/build/dist/Input/PointerScope.js.map +1 -0
  308. package/build/dist/Input/PointerSystem.js +217 -0
  309. package/build/dist/Input/PointerSystem.js.map +1 -0
  310. package/build/dist/Input/PointerType.js +11 -0
  311. package/build/dist/Input/PointerType.js.map +1 -0
  312. package/build/dist/Input/WheelDeltaMode.js +7 -0
  313. package/build/dist/Input/WheelDeltaMode.js.map +1 -0
  314. package/build/dist/Input/WheelEvent.js +21 -0
  315. package/build/dist/Input/WheelEvent.js.map +1 -0
  316. package/build/dist/Interfaces/Audio.js +2 -0
  317. package/build/dist/Interfaces/Audio.js.map +1 -0
  318. package/build/dist/Interfaces/AudioImplementation.js +11 -0
  319. package/build/dist/Interfaces/AudioImplementation.js.map +1 -0
  320. package/build/dist/Interfaces/Clonable.js +2 -0
  321. package/build/dist/Interfaces/Clonable.js.map +1 -0
  322. package/build/dist/Interfaces/Drawable.js +2 -0
  323. package/build/dist/Interfaces/Drawable.js.map +1 -0
  324. package/build/dist/Interfaces/Evented.js +2 -0
  325. package/build/dist/Interfaces/Evented.js.map +1 -0
  326. package/build/dist/Interfaces/Index.js +10 -0
  327. package/build/dist/Interfaces/Index.js.map +1 -0
  328. package/build/dist/Interfaces/LifecycleEvents.js +51 -0
  329. package/build/dist/Interfaces/LifecycleEvents.js.map +1 -0
  330. package/build/dist/Interfaces/Loadable.js +2 -0
  331. package/build/dist/Interfaces/Loadable.js.map +1 -0
  332. package/build/dist/Interfaces/PointerEventHandlers.js +2 -0
  333. package/build/dist/Interfaces/PointerEventHandlers.js.map +1 -0
  334. package/build/dist/Interfaces/Trait.js +2 -0
  335. package/build/dist/Interfaces/Trait.js.map +1 -0
  336. package/build/dist/Label.js +273 -0
  337. package/build/dist/Label.js.map +1 -0
  338. package/build/dist/Loader.js +367 -0
  339. package/build/dist/Loader.js.map +1 -0
  340. package/build/dist/Math/Index.js +10 -0
  341. package/build/dist/Math/Index.js.map +1 -0
  342. package/build/dist/Math/Random.js +239 -0
  343. package/build/dist/Math/Random.js.map +1 -0
  344. package/build/dist/Math/global-coordinates.js +30 -0
  345. package/build/dist/Math/global-coordinates.js.map +1 -0
  346. package/build/dist/Math/line.js +194 -0
  347. package/build/dist/Math/line.js.map +1 -0
  348. package/build/dist/Math/matrix.js +446 -0
  349. package/build/dist/Math/matrix.js.map +1 -0
  350. package/build/dist/Math/projection.js +24 -0
  351. package/build/dist/Math/projection.js.map +1 -0
  352. package/build/dist/Math/ray.js +52 -0
  353. package/build/dist/Math/ray.js.map +1 -0
  354. package/build/dist/Math/util.js +82 -0
  355. package/build/dist/Math/util.js.map +1 -0
  356. package/build/dist/Math/vector-view.js +25 -0
  357. package/build/dist/Math/vector-view.js.map +1 -0
  358. package/build/dist/Math/vector.js +326 -0
  359. package/build/dist/Math/vector.js.map +1 -0
  360. package/build/dist/Particles.js +449 -0
  361. package/build/dist/Particles.js.map +1 -0
  362. package/build/dist/Polyfill.js +56 -0
  363. package/build/dist/Polyfill.js.map +1 -0
  364. package/build/dist/Promises.js +205 -0
  365. package/build/dist/Promises.js.map +1 -0
  366. package/build/dist/Resources/Gif.js +479 -0
  367. package/build/dist/Resources/Gif.js.map +1 -0
  368. package/build/dist/Resources/Index.js +4 -0
  369. package/build/dist/Resources/Index.js.map +1 -0
  370. package/build/dist/Resources/Resource.js +74 -0
  371. package/build/dist/Resources/Resource.js.map +1 -0
  372. package/build/dist/Resources/Sound/AudioContext.js +16 -0
  373. package/build/dist/Resources/Sound/AudioContext.js.map +1 -0
  374. package/build/dist/Resources/Sound/Index.js +4 -0
  375. package/build/dist/Resources/Sound/Index.js.map +1 -0
  376. package/build/dist/Resources/Sound/Sound.js +240 -0
  377. package/build/dist/Resources/Sound/Sound.js.map +1 -0
  378. package/build/dist/Resources/Sound/WebAudioInstance.js +160 -0
  379. package/build/dist/Resources/Sound/WebAudioInstance.js.map +1 -0
  380. package/build/dist/Scene.js +458 -0
  381. package/build/dist/Scene.js.map +1 -0
  382. package/build/dist/Screen.js +634 -0
  383. package/build/dist/Screen.js.map +1 -0
  384. package/build/dist/ScreenElement.js +29 -0
  385. package/build/dist/ScreenElement.js.map +1 -0
  386. package/build/dist/TileMap.js +488 -0
  387. package/build/dist/TileMap.js.map +1 -0
  388. package/build/dist/Timer.js +198 -0
  389. package/build/dist/Timer.js.map +1 -0
  390. package/build/dist/Traits/Index.js +5 -0
  391. package/build/dist/Traits/Index.js.map +1 -0
  392. package/build/dist/Traits/OffscreenCulling.js +35 -0
  393. package/build/dist/Traits/OffscreenCulling.js.map +1 -0
  394. package/build/dist/Trigger.js +113 -0
  395. package/build/dist/Trigger.js.map +1 -0
  396. package/build/dist/Util/Actors.js +19 -0
  397. package/build/dist/Util/Actors.js.map +1 -0
  398. package/build/dist/Util/Browser.js +66 -0
  399. package/build/dist/Util/Browser.js.map +1 -0
  400. package/build/dist/Util/Clock.js +219 -0
  401. package/build/dist/Util/Clock.js.map +1 -0
  402. package/build/dist/Util/CullingBox.js +104 -0
  403. package/build/dist/Util/CullingBox.js.map +1 -0
  404. package/build/dist/Util/Decorators.js +78 -0
  405. package/build/dist/Util/Decorators.js.map +1 -0
  406. package/build/dist/Util/Detector.js +167 -0
  407. package/build/dist/Util/Detector.js.map +1 -0
  408. package/build/dist/Util/DrawUtil.js +117 -0
  409. package/build/dist/Util/DrawUtil.js.map +1 -0
  410. package/build/dist/Util/EasingFunctions.js +118 -0
  411. package/build/dist/Util/EasingFunctions.js.map +1 -0
  412. package/build/dist/Util/Fps.js +47 -0
  413. package/build/dist/Util/Fps.js.map +1 -0
  414. package/build/dist/Util/Index.js +7 -0
  415. package/build/dist/Util/Index.js.map +1 -0
  416. package/build/dist/Util/Log.js +195 -0
  417. package/build/dist/Util/Log.js.map +1 -0
  418. package/build/dist/Util/Observable.js +60 -0
  419. package/build/dist/Util/Observable.js.map +1 -0
  420. package/build/dist/Util/Pool.js +66 -0
  421. package/build/dist/Util/Pool.js.map +1 -0
  422. package/build/dist/Util/SortedList.js +261 -0
  423. package/build/dist/Util/SortedList.js.map +1 -0
  424. package/build/dist/Util/Sound.js +22 -0
  425. package/build/dist/Util/Sound.js.map +1 -0
  426. package/build/dist/Util/Util.js +294 -0
  427. package/build/dist/Util/Util.js.map +1 -0
  428. package/build/dist/Util/Watch.js +67 -0
  429. package/build/dist/Util/Watch.js.map +1 -0
  430. package/build/dist/Util/WebAudio.js +62 -0
  431. package/build/dist/Util/WebAudio.js.map +1 -0
  432. package/build/dist/excalibur.js +101 -22
  433. package/build/dist/excalibur.js.map +1 -1
  434. package/build/dist/excalibur.min.js +1 -1
  435. package/build/dist/excalibur.min.js.LICENSE.txt +1 -1
  436. package/build/dist/excalibur.min.js.map +1 -1
  437. package/build/dist/index.js +74 -0
  438. package/build/dist/index.js.map +1 -0
  439. package/build/esm/Engine.d.ts +4 -1
  440. package/build/esm/Graphics/Context/texture-loader.d.ts +8 -0
  441. package/build/esm/excalibur.js +101 -22
  442. package/build/esm/excalibur.js.map +1 -1
  443. package/build/esm/excalibur.min.js +1 -1
  444. package/build/esm/excalibur.min.js.LICENSE.txt +1 -1
  445. package/build/esm/excalibur.min.js.map +1 -1
  446. package/package.json +23 -22
@@ -0,0 +1,442 @@
1
+ import { Physics } from '../Physics';
2
+ import { BoundingBox } from '../BoundingBox';
3
+ import { Logger } from '../../Util/Log';
4
+ import { BodyComponent } from '../BodyComponent';
5
+ import { Color } from '../..';
6
+ /**
7
+ * Dynamic Tree Node used for tracking bounds within the tree
8
+ */
9
+ export class TreeNode {
10
+ constructor(parent) {
11
+ this.parent = parent;
12
+ this.parent = parent || null;
13
+ this.data = null;
14
+ this.bounds = new BoundingBox();
15
+ this.left = null;
16
+ this.right = null;
17
+ this.height = 0;
18
+ }
19
+ isLeaf() {
20
+ return !this.left && !this.right;
21
+ }
22
+ }
23
+ /**
24
+ * The DynamicTrees provides a spatial partitioning data structure for quickly querying for overlapping bounding boxes for
25
+ * all tracked bodies. The worst case performance of this is O(n*log(n)) where n is the number of bodies in the tree.
26
+ *
27
+ * Internally the bounding boxes are organized as a balanced binary tree of bounding boxes, where the leaf nodes are tracked bodies.
28
+ * Every non-leaf node is a bounding box that contains child bounding boxes.
29
+ */
30
+ export class DynamicTree {
31
+ constructor(worldBounds = new BoundingBox(-Number.MAX_VALUE, -Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)) {
32
+ this.worldBounds = worldBounds;
33
+ this.root = null;
34
+ this.nodes = {};
35
+ }
36
+ /**
37
+ * Inserts a node into the dynamic tree
38
+ */
39
+ _insert(leaf) {
40
+ // If there are no nodes in the tree, make this the root leaf
41
+ if (this.root === null) {
42
+ this.root = leaf;
43
+ this.root.parent = null;
44
+ return;
45
+ }
46
+ // Search the tree for a node that is not a leaf and find the best place to insert
47
+ const leafAABB = leaf.bounds;
48
+ let currentRoot = this.root;
49
+ while (!currentRoot.isLeaf()) {
50
+ const left = currentRoot.left;
51
+ const right = currentRoot.right;
52
+ const area = currentRoot.bounds.getPerimeter();
53
+ const combinedAABB = currentRoot.bounds.combine(leafAABB);
54
+ const combinedArea = combinedAABB.getPerimeter();
55
+ // Calculate cost heuristic for creating a new parent and leaf
56
+ const cost = 2 * combinedArea;
57
+ // Minimum cost of pushing the leaf down the tree
58
+ const inheritanceCost = 2 * (combinedArea - area);
59
+ // Cost of descending
60
+ let leftCost = 0;
61
+ const leftCombined = leafAABB.combine(left.bounds);
62
+ let newArea;
63
+ let oldArea;
64
+ if (left.isLeaf()) {
65
+ leftCost = leftCombined.getPerimeter() + inheritanceCost;
66
+ }
67
+ else {
68
+ oldArea = left.bounds.getPerimeter();
69
+ newArea = leftCombined.getPerimeter();
70
+ leftCost = newArea - oldArea + inheritanceCost;
71
+ }
72
+ let rightCost = 0;
73
+ const rightCombined = leafAABB.combine(right.bounds);
74
+ if (right.isLeaf()) {
75
+ rightCost = rightCombined.getPerimeter() + inheritanceCost;
76
+ }
77
+ else {
78
+ oldArea = right.bounds.getPerimeter();
79
+ newArea = rightCombined.getPerimeter();
80
+ rightCost = newArea - oldArea + inheritanceCost;
81
+ }
82
+ // cost is acceptable
83
+ if (cost < leftCost && cost < rightCost) {
84
+ break;
85
+ }
86
+ // Descend to the depths
87
+ if (leftCost < rightCost) {
88
+ currentRoot = left;
89
+ }
90
+ else {
91
+ currentRoot = right;
92
+ }
93
+ }
94
+ // Create the new parent node and insert into the tree
95
+ const oldParent = currentRoot.parent;
96
+ const newParent = new TreeNode(oldParent);
97
+ newParent.bounds = leafAABB.combine(currentRoot.bounds);
98
+ newParent.height = currentRoot.height + 1;
99
+ if (oldParent !== null) {
100
+ // The sibling node was not the root
101
+ if (oldParent.left === currentRoot) {
102
+ oldParent.left = newParent;
103
+ }
104
+ else {
105
+ oldParent.right = newParent;
106
+ }
107
+ newParent.left = currentRoot;
108
+ newParent.right = leaf;
109
+ currentRoot.parent = newParent;
110
+ leaf.parent = newParent;
111
+ }
112
+ else {
113
+ // The sibling node was the root
114
+ newParent.left = currentRoot;
115
+ newParent.right = leaf;
116
+ currentRoot.parent = newParent;
117
+ leaf.parent = newParent;
118
+ this.root = newParent;
119
+ }
120
+ // Walk up the tree fixing heights and AABBs
121
+ let currentNode = leaf.parent;
122
+ while (currentNode) {
123
+ currentNode = this._balance(currentNode);
124
+ if (!currentNode.left) {
125
+ throw new Error('Parent of current leaf cannot have a null left child' + currentNode);
126
+ }
127
+ if (!currentNode.right) {
128
+ throw new Error('Parent of current leaf cannot have a null right child' + currentNode);
129
+ }
130
+ currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);
131
+ currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);
132
+ currentNode = currentNode.parent;
133
+ }
134
+ }
135
+ /**
136
+ * Removes a node from the dynamic tree
137
+ */
138
+ _remove(leaf) {
139
+ if (leaf === this.root) {
140
+ this.root = null;
141
+ return;
142
+ }
143
+ const parent = leaf.parent;
144
+ const grandParent = parent.parent;
145
+ let sibling;
146
+ if (parent.left === leaf) {
147
+ sibling = parent.right;
148
+ }
149
+ else {
150
+ sibling = parent.left;
151
+ }
152
+ if (grandParent) {
153
+ if (grandParent.left === parent) {
154
+ grandParent.left = sibling;
155
+ }
156
+ else {
157
+ grandParent.right = sibling;
158
+ }
159
+ sibling.parent = grandParent;
160
+ let currentNode = grandParent;
161
+ while (currentNode) {
162
+ currentNode = this._balance(currentNode);
163
+ currentNode.bounds = currentNode.left.bounds.combine(currentNode.right.bounds);
164
+ currentNode.height = 1 + Math.max(currentNode.left.height, currentNode.right.height);
165
+ currentNode = currentNode.parent;
166
+ }
167
+ }
168
+ else {
169
+ this.root = sibling;
170
+ sibling.parent = null;
171
+ }
172
+ }
173
+ /**
174
+ * Tracks a body in the dynamic tree
175
+ */
176
+ trackCollider(collider) {
177
+ const node = new TreeNode();
178
+ node.data = collider;
179
+ node.bounds = collider.bounds;
180
+ node.bounds.left -= 2;
181
+ node.bounds.top -= 2;
182
+ node.bounds.right += 2;
183
+ node.bounds.bottom += 2;
184
+ this.nodes[collider.id.value] = node;
185
+ this._insert(node);
186
+ }
187
+ /**
188
+ * Updates the dynamic tree given the current bounds of each body being tracked
189
+ */
190
+ updateCollider(collider) {
191
+ var _a;
192
+ const node = this.nodes[collider.id.value];
193
+ if (!node) {
194
+ return false;
195
+ }
196
+ const b = collider.bounds;
197
+ // if the body is outside the world no longer update it
198
+ if (!this.worldBounds.contains(b)) {
199
+ Logger.getInstance().warn('Collider with id ' + collider.id.value + ' is outside the world bounds and will no longer be tracked for physics');
200
+ this.untrackCollider(collider);
201
+ return false;
202
+ }
203
+ if (node.bounds.contains(b)) {
204
+ return false;
205
+ }
206
+ this._remove(node);
207
+ b.left -= Physics.boundsPadding;
208
+ b.top -= Physics.boundsPadding;
209
+ b.right += Physics.boundsPadding;
210
+ b.bottom += Physics.boundsPadding;
211
+ // THIS IS CAUSING UNECESSARY CHECKS
212
+ if (collider.owner) {
213
+ const body = (_a = collider.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
214
+ if (body) {
215
+ const multdx = ((body.vel.x * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;
216
+ const multdy = ((body.vel.y * 32) / 1000) * Physics.dynamicTreeVelocityMultiplier;
217
+ if (multdx < 0) {
218
+ b.left += multdx;
219
+ }
220
+ else {
221
+ b.right += multdx;
222
+ }
223
+ if (multdy < 0) {
224
+ b.top += multdy;
225
+ }
226
+ else {
227
+ b.bottom += multdy;
228
+ }
229
+ }
230
+ }
231
+ node.bounds = b;
232
+ this._insert(node);
233
+ return true;
234
+ }
235
+ /**
236
+ * Untracks a body from the dynamic tree
237
+ */
238
+ untrackCollider(collider) {
239
+ const node = this.nodes[collider.id.value];
240
+ if (!node) {
241
+ return;
242
+ }
243
+ this._remove(node);
244
+ this.nodes[collider.id.value] = null;
245
+ delete this.nodes[collider.id.value];
246
+ }
247
+ /**
248
+ * Balances the tree about a node
249
+ */
250
+ _balance(node) {
251
+ if (node === null) {
252
+ throw new Error('Cannot balance at null node');
253
+ }
254
+ if (node.isLeaf() || node.height < 2) {
255
+ return node;
256
+ }
257
+ const left = node.left;
258
+ const right = node.right;
259
+ const a = node;
260
+ const b = left;
261
+ const c = right;
262
+ const d = left.left;
263
+ const e = left.right;
264
+ const f = right.left;
265
+ const g = right.right;
266
+ const balance = c.height - b.height;
267
+ // Rotate c node up
268
+ if (balance > 1) {
269
+ // Swap the right node with it's parent
270
+ c.left = a;
271
+ c.parent = a.parent;
272
+ a.parent = c;
273
+ // The original node's old parent should point to the right node
274
+ // this is mega confusing
275
+ if (c.parent) {
276
+ if (c.parent.left === a) {
277
+ c.parent.left = c;
278
+ }
279
+ else {
280
+ c.parent.right = c;
281
+ }
282
+ }
283
+ else {
284
+ this.root = c;
285
+ }
286
+ // Rotate
287
+ if (f.height > g.height) {
288
+ c.right = f;
289
+ a.right = g;
290
+ g.parent = a;
291
+ a.bounds = b.bounds.combine(g.bounds);
292
+ c.bounds = a.bounds.combine(f.bounds);
293
+ a.height = 1 + Math.max(b.height, g.height);
294
+ c.height = 1 + Math.max(a.height, f.height);
295
+ }
296
+ else {
297
+ c.right = g;
298
+ a.right = f;
299
+ f.parent = a;
300
+ a.bounds = b.bounds.combine(f.bounds);
301
+ c.bounds = a.bounds.combine(g.bounds);
302
+ a.height = 1 + Math.max(b.height, f.height);
303
+ c.height = 1 + Math.max(a.height, g.height);
304
+ }
305
+ return c;
306
+ }
307
+ // Rotate left node up
308
+ if (balance < -1) {
309
+ // swap
310
+ b.left = a;
311
+ b.parent = a.parent;
312
+ a.parent = b;
313
+ // node's old parent should point to b
314
+ if (b.parent) {
315
+ if (b.parent.left === a) {
316
+ b.parent.left = b;
317
+ }
318
+ else {
319
+ if (b.parent.right !== a) {
320
+ throw 'Error rotating Dynamic Tree';
321
+ }
322
+ b.parent.right = b;
323
+ }
324
+ }
325
+ else {
326
+ this.root = b;
327
+ }
328
+ // rotate
329
+ if (d.height > e.height) {
330
+ b.right = d;
331
+ a.left = e;
332
+ e.parent = a;
333
+ a.bounds = c.bounds.combine(e.bounds);
334
+ b.bounds = a.bounds.combine(d.bounds);
335
+ a.height = 1 + Math.max(c.height, e.height);
336
+ b.height = 1 + Math.max(a.height, d.height);
337
+ }
338
+ else {
339
+ b.right = e;
340
+ a.left = d;
341
+ d.parent = a;
342
+ a.bounds = c.bounds.combine(d.bounds);
343
+ b.bounds = a.bounds.combine(e.bounds);
344
+ a.height = 1 + Math.max(c.height, d.height);
345
+ b.height = 1 + Math.max(a.height, e.height);
346
+ }
347
+ return b;
348
+ }
349
+ return node;
350
+ }
351
+ /**
352
+ * Returns the internal height of the tree, shorter trees are better. Performance drops as the tree grows
353
+ */
354
+ getHeight() {
355
+ if (this.root === null) {
356
+ return 0;
357
+ }
358
+ return this.root.height;
359
+ }
360
+ /**
361
+ * Queries the Dynamic Axis Aligned Tree for bodies that could be colliding with the provided body.
362
+ *
363
+ * In the query callback, it will be passed a potential collider. Returning true from this callback indicates
364
+ * that you are complete with your query and you do not want to continue. Returning false will continue searching
365
+ * the tree until all possible colliders have been returned.
366
+ */
367
+ query(collider, callback) {
368
+ const bounds = collider.bounds;
369
+ const helper = (currentNode) => {
370
+ if (currentNode && currentNode.bounds.intersect(bounds)) {
371
+ if (currentNode.isLeaf() && currentNode.data !== collider) {
372
+ if (callback.call(collider, currentNode.data)) {
373
+ return true;
374
+ }
375
+ }
376
+ else {
377
+ return helper(currentNode.left) || helper(currentNode.right);
378
+ }
379
+ }
380
+ return false;
381
+ };
382
+ helper(this.root);
383
+ }
384
+ /**
385
+ * Queries the Dynamic Axis Aligned Tree for bodies that could be intersecting. By default the raycast query uses an infinitely
386
+ * long ray to test the tree specified by `max`.
387
+ *
388
+ * In the query callback, it will be passed a potential body that intersects with the raycast. Returning true from this
389
+ * callback indicates that your are complete with your query and do not want to continue. Return false will continue searching
390
+ * the tree until all possible bodies that would intersect with the ray have been returned.
391
+ */
392
+ rayCastQuery(ray, max = Infinity, callback) {
393
+ const helper = (currentNode) => {
394
+ if (currentNode && currentNode.bounds.rayCast(ray, max)) {
395
+ if (currentNode.isLeaf()) {
396
+ if (callback.call(ray, currentNode.data)) {
397
+ // ray hit a leaf! return the body
398
+ return true;
399
+ }
400
+ }
401
+ else {
402
+ // ray hit but not at a leaf, recurse deeper
403
+ return helper(currentNode.left) || helper(currentNode.right);
404
+ }
405
+ }
406
+ return false; // ray missed
407
+ };
408
+ helper(this.root);
409
+ }
410
+ getNodes() {
411
+ const helper = (currentNode) => {
412
+ if (currentNode) {
413
+ return [currentNode].concat(helper(currentNode.left), helper(currentNode.right));
414
+ }
415
+ else {
416
+ return [];
417
+ }
418
+ };
419
+ return helper(this.root);
420
+ }
421
+ debug(ex) {
422
+ // draw all the nodes in the Dynamic Tree
423
+ const helper = (currentNode) => {
424
+ if (currentNode) {
425
+ if (currentNode.isLeaf()) {
426
+ currentNode.bounds.draw(ex, Color.Green);
427
+ }
428
+ else {
429
+ currentNode.bounds.draw(ex, Color.White);
430
+ }
431
+ if (currentNode.left) {
432
+ helper(currentNode.left);
433
+ }
434
+ if (currentNode.right) {
435
+ helper(currentNode.right);
436
+ }
437
+ }
438
+ };
439
+ helper(this.root);
440
+ }
441
+ }
442
+ //# sourceMappingURL=DynamicTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicTree.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Detection/DynamicTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,211 @@
1
+ import { Physics } from '../Physics';
2
+ import { DynamicTree } from './DynamicTree';
3
+ import { Pair } from './Pair';
4
+ import { Vector } from '../../Math/vector';
5
+ import { Ray } from '../../Math/ray';
6
+ import { Logger } from '../../Util/Log';
7
+ import { CollisionType } from '../CollisionType';
8
+ import { BodyComponent } from '../BodyComponent';
9
+ import { CompositeCollider } from '../Colliders/CompositeCollider';
10
+ /**
11
+ * Responsible for performing the collision broadphase (locating potential collisions) and
12
+ * the narrowphase (actual collision contacts)
13
+ */
14
+ export class DynamicTreeCollisionProcessor {
15
+ constructor() {
16
+ this._dynamicCollisionTree = new DynamicTree();
17
+ this._pairs = new Set();
18
+ this._collisionPairCache = [];
19
+ this._colliders = [];
20
+ }
21
+ getColliders() {
22
+ return this._colliders;
23
+ }
24
+ /**
25
+ * Tracks a physics body for collisions
26
+ */
27
+ track(target) {
28
+ if (!target) {
29
+ Logger.getInstance().warn('Cannot track null collider');
30
+ return;
31
+ }
32
+ if (target instanceof CompositeCollider) {
33
+ const colliders = target.getColliders();
34
+ for (const c of colliders) {
35
+ c.owner = target.owner;
36
+ this._colliders.push(c);
37
+ this._dynamicCollisionTree.trackCollider(c);
38
+ }
39
+ }
40
+ else {
41
+ this._colliders.push(target);
42
+ this._dynamicCollisionTree.trackCollider(target);
43
+ }
44
+ }
45
+ /**
46
+ * Untracks a physics body
47
+ */
48
+ untrack(target) {
49
+ if (!target) {
50
+ Logger.getInstance().warn('Cannot untrack a null collider');
51
+ return;
52
+ }
53
+ if (target instanceof CompositeCollider) {
54
+ const colliders = target.getColliders();
55
+ for (const c of colliders) {
56
+ const index = this._colliders.indexOf(c);
57
+ if (index !== -1) {
58
+ this._colliders.splice(index, 1);
59
+ }
60
+ this._dynamicCollisionTree.untrackCollider(c);
61
+ }
62
+ }
63
+ else {
64
+ const index = this._colliders.indexOf(target);
65
+ if (index !== -1) {
66
+ this._colliders.splice(index, 1);
67
+ }
68
+ this._dynamicCollisionTree.untrackCollider(target);
69
+ }
70
+ }
71
+ _pairExists(colliderA, colliderB) {
72
+ // if the collision pair has been calculated already short circuit
73
+ const hash = Pair.calculatePairHash(colliderA.id, colliderB.id);
74
+ return this._pairs.has(hash);
75
+ }
76
+ /**
77
+ * Detects potential collision pairs in a broadphase approach with the dynamic AABB tree strategy
78
+ */
79
+ broadphase(targets, delta, stats) {
80
+ const seconds = delta / 1000;
81
+ // Retrieve the list of potential colliders, exclude killed, prevented, and self
82
+ const potentialColliders = targets.filter((other) => {
83
+ var _a, _b;
84
+ const body = (_a = other.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
85
+ return ((_b = other.owner) === null || _b === void 0 ? void 0 : _b.active) && body.collisionType !== CollisionType.PreventCollision;
86
+ });
87
+ // clear old list of collision pairs
88
+ this._collisionPairCache = [];
89
+ this._pairs.clear();
90
+ // check for normal collision pairs
91
+ let collider;
92
+ for (let j = 0, l = potentialColliders.length; j < l; j++) {
93
+ collider = potentialColliders[j];
94
+ // Query the collision tree for potential colliders
95
+ this._dynamicCollisionTree.query(collider, (other) => {
96
+ if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {
97
+ const pair = new Pair(collider, other);
98
+ this._pairs.add(pair.id);
99
+ this._collisionPairCache.push(pair);
100
+ }
101
+ // Always return false, to query whole tree. Returning true in the query method stops searching
102
+ return false;
103
+ });
104
+ }
105
+ if (stats) {
106
+ stats.physics.pairs = this._collisionPairCache.length;
107
+ }
108
+ // Check dynamic tree for fast moving objects
109
+ // Fast moving objects are those moving at least there smallest bound per frame
110
+ if (Physics.checkForFastBodies) {
111
+ for (const collider of potentialColliders) {
112
+ const body = collider.owner.get(BodyComponent);
113
+ // Skip non-active objects. Does not make sense on other collision types
114
+ if (body.collisionType !== CollisionType.Active) {
115
+ continue;
116
+ }
117
+ // Maximum travel distance next frame
118
+ const updateDistance = body.vel.size * seconds + // velocity term
119
+ body.acc.size * 0.5 * seconds * seconds; // acc term
120
+ // Find the minimum dimension
121
+ const minDimension = Math.min(collider.bounds.height, collider.bounds.width);
122
+ if (Physics.disableMinimumSpeedForFastBody || updateDistance > minDimension / 2) {
123
+ if (stats) {
124
+ stats.physics.fastBodies++;
125
+ }
126
+ // start with the oldPos because the integration for actors has already happened
127
+ // objects resting on a surface may be slightly penetrating in the current position
128
+ const updateVec = body.pos.sub(body.oldPos);
129
+ const centerPoint = collider.center;
130
+ const furthestPoint = collider.getFurthestPoint(body.vel);
131
+ const origin = furthestPoint.sub(updateVec);
132
+ const ray = new Ray(origin, body.vel);
133
+ // back the ray up by -2x surfaceEpsilon to account for fast moving objects starting on the surface
134
+ ray.pos = ray.pos.add(ray.dir.scale(-2 * Physics.surfaceEpsilon));
135
+ let minCollider;
136
+ let minTranslate = new Vector(Infinity, Infinity);
137
+ this._dynamicCollisionTree.rayCastQuery(ray, updateDistance + Physics.surfaceEpsilon * 2, (other) => {
138
+ if (!this._pairExists(collider, other) && Pair.canCollide(collider, other)) {
139
+ const hitPoint = other.rayCast(ray, updateDistance + Physics.surfaceEpsilon * 10);
140
+ if (hitPoint) {
141
+ const translate = hitPoint.sub(origin);
142
+ if (translate.size < minTranslate.size) {
143
+ minTranslate = translate;
144
+ minCollider = other;
145
+ }
146
+ }
147
+ }
148
+ return false;
149
+ });
150
+ if (minCollider && Vector.isValid(minTranslate)) {
151
+ const pair = new Pair(collider, minCollider);
152
+ if (!this._pairs.has(pair.id)) {
153
+ this._pairs.add(pair.id);
154
+ this._collisionPairCache.push(pair);
155
+ }
156
+ // move the fast moving object to the other body
157
+ // need to push into the surface by ex.Physics.surfaceEpsilon
158
+ const shift = centerPoint.sub(furthestPoint);
159
+ body.pos = origin
160
+ .add(shift)
161
+ .add(minTranslate)
162
+ .add(ray.dir.scale(10 * Physics.surfaceEpsilon)); // needed to push the shape slightly into contact
163
+ collider.update(body.transform);
164
+ if (stats) {
165
+ stats.physics.fastBodyCollisions++;
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ // return cache
172
+ return this._collisionPairCache;
173
+ }
174
+ /**
175
+ * Applies narrow phase on collision pairs to find actual area intersections
176
+ * Adds actual colliding pairs to stats' Frame data
177
+ */
178
+ narrowphase(pairs, stats) {
179
+ let contacts = [];
180
+ for (let i = 0; i < pairs.length; i++) {
181
+ const newContacts = pairs[i].collide();
182
+ contacts = contacts.concat(newContacts);
183
+ if (stats && newContacts.length > 0) {
184
+ for (const c of newContacts) {
185
+ stats.physics.contacts.set(c.id, c);
186
+ }
187
+ }
188
+ }
189
+ if (stats) {
190
+ stats.physics.collisions += contacts.length;
191
+ }
192
+ return contacts;
193
+ }
194
+ /**
195
+ * Update the dynamic tree positions
196
+ */
197
+ update(targets) {
198
+ let updated = 0;
199
+ const len = targets.length;
200
+ for (let i = 0; i < len; i++) {
201
+ if (this._dynamicCollisionTree.updateCollider(targets[i])) {
202
+ updated++;
203
+ }
204
+ }
205
+ return updated;
206
+ }
207
+ debug(ex) {
208
+ this._dynamicCollisionTree.debug(ex);
209
+ }
210
+ }
211
+ //# sourceMappingURL=DynamicTreeCollisionProcessor.js.map