excalibur 0.28.3 → 0.28.4

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 (482) hide show
  1. package/.gitattributes +63 -63
  2. package/CHANGELOG.md +2003 -1955
  3. package/LICENSE.md +25 -25
  4. package/README.md +134 -134
  5. package/STYLEGUIDE.md +136 -136
  6. package/build/dist/Actions/Action/ActionSequence.js +31 -0
  7. package/build/dist/Actions/Action/ActionSequence.js.map +1 -0
  8. package/build/dist/Actions/Action/Blink.js +54 -0
  9. package/build/dist/Actions/Action/Blink.js.map +1 -0
  10. package/build/dist/Actions/Action/CallMethod.js +21 -0
  11. package/build/dist/Actions/Action/CallMethod.js.map +1 -0
  12. package/build/dist/Actions/Action/Delay.js +26 -0
  13. package/build/dist/Actions/Action/Delay.js.map +1 -0
  14. package/build/dist/Actions/Action/Die.js +22 -0
  15. package/build/dist/Actions/Action/Die.js.map +1 -0
  16. package/build/dist/Actions/Action/EaseBy.js +70 -0
  17. package/build/dist/Actions/Action/EaseBy.js.map +1 -0
  18. package/build/dist/Actions/Action/EaseTo.js +69 -0
  19. package/build/dist/Actions/Action/EaseTo.js.map +1 -0
  20. package/build/dist/Actions/Action/Fade.js +48 -0
  21. package/build/dist/Actions/Action/Fade.js.map +1 -0
  22. package/build/dist/Actions/Action/Follow.js +56 -0
  23. package/build/dist/Actions/Action/Follow.js.map +1 -0
  24. package/build/dist/Actions/Action/Meet.js +54 -0
  25. package/build/dist/Actions/Action/Meet.js.map +1 -0
  26. package/build/dist/Actions/Action/MoveBy.js +48 -0
  27. package/build/dist/Actions/Action/MoveBy.js.map +1 -0
  28. package/build/dist/Actions/Action/MoveTo.js +41 -0
  29. package/build/dist/Actions/Action/MoveTo.js.map +1 -0
  30. package/build/dist/Actions/Action/ParallelActions.js +23 -0
  31. package/build/dist/Actions/Action/ParallelActions.js.map +1 -0
  32. package/build/dist/Actions/Action/Repeat.js +31 -0
  33. package/build/dist/Actions/Action/Repeat.js.map +1 -0
  34. package/build/dist/Actions/Action/RepeatForever.js +37 -0
  35. package/build/dist/Actions/Action/RepeatForever.js.map +1 -0
  36. package/build/dist/Actions/Action/RotateBy.js +95 -0
  37. package/build/dist/Actions/Action/RotateBy.js.map +1 -0
  38. package/build/dist/Actions/Action/RotateTo.js +91 -0
  39. package/build/dist/Actions/Action/RotateTo.js.map +1 -0
  40. package/build/dist/Actions/Action/ScaleBy.js +46 -0
  41. package/build/dist/Actions/Action/ScaleBy.js.map +1 -0
  42. package/build/dist/Actions/Action/ScaleTo.js +58 -0
  43. package/build/dist/Actions/Action/ScaleTo.js.map +1 -0
  44. package/build/dist/Actions/Action.js +2 -0
  45. package/build/dist/Actions/Action.js.map +1 -0
  46. package/build/dist/Actions/ActionContext.js +322 -0
  47. package/build/dist/Actions/ActionContext.js.map +1 -0
  48. package/build/dist/Actions/ActionQueue.js +87 -0
  49. package/build/dist/Actions/ActionQueue.js.map +1 -0
  50. package/build/dist/Actions/Actionable.js +2 -0
  51. package/build/dist/Actions/Actionable.js.map +1 -0
  52. package/build/dist/Actions/ActionsComponent.js +195 -0
  53. package/build/dist/Actions/ActionsComponent.js.map +1 -0
  54. package/build/dist/Actions/ActionsSystem.js +30 -0
  55. package/build/dist/Actions/ActionsSystem.js.map +1 -0
  56. package/build/dist/Actions/Index.js +26 -0
  57. package/build/dist/Actions/Index.js.map +1 -0
  58. package/build/dist/Actions/RotationType.js +27 -0
  59. package/build/dist/Actions/RotationType.js.map +1 -0
  60. package/build/dist/Actor.js +629 -0
  61. package/build/dist/Actor.js.map +1 -0
  62. package/build/dist/Camera.js +660 -0
  63. package/build/dist/Camera.js.map +1 -0
  64. package/build/dist/Collision/BoundingBox.js +415 -0
  65. package/build/dist/Collision/BoundingBox.js.map +1 -0
  66. package/build/dist/Collision/ColliderComponent.js +202 -0
  67. package/build/dist/Collision/ColliderComponent.js.map +1 -0
  68. package/build/dist/Collision/Colliders/CircleCollider.js +226 -0
  69. package/build/dist/Collision/Colliders/CircleCollider.js.map +1 -0
  70. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js +211 -0
  71. package/build/dist/Collision/Colliders/ClosestLineJumpTable.js.map +1 -0
  72. package/build/dist/Collision/Colliders/Collider.js +32 -0
  73. package/build/dist/Collision/Colliders/Collider.js.map +1 -0
  74. package/build/dist/Collision/Colliders/CollisionJumpTable.js +300 -0
  75. package/build/dist/Collision/Colliders/CollisionJumpTable.js.map +1 -0
  76. package/build/dist/Collision/Colliders/EdgeCollider.js +229 -0
  77. package/build/dist/Collision/Colliders/EdgeCollider.js.map +1 -0
  78. package/build/dist/Collision/Colliders/PolygonCollider.js +556 -0
  79. package/build/dist/Collision/Colliders/PolygonCollider.js.map +1 -0
  80. package/build/dist/Collision/Colliders/SeparatingAxis.js +67 -0
  81. package/build/dist/Collision/Colliders/SeparatingAxis.js.map +1 -0
  82. package/build/dist/Collision/Colliders/Shape.js +99 -0
  83. package/build/dist/Collision/Colliders/Shape.js.map +1 -0
  84. package/build/dist/Collision/CollisionType.js +33 -0
  85. package/build/dist/Collision/CollisionType.js.map +1 -0
  86. package/build/dist/Collision/Detection/CollisionContact.js +51 -0
  87. package/build/dist/Collision/Detection/CollisionContact.js.map +1 -0
  88. package/build/dist/Collision/Detection/CollisionProcessor.js +2 -0
  89. package/build/dist/Collision/Detection/CollisionProcessor.js.map +1 -0
  90. package/build/dist/Collision/Detection/DynamicTree.js +442 -0
  91. package/build/dist/Collision/Detection/DynamicTree.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/Detection/QuadTree.js +193 -0
  95. package/build/dist/Collision/Detection/QuadTree.js.map +1 -0
  96. package/build/dist/Collision/Group/CollisionGroup.js +3 -3
  97. package/build/dist/Collision/Integrator.js +25 -0
  98. package/build/dist/Collision/Integrator.js.map +1 -0
  99. package/build/dist/Collision/MotionSystem.js +35 -0
  100. package/build/dist/Collision/MotionSystem.js.map +1 -0
  101. package/build/dist/Collision/Physics.js +163 -0
  102. package/build/dist/Collision/Physics.js.map +1 -0
  103. package/build/dist/Collision/PhysicsWorld.js +10 -0
  104. package/build/dist/Collision/PhysicsWorld.js.map +1 -0
  105. package/build/dist/Collision/Side.js +51 -0
  106. package/build/dist/Collision/Side.js.map +1 -0
  107. package/build/dist/Collision/Solver/ArcadeSolver.js +154 -0
  108. package/build/dist/Collision/Solver/ArcadeSolver.js.map +1 -0
  109. package/build/dist/Collision/Solver/ContactConstraintPoint.js +87 -0
  110. package/build/dist/Collision/Solver/ContactConstraintPoint.js.map +1 -0
  111. package/build/dist/Collision/Solver/RealisticSolver.js +293 -0
  112. package/build/dist/Collision/Solver/RealisticSolver.js.map +1 -0
  113. package/build/dist/Collision/Solver/Solver.js +2 -0
  114. package/build/dist/Collision/Solver/Solver.js.map +1 -0
  115. package/build/dist/Color.js +417 -0
  116. package/build/dist/Color.js.map +1 -0
  117. package/build/dist/Configurable.js +32 -0
  118. package/build/dist/Configurable.js.map +1 -0
  119. package/build/dist/Debug/Debug.d.ts +11 -0
  120. package/build/dist/Debug/Debug.js +385 -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 +263 -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/Engine.js +986 -0
  131. package/build/dist/Engine.js.map +1 -0
  132. package/build/dist/EntityComponentSystem/Component.js +65 -0
  133. package/build/dist/EntityComponentSystem/Component.js.map +1 -0
  134. package/build/dist/EntityComponentSystem/Components/MotionComponent.js +33 -0
  135. package/build/dist/EntityComponentSystem/Components/MotionComponent.js.map +1 -0
  136. package/build/dist/EntityComponentSystem/Components/TransformComponent.js +107 -0
  137. package/build/dist/EntityComponentSystem/Components/TransformComponent.js.map +1 -0
  138. package/build/dist/EntityComponentSystem/Entity.js +487 -0
  139. package/build/dist/EntityComponentSystem/Entity.js.map +1 -0
  140. package/build/dist/EntityComponentSystem/EntityManager.js +137 -0
  141. package/build/dist/EntityComponentSystem/EntityManager.js.map +1 -0
  142. package/build/dist/EntityComponentSystem/Query.js +90 -0
  143. package/build/dist/EntityComponentSystem/Query.js.map +1 -0
  144. package/build/dist/EntityComponentSystem/QueryManager.js +90 -0
  145. package/build/dist/EntityComponentSystem/QueryManager.js.map +1 -0
  146. package/build/dist/EntityComponentSystem/System.js +76 -0
  147. package/build/dist/EntityComponentSystem/System.js.map +1 -0
  148. package/build/dist/EntityComponentSystem/SystemManager.js +104 -0
  149. package/build/dist/EntityComponentSystem/SystemManager.js.map +1 -0
  150. package/build/dist/EntityComponentSystem/Util.js +5 -0
  151. package/build/dist/EntityComponentSystem/Util.js.map +1 -0
  152. package/build/dist/EntityComponentSystem/World.js +55 -0
  153. package/build/dist/EntityComponentSystem/World.js.map +1 -0
  154. package/build/dist/EntityComponentSystem/index.js +11 -0
  155. package/build/dist/EntityComponentSystem/index.js.map +1 -0
  156. package/build/dist/EventDispatcher.js +122 -0
  157. package/build/dist/EventDispatcher.js.map +1 -0
  158. package/build/dist/EventEmitter.js +86 -0
  159. package/build/dist/EventEmitter.js.map +1 -0
  160. package/build/dist/Events/ExEvent.js +12 -0
  161. package/build/dist/Events/ExEvent.js.map +1 -0
  162. package/build/dist/Events/MediaEvents.js +75 -0
  163. package/build/dist/Events/MediaEvents.js.map +1 -0
  164. package/build/dist/Events/PointerEvents.js +52 -0
  165. package/build/dist/Events/PointerEvents.js.map +1 -0
  166. package/build/dist/Events.js +473 -0
  167. package/build/dist/Events.js.map +1 -0
  168. package/build/dist/Flags.js +67 -0
  169. package/build/dist/Flags.js.map +1 -0
  170. package/build/dist/Graphics/Animation.js +344 -0
  171. package/build/dist/Graphics/Animation.js.map +1 -0
  172. package/build/dist/Graphics/Canvas.js +38 -0
  173. package/build/dist/Graphics/Canvas.js.map +1 -0
  174. package/build/dist/Graphics/Circle.js +48 -0
  175. package/build/dist/Graphics/Circle.js.map +1 -0
  176. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js +2 -0
  177. package/build/dist/Graphics/Context/ExcaliburGraphicsContext.js.map +1 -0
  178. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js +237 -0
  179. package/build/dist/Graphics/Context/ExcaliburGraphicsContext2DCanvas.js.map +1 -0
  180. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.d.ts +1 -0
  181. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js +481 -0
  182. package/build/dist/Graphics/Context/ExcaliburGraphicsContextWebGL.js.map +1 -0
  183. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.frag.glsl +52 -52
  184. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js +174 -0
  185. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.js.map +1 -0
  186. package/build/dist/Graphics/Context/circle-renderer/circle-renderer.vert.glsl +37 -37
  187. package/build/dist/Graphics/Context/debug-text.js +47 -0
  188. package/build/dist/Graphics/Context/debug-text.js.map +1 -0
  189. package/build/dist/Graphics/Context/draw-call.js +16 -0
  190. package/build/dist/Graphics/Context/draw-call.js.map +1 -0
  191. package/build/dist/Graphics/Context/image-renderer/image-renderer.frag.glsl +32 -32
  192. package/build/dist/Graphics/Context/image-renderer/image-renderer.js +246 -0
  193. package/build/dist/Graphics/Context/image-renderer/image-renderer.js.map +1 -0
  194. package/build/dist/Graphics/Context/image-renderer/image-renderer.vert.glsl +32 -32
  195. package/build/dist/Graphics/Context/line-renderer/line-fragment.glsl +10 -10
  196. package/build/dist/Graphics/Context/line-renderer/line-renderer.js +90 -0
  197. package/build/dist/Graphics/Context/line-renderer/line-renderer.js.map +1 -0
  198. package/build/dist/Graphics/Context/line-renderer/line-vertex.glsl +14 -14
  199. package/build/dist/Graphics/Context/material-renderer/material-renderer.js +23 -2
  200. package/build/dist/Graphics/Context/material-renderer/material-renderer.js.map +1 -1
  201. package/build/dist/Graphics/Context/material.d.ts +2 -0
  202. package/build/dist/Graphics/Context/material.js +72 -0
  203. package/build/dist/Graphics/Context/material.js.map +1 -0
  204. package/build/dist/Graphics/Context/point-renderer/point-fragment.glsl +19 -19
  205. package/build/dist/Graphics/Context/point-renderer/point-renderer.js +91 -0
  206. package/build/dist/Graphics/Context/point-renderer/point-renderer.js.map +1 -0
  207. package/build/dist/Graphics/Context/point-renderer/point-vertex.glsl +11 -11
  208. package/build/dist/Graphics/Context/quad-index-buffer.js +67 -0
  209. package/build/dist/Graphics/Context/quad-index-buffer.js.map +1 -0
  210. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.frag.glsl +85 -85
  211. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js +305 -0
  212. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.js.map +1 -0
  213. package/build/dist/Graphics/Context/rectangle-renderer/rectangle-renderer.vert.glsl +42 -42
  214. package/build/dist/Graphics/Context/render-source.js +16 -0
  215. package/build/dist/Graphics/Context/render-source.js.map +1 -0
  216. package/build/dist/Graphics/Context/render-target.js +65 -0
  217. package/build/dist/Graphics/Context/render-target.js.map +1 -0
  218. package/build/dist/Graphics/Context/renderer.js +2 -0
  219. package/build/dist/Graphics/Context/renderer.js.map +1 -0
  220. package/build/dist/Graphics/Context/screen-pass-painter/screen-fragment.glsl +13 -13
  221. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js +56 -0
  222. package/build/dist/Graphics/Context/screen-pass-painter/screen-pass-painter.js.map +1 -0
  223. package/build/dist/Graphics/Context/screen-pass-painter/screen-vertex.glsl +11 -11
  224. package/build/dist/Graphics/Context/state-stack.js +37 -0
  225. package/build/dist/Graphics/Context/state-stack.js.map +1 -0
  226. package/build/dist/Graphics/Context/texture-loader.js +109 -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 +53 -0
  231. package/build/dist/Graphics/Context/vertex-buffer.js.map +1 -0
  232. package/build/dist/Graphics/Context/webgl-util.js +79 -0
  233. package/build/dist/Graphics/Context/webgl-util.js.map +1 -0
  234. package/build/dist/Graphics/DebugGraphicsComponent.d.ts +3 -2
  235. package/build/dist/Graphics/DebugGraphicsComponent.js +16 -0
  236. package/build/dist/Graphics/DebugGraphicsComponent.js.map +1 -0
  237. package/build/dist/Graphics/Filtering.js +17 -0
  238. package/build/dist/Graphics/Filtering.js.map +1 -0
  239. package/build/dist/Graphics/Font.js +148 -0
  240. package/build/dist/Graphics/Font.js.map +1 -0
  241. package/build/dist/Graphics/FontCache.d.ts +1 -0
  242. package/build/dist/Graphics/FontCache.js +80 -0
  243. package/build/dist/Graphics/FontCache.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/FontTextInstance.js +230 -0
  247. package/build/dist/Graphics/FontTextInstance.js.map +1 -0
  248. package/build/dist/Graphics/Graphic.js +208 -0
  249. package/build/dist/Graphics/Graphic.js.map +1 -0
  250. package/build/dist/Graphics/GraphicsComponent.js +336 -0
  251. package/build/dist/Graphics/GraphicsComponent.js.map +1 -0
  252. package/build/dist/Graphics/GraphicsDiagnostics.js +9 -0
  253. package/build/dist/Graphics/GraphicsDiagnostics.js.map +1 -0
  254. package/build/dist/Graphics/GraphicsGroup.js +69 -0
  255. package/build/dist/Graphics/GraphicsGroup.js.map +1 -0
  256. package/build/dist/Graphics/GraphicsSystem.js +210 -0
  257. package/build/dist/Graphics/GraphicsSystem.js.map +1 -0
  258. package/build/dist/Graphics/ImageSource.js +124 -0
  259. package/build/dist/Graphics/ImageSource.js.map +1 -0
  260. package/build/dist/Graphics/Line.js +45 -0
  261. package/build/dist/Graphics/Line.js.map +1 -0
  262. package/build/dist/Graphics/OffscreenSystem.js +64 -0
  263. package/build/dist/Graphics/OffscreenSystem.js.map +1 -0
  264. package/build/dist/Graphics/ParallaxComponent.js +11 -0
  265. package/build/dist/Graphics/ParallaxComponent.js.map +1 -0
  266. package/build/dist/Graphics/Polygon.js +59 -0
  267. package/build/dist/Graphics/Polygon.js.map +1 -0
  268. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js +7 -0
  269. package/build/dist/Graphics/PostProcessor/ColorBlindnessMode.js.map +1 -0
  270. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js +52 -0
  271. package/build/dist/Graphics/PostProcessor/ColorBlindnessPostProcessor.js.map +1 -0
  272. package/build/dist/Graphics/PostProcessor/PostProcessor.js +2 -0
  273. package/build/dist/Graphics/PostProcessor/PostProcessor.js.map +1 -0
  274. package/build/dist/Graphics/PostProcessor/ScreenShader.js +59 -0
  275. package/build/dist/Graphics/PostProcessor/ScreenShader.js.map +1 -0
  276. package/build/dist/Graphics/PostProcessor/color-blind-fragment.glsl +64 -64
  277. package/build/dist/Graphics/Raster.js +215 -0
  278. package/build/dist/Graphics/Raster.js.map +1 -0
  279. package/build/dist/Graphics/Rectangle.js +29 -0
  280. package/build/dist/Graphics/Rectangle.js.map +1 -0
  281. package/build/dist/Graphics/Sprite.js +82 -0
  282. package/build/dist/Graphics/Sprite.js.map +1 -0
  283. package/build/dist/Graphics/SpriteFont.js +139 -0
  284. package/build/dist/Graphics/SpriteFont.js.map +1 -0
  285. package/build/dist/Graphics/SpriteSheet.js +116 -0
  286. package/build/dist/Graphics/SpriteSheet.js.map +1 -0
  287. package/build/dist/Graphics/Text.js +103 -0
  288. package/build/dist/Graphics/Text.js.map +1 -0
  289. package/build/dist/Graphics/index.js +46 -0
  290. package/build/dist/Graphics/index.js.map +1 -0
  291. package/build/dist/Id.js +8 -0
  292. package/build/dist/Id.js.map +1 -0
  293. package/build/dist/Input/CapturePointerConfig.js +5 -0
  294. package/build/dist/Input/CapturePointerConfig.js.map +1 -0
  295. package/build/dist/Input/EngineInput.js +2 -0
  296. package/build/dist/Input/EngineInput.js.map +1 -0
  297. package/build/dist/Input/Gamepad.js +422 -0
  298. package/build/dist/Input/Gamepad.js.map +1 -0
  299. package/build/dist/Input/Index.js +88 -0
  300. package/build/dist/Input/Index.js.map +1 -0
  301. package/build/dist/Input/InputMapper.js +45 -0
  302. package/build/dist/Input/InputMapper.js.map +1 -0
  303. package/build/dist/Input/Keyboard.js +348 -0
  304. package/build/dist/Input/Keyboard.js.map +1 -0
  305. package/build/dist/Input/NativePointerButton.js +12 -0
  306. package/build/dist/Input/NativePointerButton.js.map +1 -0
  307. package/build/dist/Input/PointerAbstraction.js +44 -0
  308. package/build/dist/Input/PointerAbstraction.js.map +1 -0
  309. package/build/dist/Input/PointerButton.js +12 -0
  310. package/build/dist/Input/PointerButton.js.map +1 -0
  311. package/build/dist/Input/PointerComponent.js +28 -0
  312. package/build/dist/Input/PointerComponent.js.map +1 -0
  313. package/build/dist/Input/PointerEvent.js +25 -0
  314. package/build/dist/Input/PointerEvent.js.map +1 -0
  315. package/build/dist/Input/PointerEventReceiver.js +456 -0
  316. package/build/dist/Input/PointerEventReceiver.js.map +1 -0
  317. package/build/dist/Input/PointerScope.js +16 -0
  318. package/build/dist/Input/PointerScope.js.map +1 -0
  319. package/build/dist/Input/PointerSystem.js +249 -0
  320. package/build/dist/Input/PointerSystem.js.map +1 -0
  321. package/build/dist/Input/PointerType.js +11 -0
  322. package/build/dist/Input/PointerType.js.map +1 -0
  323. package/build/dist/Input/WheelDeltaMode.js +7 -0
  324. package/build/dist/Input/WheelDeltaMode.js.map +1 -0
  325. package/build/dist/Input/WheelEvent.js +21 -0
  326. package/build/dist/Input/WheelEvent.js.map +1 -0
  327. package/build/dist/Interfaces/Audio.js +2 -0
  328. package/build/dist/Interfaces/Audio.js.map +1 -0
  329. package/build/dist/Interfaces/AudioImplementation.js +11 -0
  330. package/build/dist/Interfaces/AudioImplementation.js.map +1 -0
  331. package/build/dist/Interfaces/Clonable.js +2 -0
  332. package/build/dist/Interfaces/Clonable.js.map +1 -0
  333. package/build/dist/Interfaces/Evented.js +2 -0
  334. package/build/dist/Interfaces/Evented.js.map +1 -0
  335. package/build/dist/Interfaces/Index.js +8 -0
  336. package/build/dist/Interfaces/Index.js.map +1 -0
  337. package/build/dist/Interfaces/LifecycleEvents.js +51 -0
  338. package/build/dist/Interfaces/LifecycleEvents.js.map +1 -0
  339. package/build/dist/Interfaces/Loadable.js +2 -0
  340. package/build/dist/Interfaces/Loadable.js.map +1 -0
  341. package/build/dist/Interfaces/PointerEventHandlers.js +2 -0
  342. package/build/dist/Interfaces/PointerEventHandlers.js.map +1 -0
  343. package/build/dist/Label.js +81 -0
  344. package/build/dist/Label.js.map +1 -0
  345. package/build/dist/Loader.js +416 -0
  346. package/build/dist/Loader.js.map +1 -0
  347. package/build/dist/Math/Index.js +13 -0
  348. package/build/dist/Math/Index.js.map +1 -0
  349. package/build/dist/Math/Random.js +239 -0
  350. package/build/dist/Math/Random.js.map +1 -0
  351. package/build/dist/Math/affine-matrix.js +331 -0
  352. package/build/dist/Math/affine-matrix.js.map +1 -0
  353. package/build/dist/Math/coord-plane.js +17 -0
  354. package/build/dist/Math/coord-plane.js.map +1 -0
  355. package/build/dist/Math/global-coordinates.js +30 -0
  356. package/build/dist/Math/global-coordinates.js.map +1 -0
  357. package/build/dist/Math/line-segment.js +205 -0
  358. package/build/dist/Math/line-segment.js.map +1 -0
  359. package/build/dist/Math/matrix.js +457 -0
  360. package/build/dist/Math/matrix.js.map +1 -0
  361. package/build/dist/Math/projection.js +24 -0
  362. package/build/dist/Math/projection.js.map +1 -0
  363. package/build/dist/Math/ray.js +52 -0
  364. package/build/dist/Math/ray.js.map +1 -0
  365. package/build/dist/Math/transform.js +219 -0
  366. package/build/dist/Math/transform.js.map +1 -0
  367. package/build/dist/Math/util.js +82 -0
  368. package/build/dist/Math/util.js.map +1 -0
  369. package/build/dist/Math/vector-view.js +25 -0
  370. package/build/dist/Math/vector-view.js.map +1 -0
  371. package/build/dist/Math/vector.js +340 -0
  372. package/build/dist/Math/vector.js.map +1 -0
  373. package/build/dist/Math/watch-vector.js +26 -0
  374. package/build/dist/Math/watch-vector.js.map +1 -0
  375. package/build/dist/Particles.js +430 -0
  376. package/build/dist/Particles.js.map +1 -0
  377. package/build/dist/Polyfill.js +56 -0
  378. package/build/dist/Polyfill.js.map +1 -0
  379. package/build/dist/Resources/Gif.js +464 -0
  380. package/build/dist/Resources/Gif.js.map +1 -0
  381. package/build/dist/Resources/Index.js +4 -0
  382. package/build/dist/Resources/Index.js.map +1 -0
  383. package/build/dist/Resources/Resource.js +81 -0
  384. package/build/dist/Resources/Resource.js.map +1 -0
  385. package/build/dist/Resources/Sound/AudioContext.js +16 -0
  386. package/build/dist/Resources/Sound/AudioContext.js.map +1 -0
  387. package/build/dist/Resources/Sound/Index.js +4 -0
  388. package/build/dist/Resources/Sound/Index.js.map +1 -0
  389. package/build/dist/Resources/Sound/Sound.js +326 -0
  390. package/build/dist/Resources/Sound/Sound.js.map +1 -0
  391. package/build/dist/Resources/Sound/WebAudioInstance.js +190 -0
  392. package/build/dist/Resources/Sound/WebAudioInstance.js.map +1 -0
  393. package/build/dist/Scene.js +444 -0
  394. package/build/dist/Scene.js.map +1 -0
  395. package/build/dist/Screen.js +782 -0
  396. package/build/dist/Screen.js.map +1 -0
  397. package/build/dist/ScreenElement.js +43 -0
  398. package/build/dist/ScreenElement.js.map +1 -0
  399. package/build/dist/TileMap/IsometricEntityComponent.js +17 -0
  400. package/build/dist/TileMap/IsometricEntityComponent.js.map +1 -0
  401. package/build/dist/TileMap/IsometricEntitySystem.js +23 -0
  402. package/build/dist/TileMap/IsometricEntitySystem.js.map +1 -0
  403. package/build/dist/TileMap/IsometricMap.js +311 -0
  404. package/build/dist/TileMap/IsometricMap.js.map +1 -0
  405. package/build/dist/TileMap/TileMap.d.ts +2 -1
  406. package/build/dist/TileMap/TileMap.js +630 -0
  407. package/build/dist/TileMap/TileMap.js.map +1 -0
  408. package/build/dist/TileMap/index.js +5 -0
  409. package/build/dist/TileMap/index.js.map +1 -0
  410. package/build/dist/Timer.js +202 -0
  411. package/build/dist/Timer.js.map +1 -0
  412. package/build/dist/Trigger.js +94 -0
  413. package/build/dist/Trigger.js.map +1 -0
  414. package/build/dist/Util/Browser.js +66 -0
  415. package/build/dist/Util/Browser.js.map +1 -0
  416. package/build/dist/Util/Clock.js +219 -0
  417. package/build/dist/Util/Clock.js.map +1 -0
  418. package/build/dist/Util/Decorators.js +78 -0
  419. package/build/dist/Util/Decorators.js.map +1 -0
  420. package/build/dist/Util/Detector.js +167 -0
  421. package/build/dist/Util/Detector.js.map +1 -0
  422. package/build/dist/Util/DrawUtil.js +115 -0
  423. package/build/dist/Util/DrawUtil.js.map +1 -0
  424. package/build/dist/Util/EasingFunctions.js +102 -0
  425. package/build/dist/Util/EasingFunctions.js.map +1 -0
  426. package/build/dist/Util/Fps.js +47 -0
  427. package/build/dist/Util/Fps.js.map +1 -0
  428. package/build/dist/Util/Future.js +30 -0
  429. package/build/dist/Util/Future.js.map +1 -0
  430. package/build/dist/Util/IFrame.js +23 -0
  431. package/build/dist/Util/IFrame.js.map +1 -0
  432. package/build/dist/Util/Index.js +7 -0
  433. package/build/dist/Util/Index.js.map +1 -0
  434. package/build/dist/Util/Log.js +195 -0
  435. package/build/dist/Util/Log.js.map +1 -0
  436. package/build/dist/Util/Observable.js +66 -0
  437. package/build/dist/Util/Observable.js.map +1 -0
  438. package/build/dist/Util/Pool.js +74 -0
  439. package/build/dist/Util/Pool.js.map +1 -0
  440. package/build/dist/Util/Semaphore.js +55 -0
  441. package/build/dist/Util/Semaphore.js.map +1 -0
  442. package/build/dist/Util/Sound.js +22 -0
  443. package/build/dist/Util/Sound.js.map +1 -0
  444. package/build/dist/Util/StateMachine.js +79 -0
  445. package/build/dist/Util/StateMachine.js.map +1 -0
  446. package/build/dist/Util/Toaster.css +28 -28
  447. package/build/dist/Util/Toaster.js +84 -0
  448. package/build/dist/Util/Toaster.js.map +1 -0
  449. package/build/dist/Util/Util.d.ts +6 -0
  450. package/build/dist/Util/Util.js +95 -0
  451. package/build/dist/Util/Util.js.map +1 -0
  452. package/build/dist/Util/Watch.js +67 -0
  453. package/build/dist/Util/Watch.js.map +1 -0
  454. package/build/dist/Util/WebAudio.js +62 -0
  455. package/build/dist/Util/WebAudio.js.map +1 -0
  456. package/build/dist/excalibur.d.ts +2 -2
  457. package/build/dist/excalibur.js +389 -258
  458. package/build/dist/excalibur.js.map +1 -1
  459. package/build/dist/excalibur.min.js +1 -1
  460. package/build/dist/excalibur.min.js.LICENSE.txt +1 -1
  461. package/build/dist/excalibur.min.js.map +1 -1
  462. package/build/dist/index.js +81 -0
  463. package/build/dist/index.js.map +1 -0
  464. package/build/esm/Debug/Debug.d.ts +11 -0
  465. package/build/esm/Graphics/Context/ExcaliburGraphicsContextWebGL.d.ts +1 -0
  466. package/build/esm/Graphics/Context/material.d.ts +2 -0
  467. package/build/esm/Graphics/DebugGraphicsComponent.d.ts +3 -2
  468. package/build/esm/Graphics/FontCache.d.ts +1 -0
  469. package/build/esm/TileMap/TileMap.d.ts +2 -1
  470. package/build/esm/Util/Util.d.ts +6 -0
  471. package/build/esm/excalibur.d.ts +2 -2
  472. package/build/esm/excalibur.js +389 -258
  473. package/build/esm/excalibur.js.map +1 -1
  474. package/build/esm/excalibur.min.js +1 -1
  475. package/build/esm/excalibur.min.js.LICENSE.txt +1 -1
  476. package/build/esm/excalibur.min.js.map +1 -1
  477. package/docker-compose.yml +11 -11
  478. package/package.json +131 -131
  479. package/build/dist/Loader.css +0 -122
  480. package/build/nuget/Excalibur.0.28.3.nupkg +0 -0
  481. package/build/v0.28.3.zip +0 -0
  482. package/excalibur-0.28.3.tgz +0 -0
