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 @@
1
+ {"version":3,"file":"DynamicTreeCollisionProcessor.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Detection/DynamicTreeCollisionProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { CollisionType } from '../CollisionType';
2
+ import { BodyComponent } from '../BodyComponent';
3
+ /**
4
+ * Models a potential collision between 2 colliders
5
+ */
6
+ export class Pair {
7
+ constructor(colliderA, colliderB) {
8
+ this.colliderA = colliderA;
9
+ this.colliderB = colliderB;
10
+ this.id = null;
11
+ this.id = Pair.calculatePairHash(colliderA.id, colliderB.id);
12
+ }
13
+ /**
14
+ * Returns whether a it is allowed for 2 colliders in a Pair to collide
15
+ * @param colliderA
16
+ * @param colliderB
17
+ */
18
+ static canCollide(colliderA, colliderB) {
19
+ var _a, _b;
20
+ const bodyA = (_a = colliderA === null || colliderA === void 0 ? void 0 : colliderA.owner) === null || _a === void 0 ? void 0 : _a.get(BodyComponent);
21
+ const bodyB = (_b = colliderB === null || colliderB === void 0 ? void 0 : colliderB.owner) === null || _b === void 0 ? void 0 : _b.get(BodyComponent);
22
+ // Prevent self collision
23
+ if (colliderA.id === colliderB.id) {
24
+ return false;
25
+ }
26
+ // Colliders with the same owner do not collide (composite colliders)
27
+ if (colliderA.owner &&
28
+ colliderB.owner &&
29
+ colliderA.owner.id === colliderB.owner.id) {
30
+ return false;
31
+ }
32
+ // if the pair has a member with zero dimension don't collide
33
+ if (colliderA.localBounds.hasZeroDimensions() || colliderB.localBounds.hasZeroDimensions()) {
34
+ return false;
35
+ }
36
+ // Body's needed for collision in the current state
37
+ // TODO can we collide without a body?
38
+ if (!bodyA || !bodyB) {
39
+ return false;
40
+ }
41
+ // If both are in the same collision group short circuit
42
+ if (!bodyA.group.canCollide(bodyB.group)) {
43
+ return false;
44
+ }
45
+ // if both are fixed short circuit
46
+ if (bodyA.collisionType === CollisionType.Fixed && bodyB.collisionType === CollisionType.Fixed) {
47
+ return false;
48
+ }
49
+ // if the either is prevent collision short circuit
50
+ if (bodyB.collisionType === CollisionType.PreventCollision || bodyA.collisionType === CollisionType.PreventCollision) {
51
+ return false;
52
+ }
53
+ // if either is dead short circuit
54
+ if (!bodyA.active || !bodyB.active) {
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ /**
60
+ * Returns whether or not it is possible for the pairs to collide
61
+ */
62
+ get canCollide() {
63
+ const colliderA = this.colliderA;
64
+ const colliderB = this.colliderB;
65
+ return Pair.canCollide(colliderA, colliderB);
66
+ }
67
+ /**
68
+ * Runs the collision intersection logic on the members of this pair
69
+ */
70
+ collide() {
71
+ return this.colliderA.collide(this.colliderB);
72
+ }
73
+ /**
74
+ * Check if the collider is part of the pair
75
+ * @param collider
76
+ */
77
+ hasCollider(collider) {
78
+ return collider === this.colliderA || collider === this.colliderB;
79
+ }
80
+ /**
81
+ * Calculates the unique pair hash id for this collision pair (owning id)
82
+ */
83
+ static calculatePairHash(idA, idB) {
84
+ if (idA.value < idB.value) {
85
+ return `#${idA.value}+${idB.value}`;
86
+ }
87
+ else {
88
+ return `#${idB.value}+${idA.value}`;
89
+ }
90
+ }
91
+ }
92
+ //# sourceMappingURL=Pair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pair.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Detection/Pair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * CollisionGroups indicate like members that do not collide with each other. Use [[CollisionGroupManager]] to create [[CollisionGroup]]s
3
+ *
4
+ * For example:
5
+ *
6
+ * Players have collision group "player"
7
+ *
8
+ * ![Player Collision Group](/assets/images/docs/CollisionGroupsPlayer.png)
9
+ *
10
+ * Enemies have collision group "enemy"
11
+ *
12
+ * ![Enemy Collision Group](/assets/images/docs/CollisionGroupsEnemy.png)
13
+ *
14
+ * Blocks have collision group "ground"
15
+ *
16
+ * ![Ground collision group](/assets/images/docs/CollisionGroupsGround.png)
17
+ *
18
+ * Players don't collide with each other, but enemies and blocks. Likewise, enemies don't collide with each other but collide
19
+ * with players and blocks.
20
+ *
21
+ * This is done with bitmasking, see the following pseudo-code
22
+ *
23
+ * PlayerGroup = `0b001`
24
+ * PlayerGroupMask = `0b110`
25
+ *
26
+ * EnemyGroup = `0b010`
27
+ * EnemyGroupMask = `0b101`
28
+ *
29
+ * BlockGroup = `0b100`
30
+ * BlockGroupMask = `0b011`
31
+ *
32
+ * Should Players collide? No because the bitwise mask evaluates to 0
33
+ * `(player1.group & player2.mask) === 0`
34
+ * `(0b001 & 0b110) === 0`
35
+ *
36
+ * Should Players and Enemies collide? Yes because the bitwise mask is non-zero
37
+ * `(player1.group & enemy1.mask) === 1`
38
+ * `(0b001 & 0b101) === 1`
39
+ *
40
+ * Should Players and Blocks collide? Yes because the bitwise mask is non-zero
41
+ * `(player1.group & blocks1.mask) === 1`
42
+ * `(0b001 & 0b011) === 1`
43
+ */
44
+ export class CollisionGroup {
45
+ /**
46
+ * STOP!!** It is preferred that [[CollisionGroupManager.create]] is used to create collision groups
47
+ * unless you know how to construct the proper bitmasks. See https://github.com/excaliburjs/Excalibur/issues/1091 for more info.
48
+ * @param name Name of the collision group
49
+ * @param category 32 bit category for the group, should be a unique power of 2. For example `0b001` or `0b010`
50
+ * @param mask 32 bit mask of category, or `~category` generally. For a category of `0b001`, the mask would be `0b110`
51
+ */
52
+ constructor(name, category, mask) {
53
+ this._name = name;
54
+ this._category = category;
55
+ this._mask = mask;
56
+ }
57
+ /**
58
+ * Get the name of the collision group
59
+ */
60
+ get name() {
61
+ return this._name;
62
+ }
63
+ /**
64
+ * Get the category of the collision group, a 32 bit number which should be a unique power of 2
65
+ */
66
+ get category() {
67
+ return this._category;
68
+ }
69
+ /**
70
+ * Get the mask for this collision group
71
+ */
72
+ get mask() {
73
+ return this._mask;
74
+ }
75
+ /**
76
+ * Evaluates whether 2 collision groups can collide
77
+ * @param other CollisionGroup
78
+ */
79
+ canCollide(other) {
80
+ return (this.category & other.mask) !== 0 && (other.category & this.mask) !== 0;
81
+ }
82
+ /**
83
+ * Inverts the collision group. For example, if before the group specified "players",
84
+ * inverting would specify all groups except players
85
+ * @returns CollisionGroup
86
+ */
87
+ invert() {
88
+ return new CollisionGroup('~(' + this.name + ')', ~this.category, ~this.mask);
89
+ }
90
+ /**
91
+ * Combine collision groups with each other. The new group includes all of the previous groups.
92
+ *
93
+ * @param collisionGroups
94
+ */
95
+ static combine(collisionGroups) {
96
+ const combinedName = collisionGroups.map((c) => c.name).join('+');
97
+ const combinedCategory = collisionGroups.reduce((current, g) => g.category | current, 0b0);
98
+ const combinedMask = ~combinedCategory;
99
+ return new CollisionGroup(combinedName, combinedCategory, combinedMask);
100
+ }
101
+ /**
102
+ * Creates a collision group that collides with the listed groups
103
+ * @param collisionGroups
104
+ */
105
+ static collidesWith(collisionGroups) {
106
+ return CollisionGroup.combine(collisionGroups).invert();
107
+ }
108
+ }
109
+ /**
110
+ * The `All` [[CollisionGroup]] is a special group that collides with all other groups including itself,
111
+ * it is the default collision group on colliders.
112
+ */
113
+ CollisionGroup.All = new CollisionGroup('Collide with all groups', -1, -1);
114
+ //# sourceMappingURL=CollisionGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionGroup.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Group/CollisionGroup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,cAAc;IAWzB;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,QAAgB,EAAE,IAAY;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,KAAqB;QACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAED;;;;OAIG;IACI,MAAM;QACX,OAAO,IAAI,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAAC,eAAiC;QACrD,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAG,CAAC,gBAAgB,CAAC;QAEvC,OAAO,IAAI,cAAc,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,YAAY,CAAC,eAAiC;QAC1D,OAAO,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;;AAhFD;;;GAGG;AACW,kBAAG,GAAG,IAAI,cAAc,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { CollisionGroup } from './CollisionGroup';
2
+ /**
3
+ * Static class for managing collision groups in excalibur, there is a maximum of 32 collision groups possible in excalibur
4
+ */
5
+ export class CollisionGroupManager {
6
+ /**
7
+ * Create a new named collision group up to a max of 32.
8
+ * @param name Name for the collision group
9
+ * @param mask Optionally provide your own 32-bit mask, if none is provide the manager will generate one
10
+ */
11
+ static create(name, mask) {
12
+ if (this._CURRENT_GROUP > this._MAX_GROUPS) {
13
+ throw new Error(`Cannot have more than ${this._MAX_GROUPS} collision groups`);
14
+ }
15
+ if (this._GROUPS.get(name)) {
16
+ throw new Error(`Collision group ${name} already exists`);
17
+ }
18
+ const group = new CollisionGroup(name, this._CURRENT_BIT, mask !== undefined ? mask : ~this._CURRENT_BIT);
19
+ this._CURRENT_BIT = (this._CURRENT_BIT << 1) | 0;
20
+ this._CURRENT_GROUP++;
21
+ this._GROUPS.set(name, group);
22
+ return group;
23
+ }
24
+ /**
25
+ * Get all collision groups currently tracked by excalibur
26
+ */
27
+ static get groups() {
28
+ return Array.from(this._GROUPS.values());
29
+ }
30
+ /**
31
+ * Get a collision group by it's name
32
+ * @param name
33
+ */
34
+ static groupByName(name) {
35
+ return this._GROUPS.get(name);
36
+ }
37
+ /**
38
+ * Resets the managers internal group management state
39
+ */
40
+ static reset() {
41
+ this._GROUPS = new Map();
42
+ this._CURRENT_BIT = this._STARTING_BIT;
43
+ this._CURRENT_GROUP = 1;
44
+ }
45
+ }
46
+ // using bitmasking the maximum number of groups is 32, because that is the highest 32bit integer that JS can present.
47
+ CollisionGroupManager._STARTING_BIT = 0b1 | 0;
48
+ CollisionGroupManager._MAX_GROUPS = 32;
49
+ CollisionGroupManager._CURRENT_GROUP = 1;
50
+ CollisionGroupManager._CURRENT_BIT = CollisionGroupManager._STARTING_BIT;
51
+ CollisionGroupManager._GROUPS = new Map();
52
+ //# sourceMappingURL=CollisionGroupManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollisionGroupManager.js","sourceRoot":"","sources":["../../../../src/engine/Collision/Group/CollisionGroupManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IAQhC;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,IAAa;QAC9C,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,WAAW,mBAAmB,CAAC,CAAC;SAC/E;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,iBAAiB,CAAC,CAAC;SAC3D;QACD,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1G,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,MAAM;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,WAAW,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,CAAC;;AAhDD,sHAAsH;AACvG,mCAAa,GAAG,GAAG,GAAG,CAAC,CAAC;AACxB,iCAAW,GAAG,EAAE,CAAC;AACjB,oCAAc,GAAG,CAAC,CAAC;AACnB,kCAAY,GAAG,qBAAqB,CAAC,aAAa,CAAC;AACnD,6BAAO,GAAgC,IAAI,GAAG,EAA0B,CAAC"}
@@ -0,0 +1,29 @@
1
+ export * from './BodyComponent';
2
+ export * from './ColliderComponent';
3
+ export * from './CollisionType';
4
+ export * from './Colliders/Collider';
5
+ export * from './BoundingBox';
6
+ export * from './Colliders/Shape';
7
+ export * from './Colliders/Collider';
8
+ export * from './Colliders/CompositeCollider';
9
+ export * from './Colliders/CircleCollider';
10
+ export * from './Colliders/EdgeCollider';
11
+ export * from './Colliders/PolygonCollider';
12
+ export * from './Colliders/CollisionJumpTable';
13
+ export * from './Colliders/ClosestLineJumpTable';
14
+ export * from './Group/CollisionGroup';
15
+ export * from './Group/CollisionGroupManager';
16
+ export * from './Detection/Pair';
17
+ export * from './Detection/CollisionContact';
18
+ export * from './Detection/CollisionProcessor';
19
+ export * from './Detection/DynamicTree';
20
+ export * from './Detection/DynamicTreeCollisionProcessor';
21
+ export * from './Solver/ArcadeSolver';
22
+ export * from './Solver/ContactConstraintPoint';
23
+ export * from './Solver/RealisticSolver';
24
+ export * from './Solver/Solver';
25
+ export * from './CollisionSystem';
26
+ export * from './MotionSystem';
27
+ export * from './Physics';
28
+ export * from './Side';
29
+ //# sourceMappingURL=Index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../src/engine/Collision/Index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAE9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAE9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2CAA2C,CAAC;AAE1D,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export class EulerIntegrator {
2
+ static integrate(transform, motion, totalAcc, elapsedMs) {
3
+ const seconds = elapsedMs / 1000;
4
+ motion.vel.addEqual(totalAcc.scale(seconds));
5
+ transform.pos.addEqual(motion.vel.scale(seconds)).addEqual(totalAcc.scale(0.5 * seconds * seconds));
6
+ motion.angularVelocity += motion.torque * (1.0 / motion.inertia) * seconds;
7
+ transform.rotation += motion.angularVelocity * seconds;
8
+ transform.scale.addEqual(motion.scaleFactor.scale(seconds));
9
+ }
10
+ }
11
+ //# sourceMappingURL=Integrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Integrator.js","sourceRoot":"","sources":["../../../src/engine/Collision/Integrator.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,SAAS,CAAC,SAA6B,EAAE,MAAuB,EAAE,QAAgB,EAAE,SAAiB;QAC1G,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;QAEpG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;QAC3E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;QAEvD,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import { MotionComponent } from '../EntityComponentSystem/Components/MotionComponent';
2
+ import { TransformComponent } from '../EntityComponentSystem/Components/TransformComponent';
3
+ import { System, SystemType } from '../EntityComponentSystem/System';
4
+ import { Physics } from './Physics';
5
+ import { BodyComponent } from './BodyComponent';
6
+ import { CollisionType } from './CollisionType';
7
+ import { EulerIntegrator } from './Integrator';
8
+ export class MotionSystem extends System {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.types = ['ex.transform', 'ex.motion'];
12
+ this.systemType = SystemType.Update;
13
+ this.priority = -1;
14
+ }
15
+ update(_entities, elapsedMs) {
16
+ let transform;
17
+ let motion;
18
+ for (const entity of _entities) {
19
+ transform = entity.get(TransformComponent);
20
+ motion = entity.get(MotionComponent);
21
+ const optionalBody = entity.get(BodyComponent);
22
+ if (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.sleeping) {
23
+ continue;
24
+ }
25
+ const totalAcc = motion.acc.clone();
26
+ if ((optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.collisionType) === CollisionType.Active && (optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.useGravity)) {
27
+ totalAcc.addEqual(Physics.gravity);
28
+ }
29
+ optionalBody === null || optionalBody === void 0 ? void 0 : optionalBody.captureOldTransform();
30
+ // Update transform and motion based on Euler linear algebra
31
+ EulerIntegrator.integrate(transform, motion, totalAcc, elapsedMs);
32
+ }
33
+ }
34
+ /**
35
+ * @deprecated signature will change in v0.26.0
36
+ * @param _ctx
37
+ */
38
+ debugDraw(_ctx) {
39
+ // pass
40
+ }
41
+ }
42
+ //# sourceMappingURL=MotionSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MotionSystem.js","sourceRoot":"","sources":["../../../src/engine/Collision/MotionSystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,OAAO,YAAa,SAAQ,MAA4C;IAA9E;;QACkB,UAAK,GAAG,CAAC,cAAc,EAAE,WAAW,CAAU,CAAC;QACxD,eAAU,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,aAAQ,GAAG,CAAC,CAAC,CAAC;IAgCvB,CAAC;IA9BC,MAAM,CAAC,SAAmB,EAAE,SAAiB;QAC3C,IAAI,SAA6B,CAAC;QAClC,IAAI,MAAuB,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;YAC9B,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC3C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAErC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,EAAE;gBAC1B,SAAS;aACV;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,aAAa,MAAK,aAAa,CAAC,MAAM,KAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,CAAA,EAAE;gBACpF,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACpC;YACD,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,mBAAmB,EAAE,CAAC;YAEpC,4DAA4D;YAC5D,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SACnE;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,IAA8B;QACtC,OAAO;IACT,CAAC;CACF"}
@@ -0,0 +1,163 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Vector } from '../Math/vector';
8
+ import { obsolete } from '../Util/Decorators';
9
+ /**
10
+ * Possible collision resolution strategies
11
+ *
12
+ * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics. This is useful for things
13
+ * like platformers or top down games.
14
+ *
15
+ * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated
16
+ * simulated physical interactions.
17
+ */
18
+ export var CollisionResolutionStrategy;
19
+ (function (CollisionResolutionStrategy) {
20
+ CollisionResolutionStrategy["Arcade"] = "arcade";
21
+ CollisionResolutionStrategy["Realistic"] = "realistic";
22
+ })(CollisionResolutionStrategy || (CollisionResolutionStrategy = {}));
23
+ /**
24
+ * Possible broadphase collision pair identification strategies
25
+ *
26
+ * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify
27
+ * potential collision pairs which is O(nlog(n)) faster.
28
+ */
29
+ export var BroadphaseStrategy;
30
+ (function (BroadphaseStrategy) {
31
+ BroadphaseStrategy[BroadphaseStrategy["DynamicAABBTree"] = 0] = "DynamicAABBTree";
32
+ })(BroadphaseStrategy || (BroadphaseStrategy = {}));
33
+ /**
34
+ * Possible numerical integrators for position and velocity
35
+ */
36
+ export var Integrator;
37
+ (function (Integrator) {
38
+ Integrator[Integrator["Euler"] = 0] = "Euler";
39
+ })(Integrator || (Integrator = {}));
40
+ /**
41
+ * The [[Physics]] object is the global configuration object for all Excalibur physics.
42
+ */
43
+ /* istanbul ignore next */
44
+ export class Physics {
45
+ static get gravity() {
46
+ return Physics.acc;
47
+ }
48
+ static set gravity(v) {
49
+ Physics.acc = v;
50
+ }
51
+ /**
52
+ * Configures Excalibur to use "arcade" physics. Arcade physics which performs simple axis aligned arcade style physics.
53
+ */
54
+ static useArcadePhysics() {
55
+ Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;
56
+ }
57
+ /**
58
+ * Configures Excalibur to use rigid body physics. Rigid body physics allows for complicated
59
+ * simulated physical interactions.
60
+ */
61
+ static useRealisticPhysics() {
62
+ Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Realistic;
63
+ }
64
+ static get dynamicTreeVelocityMultiplyer() {
65
+ return Physics.dynamicTreeVelocityMultiplier;
66
+ }
67
+ static set dynamicTreeVelocityMultiplyer(value) {
68
+ Physics.dynamicTreeVelocityMultiplier = value;
69
+ }
70
+ }
71
+ /**
72
+ * Global acceleration that is applied to all vanilla actors that have a [[CollisionType.Active|active]] collision type.
73
+ * Global acceleration won't effect [[Label|labels]], [[ScreenElement|ui actors]], or [[Trigger|triggers]] in Excalibur.
74
+ *
75
+ * This is a great way to globally simulate effects like gravity.
76
+ */
77
+ Physics.acc = new Vector(0, 0);
78
+ /**
79
+ * Globally switches all Excalibur physics behavior on or off.
80
+ */
81
+ Physics.enabled = true;
82
+ /**
83
+ * Gets or sets the broadphase pair identification strategy.
84
+ *
85
+ * The default strategy is [[BroadphaseStrategy.DynamicAABBTree]] which uses a binary tree of axis-aligned bounding boxes to identify
86
+ * potential collision pairs which is O(nlog(n)) faster.
87
+ */
88
+ Physics.broadphaseStrategy = BroadphaseStrategy.DynamicAABBTree;
89
+ /**
90
+ * Gets or sets the global collision resolution strategy (narrowphase).
91
+ *
92
+ * The default is [[CollisionResolutionStrategy.Arcade]] which performs simple axis aligned arcade style physics.
93
+ *
94
+ * More advanced rigid body physics are enabled by setting [[CollisionResolutionStrategy.Realistic]] which allows for complicated
95
+ * simulated physical interactions.
96
+ */
97
+ Physics.collisionResolutionStrategy = CollisionResolutionStrategy.Arcade;
98
+ /**
99
+ * The default mass to use if none is specified
100
+ */
101
+ Physics.defaultMass = 10;
102
+ /**
103
+ * Gets or sets the position and velocity positional integrator, currently only Euler is supported.
104
+ */
105
+ Physics.integrator = Integrator.Euler;
106
+ /**
107
+ * Factor to add to the RigidBody BoundingBox, bounding box (dimensions += vel * dynamicTreeVelocityMultiplier);
108
+ */
109
+ Physics.dynamicTreeVelocityMultiplier = 2;
110
+ /**
111
+ * Pad RigidBody BoundingBox by a constant amount
112
+ */
113
+ Physics.boundsPadding = 5;
114
+ /**
115
+ * Number of position iterations (overlap) to run in the solver
116
+ */
117
+ Physics.positionIterations = 3;
118
+ /**
119
+ * Number of velocity iteration (response) to run in the solver
120
+ */
121
+ Physics.velocityIterations = 8;
122
+ /**
123
+ * Amount of overlap to tolerate in pixels
124
+ */
125
+ Physics.slop = 1;
126
+ /**
127
+ * Amount of positional overlap correction to apply each position iteration of the solver
128
+ * O - meaning no correction, 1 - meaning correct all overlap
129
+ */
130
+ Physics.steeringFactor = 0.2;
131
+ /**
132
+ * Warm start set to true re-uses impulses from previous frames back in the solver
133
+ */
134
+ Physics.warmStart = true;
135
+ /**
136
+ * By default bodies do not sleep
137
+ */
138
+ Physics.bodiesCanSleepByDefault = false;
139
+ /**
140
+ * Surface epsilon is used to help deal with surface penetration
141
+ */
142
+ Physics.surfaceEpsilon = 0.1;
143
+ Physics.sleepEpsilon = 0.07;
144
+ Physics.wakeThreshold = Physics.sleepEpsilon * 3;
145
+ Physics.sleepBias = 0.9;
146
+ /**
147
+ * Enable fast moving body checking, this enables checking for collision pairs via raycast for fast moving objects to prevent
148
+ * bodies from tunneling through one another.
149
+ */
150
+ Physics.checkForFastBodies = true;
151
+ /**
152
+ * Disable minimum fast moving body raycast, by default if ex.Physics.checkForFastBodies = true Excalibur will only check if the
153
+ * body is moving at least half of its minimum dimension in an update. If ex.Physics.disableMinimumSpeedForFastBody is set to true,
154
+ * Excalibur will always perform the fast body raycast regardless of speed.
155
+ */
156
+ Physics.disableMinimumSpeedForFastBody = false;
157
+ __decorate([
158
+ obsolete({
159
+ message: 'Alias for incorrect spelling used in older versions, will be removed in v0.25.0',
160
+ alternateMethod: 'dynamicTreeVelocityMultiplier'
161
+ })
162
+ ], Physics, "dynamicTreeVelocityMultiplyer", null);
163
+ //# sourceMappingURL=Physics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Physics.js","sourceRoot":"","sources":["../../../src/engine/Collision/Physics.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C;;;;;;;;GAQG;AACH,MAAM,CAAN,IAAY,2BAGX;AAHD,WAAY,2BAA2B;IACrC,gDAAiB,CAAA;IACjB,sDAAuB,CAAA;AACzB,CAAC,EAHW,2BAA2B,KAA3B,2BAA2B,QAGtC;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,kBAEX;AAFD,WAAY,kBAAkB;IAC5B,iFAAe,CAAA;AACjB,CAAC,EAFW,kBAAkB,KAAlB,kBAAkB,QAE7B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,6CAAK,CAAA;AACP,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED;;GAEG;AACH,0BAA0B;AAC1B,MAAM,OAAO,OAAO;IAQX,MAAM,KAAK,OAAO;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC;IACM,MAAM,KAAK,OAAO,CAAC,CAAS;QACjC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IAClB,CAAC;IAiCD;;OAEG;IACI,MAAM,CAAC,gBAAgB;QAC5B,OAAO,CAAC,2BAA2B,GAAG,2BAA2B,CAAC,MAAM,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,mBAAmB;QAC/B,OAAO,CAAC,2BAA2B,GAAG,2BAA2B,CAAC,SAAS,CAAC;IAC9E,CAAC;IAWM,MAAM,KAAK,6BAA6B;QAC7C,OAAO,OAAO,CAAC,6BAA6B,CAAC;IAC/C,CAAC;IAEM,MAAM,KAAK,6BAA6B,CAAC,KAAa;QAC3D,OAAO,CAAC,6BAA6B,GAAG,KAAK,CAAC;IAChD,CAAC;;AA3ED;;;;;GAKG;AACW,WAAG,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAQrC;;GAEG;AACW,eAAO,GAAG,IAAI,CAAC;AAE7B;;;;;GAKG;AACW,0BAAkB,GAAuB,kBAAkB,CAAC,eAAe,CAAC;AAE1F;;;;;;;GAOG;AACW,mCAA2B,GAAgC,2BAA2B,CAAC,MAAM,CAAC;AAC5G;;GAEG;AACW,mBAAW,GAAW,EAAE,CAAC;AACvC;;GAEG;AACW,kBAAU,GAAe,UAAU,CAAC,KAAK,CAAC;AAiBxD;;GAEG;AACW,qCAA6B,GAAG,CAAC,CAAC;AAchD;;GAEG;AACW,qBAAa,GAAG,CAAC,CAAC;AAEhC;;GAEG;AACW,0BAAkB,GAAG,CAAC,CAAC;AAErC;;GAEG;AACW,0BAAkB,GAAG,CAAC,CAAC;AAErC;;GAEG;AACW,YAAI,GAAG,CAAC,CAAC;AAEvB;;;GAGG;AACW,sBAAc,GAAG,GAAG,CAAC;AAEnC;;GAEG;AACW,iBAAS,GAAG,IAAI,CAAC;AAE/B;;GAEG;AACW,+BAAuB,GAAG,KAAK,CAAC;AAE9C;;GAEG;AACW,sBAAc,GAAG,GAAG,CAAC;AAErB,oBAAY,GAAG,IAAI,CAAC;AAEpB,qBAAa,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC;AAEzC,iBAAS,GAAG,GAAG,CAAC;AAE9B;;;GAGG;AACW,0BAAkB,GAAG,IAAI,CAAC;AAExC;;;;GAIG;AACW,sCAA8B,GAAG,KAAK,CAAC;AAlErD;IAJC,QAAQ,CAAC;QACR,OAAO,EAAE,iFAAiF;QAC1F,eAAe,EAAE,+BAA+B;KACjD,CAAC;kDAGD"}
@@ -0,0 +1,51 @@
1
+ import { Vector } from '../Math/vector';
2
+ /**
3
+ * An enum that describes the sides of an axis aligned box for collision
4
+ */
5
+ export var Side;
6
+ (function (Side) {
7
+ Side["None"] = "None";
8
+ Side["Top"] = "Top";
9
+ Side["Bottom"] = "Bottom";
10
+ Side["Left"] = "Left";
11
+ Side["Right"] = "Right";
12
+ })(Side || (Side = {}));
13
+ (function (Side) {
14
+ /**
15
+ * Returns the opposite side from the current
16
+ */
17
+ function getOpposite(side) {
18
+ if (side === Side.Top) {
19
+ return Side.Bottom;
20
+ }
21
+ if (side === Side.Bottom) {
22
+ return Side.Top;
23
+ }
24
+ if (side === Side.Left) {
25
+ return Side.Right;
26
+ }
27
+ if (side === Side.Right) {
28
+ return Side.Left;
29
+ }
30
+ return Side.None;
31
+ }
32
+ Side.getOpposite = getOpposite;
33
+ /**
34
+ * Given a vector, return the Side most in that direction (via dot product)
35
+ */
36
+ function fromDirection(direction) {
37
+ const directions = [Vector.Left, Vector.Right, Vector.Up, Vector.Down];
38
+ const directionEnum = [Side.Left, Side.Right, Side.Top, Side.Bottom];
39
+ let max = -Number.MAX_VALUE;
40
+ let maxIndex = -1;
41
+ for (let i = 0; i < directions.length; i++) {
42
+ if (directions[i].dot(direction) > max) {
43
+ max = directions[i].dot(direction);
44
+ maxIndex = i;
45
+ }
46
+ }
47
+ return directionEnum[maxIndex];
48
+ }
49
+ Side.fromDirection = fromDirection;
50
+ })(Side || (Side = {}));
51
+ //# sourceMappingURL=Side.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Side.js","sourceRoot":"","sources":["../../../src/engine/Collision/Side.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC;;GAEG;AACH,MAAM,CAAN,IAAY,IAMX;AAND,WAAY,IAAI;IACd,qBAAa,CAAA;IACb,mBAAW,CAAA;IACX,yBAAiB,CAAA;IACjB,qBAAa,CAAA;IACb,uBAAe,CAAA;AACjB,CAAC,EANW,IAAI,KAAJ,IAAI,QAMf;AAED,WAAc,IAAI;IAChB;;OAEG;IACH,SAAgB,WAAW,CAAC,IAAU;QACpC,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC;SACjB;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YACtB,OAAO,IAAI,CAAC,KAAK,CAAC;SACnB;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC;SAClB;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAfe,gBAAW,cAe1B,CAAA;IAED;;OAEG;IACH,SAAgB,aAAa,CAAC,SAAiB;QAC7C,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAErE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE;gBACtC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnC,QAAQ,GAAG,CAAC,CAAC;aACd;SACF;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAbe,kBAAa,gBAa5B,CAAA;AACH,CAAC,EAtCa,IAAI,KAAJ,IAAI,QAsCjB"}