@@ -0,0 +1,90 @@
1
+ import { Entity } from './Entity';
2
+ import { buildTypeKey } from './Util';
3
+ import { Observable } from '../Util/Observable';
4
+ import { Util } from '..';
5
+ import { AddedEntity, RemovedEntity } from './System';
6
+ /**
7
+ * Represents query for entities that match a list of types that is cached and observable
8
+ *
9
+ * Queries can be strongly typed by supplying a type union in the optional type parameter
10
+ * ```typescript
11
+ * const queryAB = new ex.Query<ComponentTypeA | ComponentTypeB>(['A', 'B']);
12
+ * ```
13
+ */
14
+ export class Query extends Observable {
15
+ get key() {
16
+ if (this._key) {
17
+ return this._key;
18
+ }
19
+ return (this._key = buildTypeKey(this.types));
20
+ }
21
+ constructor(types) {
22
+ super();
23
+ this._entities = [];
24
+ if (types[0] instanceof Function) {
25
+ this.types = types.map(T => (new T).type);
26
+ }
27
+ else {
28
+ this.types = types;
29
+ }
30
+ }
31
+ /**
32
+ * Returns a list of entities that match the query
33
+ * @param sort Optional sorting function to sort entities returned from the query
34
+ */
35
+ getEntities(sort) {
36
+ if (sort) {
37
+ this._entities.sort(sort);
38
+ }
39
+ return this._entities;
40
+ }
41
+ /**
42
+ * Add an entity to the query, will only be added if the entity matches the query types
43
+ * @param entity
44
+ */
45
+ addEntity(entity) {
46
+ if (!Util.contains(this._entities, entity) && this.matches(entity)) {
47
+ this._entities.push(entity);
48
+ this.notifyAll(new AddedEntity(entity));
49
+ }
50
+ }
51
+ /**
52
+ * If the entity is part of the query it will be removed regardless of types
53
+ * @param entity
54
+ */
55
+ removeEntity(entity) {
56
+ if (Util.removeItemFromArray(entity, this._entities)) {
57
+ this.notifyAll(new RemovedEntity(entity));
58
+ }
59
+ }
60
+ /**
61
+ * Removes all entities and observers from the query
62
+ */
63
+ clear() {
64
+ this._entities.length = 0;
65
+ for (let i = this.observers.length - 1; i >= 0; i--) {
66
+ this.unregister(this.observers[i]);
67
+ }
68
+ }
69
+ matches(typesOrEntity) {
70
+ let types = [];
71
+ if (typesOrEntity instanceof Entity) {
72
+ types = typesOrEntity.types;
73
+ }
74
+ else {
75
+ types = typesOrEntity;
76
+ }
77
+ let matches = true;
78
+ for (const type of this.types) {
79
+ matches = matches && types.indexOf(type) > -1;
80
+ if (!matches) {
81
+ return false;
82
+ }
83
+ }
84
+ return matches;
85
+ }
86
+ contain(type) {
87
+ return this.types.indexOf(type) > -1;
88
+ }
89
+ }
90
+ //# sourceMappingURL=Query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Query.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/Query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { buildTypeKey } from './Util';
2
+ import { Query } from './Query';
3
+ /**
4
+ * The query manager is responsible for updating all queries when entities/components change
5
+ */
6
+ export class QueryManager {
7
+ constructor(_world) {
8
+ this._world = _world;
9
+ this._queries = {};
10
+ }
11
+ /**
12
+ * Adds a query to the manager and populates with any entities that match
13
+ * @param query
14
+ */
15
+ _addQuery(query) {
16
+ this._queries[buildTypeKey(query.types)] = query;
17
+ for (const entity of this._world.entityManager.entities) {
18
+ query.addEntity(entity);
19
+ }
20
+ }
21
+ /**
22
+ * Removes the query if there are no observers left
23
+ * @param query
24
+ */
25
+ maybeRemoveQuery(query) {
26
+ if (query.observers.length === 0) {
27
+ query.clear();
28
+ delete this._queries[buildTypeKey(query.types)];
29
+ }
30
+ }
31
+ /**
32
+ * Adds the entity to any matching query in the query manage
33
+ * @param entity
34
+ */
35
+ addEntity(entity) {
36
+ for (const queryType in this._queries) {
37
+ if (this._queries[queryType]) {
38
+ this._queries[queryType].addEntity(entity);
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Removes an entity from queries if the removed component disqualifies it
44
+ * @param entity
45
+ * @param component
46
+ */
47
+ removeComponent(entity, component) {
48
+ for (const queryType in this._queries) {
49
+ // If the component being removed from an entity is a part of a query,
50
+ // it is now disqualified from that query, remove it
51
+ if (this._queries[queryType].contain(component.type)) {
52
+ this._queries[queryType].removeEntity(entity);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Removes an entity from all queries it is currently a part of
58
+ * @param entity
59
+ */
60
+ removeEntity(entity) {
61
+ for (const queryType in this._queries) {
62
+ this._queries[queryType].removeEntity(entity);
63
+ }
64
+ }
65
+ /**
66
+ * Creates a populated query and returns, if the query already exists that will be returned instead of a new instance
67
+ * @param types
68
+ */
69
+ createQuery(types) {
70
+ const maybeExistingQuery = this.getQuery(types);
71
+ if (maybeExistingQuery) {
72
+ return maybeExistingQuery;
73
+ }
74
+ const query = new Query(types);
75
+ this._addQuery(query);
76
+ return query;
77
+ }
78
+ /**
79
+ * Retrieves an existing query by types if it exists otherwise returns null
80
+ * @param types
81
+ */
82
+ getQuery(types) {
83
+ const key = buildTypeKey(types);
84
+ if (this._queries[key]) {
85
+ return this._queries[key];
86
+ }
87
+ return null;
88
+ }
89
+ }
90
+ //# sourceMappingURL=QueryManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryManager.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/QueryManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC;;GAEG;AACH,MAAM,OAAO,YAAY;IAGvB,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QAF9B,aAAQ,GAAiD,EAAE,CAAC;IAE3B,CAAC;IAE1C;;;OAGG;IACK,SAAS,CAAC,KAAiB;QACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YACxD,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,KAAY;QAClC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,MAAc;QAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,MAAc,EAAE,SAAoB;QACzD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,sEAAsE;YACtE,oDAAoD;YACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,MAAc;QAChC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,WAAW,CAAkC,KAAwB;QAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAI,KAAK,CAAC,CAAC;QACnD,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAkC,KAAwB;QACvE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAa,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Enum that determines whether to run the system in the update or draw phase
3
+ */
4
+ export var SystemType;
5
+ (function (SystemType) {
6
+ SystemType["Update"] = "update";
7
+ SystemType["Draw"] = "draw";
8
+ })(SystemType || (SystemType = {}));
9
+ /**
10
+ * An Excalibur [[System]] that updates entities of certain types.
11
+ * Systems are scene specific
12
+ *
13
+ * Excalibur Systems currently require at least 1 Component type to operated
14
+ *
15
+ * Multiple types are declared as a type union
16
+ * For example:
17
+ *
18
+ * ```typescript
19
+ * class MySystem extends System<ComponentA | ComponentB> {
20
+ * public readonly types = ['a', 'b'] as const;
21
+ * public readonly systemType = SystemType.Update;
22
+ * public update(entities: Entity<ComponentA | ComponentB>) {
23
+ * ...
24
+ * }
25
+ * }
26
+ * ```
27
+ */
28
+ export class System {
29
+ constructor() {
30
+ /**
31
+ * System can execute in priority order, by default all systems are priority 0. Lower values indicated higher priority.
32
+ * For a system to execute before all other a lower priority value (-1 for example) must be set.
33
+ * For a system to execute after all other a higher priority value (10 for example) must be set.
34
+ */
35
+ this.priority = 0;
36
+ }
37
+ /**
38
+ * Systems observe when entities match their types or no longer match their types, override
39
+ * @param _entityAddedOrRemoved
40
+ */
41
+ notify(_entityAddedOrRemoved) {
42
+ // Override me
43
+ }
44
+ }
45
+ /**
46
+ * An [[Entity]] with [[Component]] types that matches a [[System]] types exists in the current scene.
47
+ */
48
+ export class AddedEntity {
49
+ constructor(data) {
50
+ this.data = data;
51
+ this.type = 'Entity Added';
52
+ }
53
+ }
54
+ /**
55
+ * Type guard to check for AddedEntity messages
56
+ * @param x
57
+ */
58
+ export function isAddedSystemEntity(x) {
59
+ return !!x && x.type === 'Entity Added';
60
+ }
61
+ /**
62
+ * An [[Entity]] with [[Component]] types that no longer matches a [[System]] types exists in the current scene.
63
+ */
64
+ export class RemovedEntity {
65
+ constructor(data) {
66
+ this.data = data;
67
+ this.type = 'Entity Removed';
68
+ }
69
+ }
70
+ /**
71
+ * type guard to check for the RemovedEntity message
72
+ */
73
+ export function isRemoveSystemEntity(x) {
74
+ return !!x && x.type === 'Entity Removed';
75
+ }
76
+ //# sourceMappingURL=System.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"System.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/System.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,2BAAa,CAAA;AACf,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAgB,MAAM;IAA5B;QAaE;;;;WAIG;QACI,aAAQ,GAAW,CAAC,CAAC;IA2C9B,CAAC;IAPC;;;OAGG;IACI,MAAM,CAAC,qBAAkD;QAC9D,cAAc;IAChB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IAEtB,YAAmB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QADtB,SAAI,GAAmB,cAAc,CAAC;IACb,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAkB;IACpD,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAExB,YAAmB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QADtB,SAAI,GAAqB,gBAAgB,CAAC;IACjB,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAkB;IACrD,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { Scene, Util } from '..';
2
+ /**
3
+ * The SystemManager is responsible for keeping track of all systems in a scene.
4
+ * Systems are scene specific
5
+ */
6
+ export class SystemManager {
7
+ constructor(_world) {
8
+ this._world = _world;
9
+ /**
10
+ * List of systems, to add a new system call [[SystemManager.addSystem]]
11
+ */
12
+ this.systems = [];
13
+ this.initialized = false;
14
+ }
15
+ /**
16
+ * Get a system registered in the manager by type
17
+ * @param systemType
18
+ */
19
+ get(systemType) {
20
+ return this.systems.find((s) => s instanceof systemType);
21
+ }
22
+ /**
23
+ * Adds a system to the manager, it will now be updated every frame
24
+ * @param system
25
+ */
26
+ addSystem(system) {
27
+ // validate system has types
28
+ if (!system.types || system.types.length === 0) {
29
+ throw new Error(`Attempted to add a System without any types`);
30
+ }
31
+ const query = this._world.queryManager.createQuery(system.types);
32
+ this.systems.push(system);
33
+ this.systems.sort((a, b) => a.priority - b.priority);
34
+ query.register(system);
35
+ // If systems are added and the manager has already been init'd
36
+ // then immediately init the system
37
+ if (this.initialized && system.initialize) {
38
+ system.initialize(this._world.context);
39
+ }
40
+ }
41
+ /**
42
+ * Removes a system from the manager, it will no longer be updated
43
+ * @param system
44
+ */
45
+ removeSystem(system) {
46
+ Util.removeItemFromArray(system, this.systems);
47
+ const query = this._world.queryManager.getQuery(system.types);
48
+ if (query) {
49
+ query.unregister(system);
50
+ this._world.queryManager.maybeRemoveQuery(query);
51
+ }
52
+ }
53
+ /**
54
+ * Initialize all systems in the manager
55
+ *
56
+ * Systems added after initialize() will be initialized on add
57
+ */
58
+ initialize() {
59
+ if (!this.initialized) {
60
+ this.initialized = true;
61
+ for (const s of this.systems) {
62
+ if (s.initialize) {
63
+ s.initialize(this._world.context);
64
+ }
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Updates all systems
70
+ * @param type whether this is an update or draw system
71
+ * @param context context reference
72
+ * @param delta time in milliseconds
73
+ */
74
+ updateSystems(type, context, delta) {
75
+ const systems = this.systems.filter((s) => s.systemType === type);
76
+ for (const s of systems) {
77
+ if (s.preupdate) {
78
+ s.preupdate(context, delta);
79
+ }
80
+ }
81
+ for (const s of systems) {
82
+ // Get entities that match the system types, pre-sort
83
+ const entities = this._world.queryManager.getQuery(s.types).getEntities(s.sort);
84
+ // Initialize entities if needed
85
+ if (context instanceof Scene) {
86
+ for (const entity of entities) {
87
+ entity._initialize(context === null || context === void 0 ? void 0 : context.engine);
88
+ }
89
+ }
90
+ s.update(entities, delta);
91
+ }
92
+ for (const s of systems) {
93
+ if (s.postupdate) {
94
+ s.postupdate(context, delta);
95
+ }
96
+ }
97
+ }
98
+ clear() {
99
+ for (let i = this.systems.length - 1; i >= 0; i--) {
100
+ this.removeSystem(this.systems[i]);
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=SystemManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemManager.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/SystemManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export const buildTypeKey = (types) => {
2
+ const key = [...types].sort((a, b) => a.localeCompare(b)).join('+');
3
+ return key;
4
+ };
5
+ //# sourceMappingURL=Util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Util.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/Util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACvD,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { Entity } from './Entity';
2
+ import { EntityManager } from './EntityManager';
3
+ import { QueryManager } from './QueryManager';
4
+ import { System, SystemType } from './System';
5
+ import { SystemManager } from './SystemManager';
6
+ /**
7
+ * The World is a self-contained entity component system for a particular context.
8
+ */
9
+ export class World {
10
+ /**
11
+ * The context type is passed to the system updates
12
+ * @param context
13
+ */
14
+ constructor(context) {
15
+ this.context = context;
16
+ this.queryManager = new QueryManager(this);
17
+ this.entityManager = new EntityManager(this);
18
+ this.systemManager = new SystemManager(this);
19
+ }
20
+ /**
21
+ * Update systems by type and time elapsed in milliseconds
22
+ */
23
+ update(type, delta) {
24
+ if (type === SystemType.Update) {
25
+ this.entityManager.updateEntities(this.context, delta);
26
+ }
27
+ this.systemManager.updateSystems(type, this.context, delta);
28
+ this.entityManager.findEntitiesForRemoval();
29
+ this.entityManager.processComponentRemovals();
30
+ this.entityManager.processEntityRemovals();
31
+ }
32
+ add(entityOrSystem) {
33
+ if (entityOrSystem instanceof Entity) {
34
+ this.entityManager.addEntity(entityOrSystem);
35
+ }
36
+ if (entityOrSystem instanceof System) {
37
+ this.systemManager.addSystem(entityOrSystem);
38
+ }
39
+ }
40
+ remove(entityOrSystem, deferred = true) {
41
+ if (entityOrSystem instanceof Entity) {
42
+ this.entityManager.removeEntity(entityOrSystem, deferred);
43
+ }
44
+ if (entityOrSystem instanceof System) {
45
+ this.systemManager.removeSystem(entityOrSystem);
46
+ }
47
+ }
48
+ clearEntities() {
49
+ this.entityManager.clear();
50
+ }
51
+ clearSystems() {
52
+ this.systemManager.clear();
53
+ }
54
+ }
55
+ //# sourceMappingURL=World.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"World.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/World.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,KAAK;IAKhB;;;OAGG;IACH,YAAmB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;QARhC,iBAAY,GAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACpD,kBAAa,GAA+B,IAAI,aAAa,CAAc,IAAI,CAAC,CAAC;QACjF,kBAAa,GAA+B,IAAI,aAAa,CAAc,IAAI,CAAC,CAAC;IAM9C,CAAC;IAE3C;;OAEG;IACH,MAAM,CAAC,IAAgB,EAAE,KAAa;QACpC,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;IAC7C,CAAC;IAYD,GAAG,CAAC,cAAiD;QACnD,IAAI,cAAc,YAAY,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,cAAc,YAAY,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAYD,MAAM,CAAC,cAAiD,EAAE,QAAQ,GAAG,IAAI;QACvE,IAAI,cAAc,YAAY,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,cAAc,YAAY,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ export * from './Component';
2
+ export * from './Entity';
3
+ export * from './EntityManager';
4
+ export * from './Query';
5
+ export * from './QueryManager';
6
+ export * from './System';
7
+ export * from './SystemManager';
8
+ export * from './World';
9
+ export * from './Components/TransformComponent';
10
+ export * from './Components/MotionComponent';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/EntityComponentSystem/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AAExB,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { GameEvent } from './Events';
2
+ /**
3
+ * @deprecated Use [[EventEmitter]] will be removed in v0.29.0
4
+ */
5
+ export class EventDispatcher {
6
+ constructor() {
7
+ this._handlers = {};
8
+ this._wiredEventDispatchers = [];
9
+ this._deferedHandlerRemovals = [];
10
+ }
11
+ /**
12
+ * Clears any existing handlers or wired event dispatchers on this event dispatcher
13
+ */
14
+ clear() {
15
+ this._handlers = {};
16
+ this._wiredEventDispatchers = [];
17
+ }
18
+ _processDeferredHandlerRemovals() {
19
+ for (const eventHandler of this._deferedHandlerRemovals) {
20
+ this._removeHandler(eventHandler.name, eventHandler.handler);
21
+ }
22
+ this._deferedHandlerRemovals.length = 0;
23
+ }
24
+ /**
25
+ * Emits an event for target
26
+ * @param eventName The name of the event to publish
27
+ * @param event Optionally pass an event data object to the handler
28
+ */
29
+ emit(eventName, event) {
30
+ this._processDeferredHandlerRemovals();
31
+ if (!eventName) {
32
+ // key not mapped
33
+ return;
34
+ }
35
+ eventName = eventName.toLowerCase();
36
+ if (typeof event === 'undefined' || event === null) {
37
+ event = new GameEvent();
38
+ }
39
+ let i, len;
40
+ if (this._handlers[eventName]) {
41
+ i = 0;
42
+ len = this._handlers[eventName].length;
43
+ for (i; i < len; i++) {
44
+ this._handlers[eventName][i](event);
45
+ }
46
+ }
47
+ i = 0;
48
+ len = this._wiredEventDispatchers.length;
49
+ for (i; i < len; i++) {
50
+ this._wiredEventDispatchers[i].emit(eventName, event);
51
+ }
52
+ }
53
+ /**
54
+ * Subscribe an event handler to a particular event name, multiple handlers per event name are allowed.
55
+ * @param eventName The name of the event to subscribe to
56
+ * @param handler The handler callback to fire on this event
57
+ */
58
+ on(eventName, handler) {
59
+ this._processDeferredHandlerRemovals();
60
+ eventName = eventName.toLowerCase();
61
+ if (!this._handlers[eventName]) {
62
+ this._handlers[eventName] = [];
63
+ }
64
+ this._handlers[eventName].push(handler);
65
+ }
66
+ /**
67
+ * Unsubscribe an event handler(s) from an event. If a specific handler
68
+ * is specified for an event, only that handler will be unsubscribed.
69
+ * Otherwise all handlers will be unsubscribed for that event.
70
+ * @param eventName The name of the event to unsubscribe
71
+ * @param handler Optionally the specific handler to unsubscribe
72
+ */
73
+ off(eventName, handler) {
74
+ this._deferedHandlerRemovals.push({ name: eventName, handler });
75
+ }
76
+ _removeHandler(eventName, handler) {
77
+ eventName = eventName.toLowerCase();
78
+ const eventHandlers = this._handlers[eventName];
79
+ if (eventHandlers) {
80
+ // if no explicit handler is give with the event name clear all handlers
81
+ if (!handler) {
82
+ this._handlers[eventName].length = 0;
83
+ }
84
+ else {
85
+ const index = eventHandlers.indexOf(handler);
86
+ if (index > -1) {
87
+ this._handlers[eventName].splice(index, 1);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Once listens to an event one time, then unsubscribes from that event
94
+ * @param eventName The name of the event to subscribe to once
95
+ * @param handler The handler of the event that will be auto unsubscribed
96
+ */
97
+ once(eventName, handler) {
98
+ this._processDeferredHandlerRemovals();
99
+ const metaHandler = (event) => {
100
+ const ev = event || new GameEvent();
101
+ this.off(eventName, metaHandler);
102
+ handler(ev);
103
+ };
104
+ this.on(eventName, metaHandler);
105
+ }
106
+ /**
107
+ * Wires this event dispatcher to also receive events from another
108
+ */
109
+ wire(eventDispatcher) {
110
+ eventDispatcher._wiredEventDispatchers.push(this);
111
+ }
112
+ /**
113
+ * Unwires this event dispatcher from another
114
+ */
115
+ unwire(eventDispatcher) {
116
+ const index = eventDispatcher._wiredEventDispatchers.indexOf(this);
117
+ if (index > -1) {
118
+ eventDispatcher._wiredEventDispatchers.splice(index, 1);
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=EventDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventDispatcher.js","sourceRoot":"","sources":["../../src/engine/EventDispatcher.ts"],"names":[],"mappings":"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"}