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,986 @@
1
+ import { EX_VERSION } from './';
2
+ import { EventEmitter } from './EventEmitter';
3
+ import { Gamepads } from './Input/Gamepad';
4
+ import { Keyboard } from './Input/Keyboard';
5
+ import { PointerScope } from './Input/PointerScope';
6
+ import { Flags } from './Flags';
7
+ import { polyfill } from './Polyfill';
8
+ polyfill();
9
+ import { Screen, DisplayMode, Resolution } from './Screen';
10
+ import { Loader } from './Loader';
11
+ import { Detector } from './Util/Detector';
12
+ import { VisibleEvent, HiddenEvent, GameStartEvent, GameStopEvent, PreUpdateEvent, PostUpdateEvent, PreFrameEvent, PostFrameEvent, DeactivateEvent, ActivateEvent, PreDrawEvent, PostDrawEvent, InitializeEvent } from './Events';
13
+ import { Logger, LogLevel } from './Util/Log';
14
+ import { Color } from './Color';
15
+ import { Scene } from './Scene';
16
+ import { Entity } from './EntityComponentSystem/Entity';
17
+ import { Debug } from './Debug/Debug';
18
+ import { BrowserEvents } from './Util/Browser';
19
+ import { ExcaliburGraphicsContext2DCanvas, ExcaliburGraphicsContextWebGL, TextureLoader } from './Graphics';
20
+ import { PointerEventReceiver } from './Input/PointerEventReceiver';
21
+ import { StandardClock } from './Util/Clock';
22
+ import { ImageFiltering } from './Graphics/Filtering';
23
+ import { GraphicsDiagnostics } from './Graphics/GraphicsDiagnostics';
24
+ import { Toaster } from './Util/Toaster';
25
+ import { InputMapper } from './Input/InputMapper';
26
+ export const EngineEvents = {
27
+ FallbackGraphicsContext: 'fallbackgraphicscontext',
28
+ Initialize: 'initialize',
29
+ Visible: 'visible',
30
+ Hidden: 'hidden',
31
+ Start: 'start',
32
+ Stop: 'stop',
33
+ PreUpdate: 'preupdate',
34
+ PostUpdate: 'postupdate',
35
+ PreFrame: 'preframe',
36
+ PostFrame: 'postframe',
37
+ PreDraw: 'predraw',
38
+ PostDraw: 'postdraw'
39
+ };
40
+ /**
41
+ * Enum representing the different mousewheel event bubble prevention
42
+ */
43
+ export var ScrollPreventionMode;
44
+ (function (ScrollPreventionMode) {
45
+ /**
46
+ * Do not prevent any page scrolling
47
+ */
48
+ ScrollPreventionMode[ScrollPreventionMode["None"] = 0] = "None";
49
+ /**
50
+ * Prevent page scroll if mouse is over the game canvas
51
+ */
52
+ ScrollPreventionMode[ScrollPreventionMode["Canvas"] = 1] = "Canvas";
53
+ /**
54
+ * Prevent all page scrolling via mouse wheel
55
+ */
56
+ ScrollPreventionMode[ScrollPreventionMode["All"] = 2] = "All";
57
+ })(ScrollPreventionMode || (ScrollPreventionMode = {}));
58
+ /**
59
+ * The Excalibur Engine
60
+ *
61
+ * The [[Engine]] is the main driver for a game. It is responsible for
62
+ * starting/stopping the game, maintaining state, transmitting events,
63
+ * loading resources, and managing the scene.
64
+ */
65
+ export class Engine {
66
+ /**
67
+ * The width of the game canvas in pixels (physical width component of the
68
+ * resolution of the canvas element)
69
+ */
70
+ get canvasWidth() {
71
+ return this.screen.canvasWidth;
72
+ }
73
+ /**
74
+ * Returns half width of the game canvas in pixels (half physical width component)
75
+ */
76
+ get halfCanvasWidth() {
77
+ return this.screen.halfCanvasWidth;
78
+ }
79
+ /**
80
+ * The height of the game canvas in pixels, (physical height component of
81
+ * the resolution of the canvas element)
82
+ */
83
+ get canvasHeight() {
84
+ return this.screen.canvasHeight;
85
+ }
86
+ /**
87
+ * Returns half height of the game canvas in pixels (half physical height component)
88
+ */
89
+ get halfCanvasHeight() {
90
+ return this.screen.halfCanvasHeight;
91
+ }
92
+ /**
93
+ * Returns the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.
94
+ */
95
+ get drawWidth() {
96
+ return this.screen.drawWidth;
97
+ }
98
+ /**
99
+ * Returns half the width of the engine's visible drawing surface in pixels including zoom and device pixel ratio.
100
+ */
101
+ get halfDrawWidth() {
102
+ return this.screen.halfDrawWidth;
103
+ }
104
+ /**
105
+ * Returns the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.
106
+ */
107
+ get drawHeight() {
108
+ return this.screen.drawHeight;
109
+ }
110
+ /**
111
+ * Returns half the height of the engine's visible drawing surface in pixels including zoom and device pixel ratio.
112
+ */
113
+ get halfDrawHeight() {
114
+ return this.screen.halfDrawHeight;
115
+ }
116
+ /**
117
+ * Returns whether excalibur detects the current screen to be HiDPI
118
+ */
119
+ get isHiDpi() {
120
+ return this.screen.isHiDpi;
121
+ }
122
+ /**
123
+ * Access [[stats]] that holds frame statistics.
124
+ */
125
+ get stats() {
126
+ return this.debug.stats;
127
+ }
128
+ /**
129
+ * Indicates whether the engine is set to fullscreen or not
130
+ */
131
+ get isFullscreen() {
132
+ return this.screen.isFullScreen;
133
+ }
134
+ /**
135
+ * Indicates the current [[DisplayMode]] of the engine.
136
+ */
137
+ get displayMode() {
138
+ return this.screen.displayMode;
139
+ }
140
+ /**
141
+ * Returns the calculated pixel ration for use in rendering
142
+ */
143
+ get pixelRatio() {
144
+ return this.screen.pixelRatio;
145
+ }
146
+ get isDebug() {
147
+ return this._isDebug;
148
+ }
149
+ /**
150
+ * Hints the graphics context to truncate fractional world space coordinates
151
+ */
152
+ get snapToPixel() {
153
+ return this.graphicsContext.snapToPixel;
154
+ }
155
+ ;
156
+ set snapToPixel(shouldSnapToPixel) {
157
+ this.graphicsContext.snapToPixel = shouldSnapToPixel;
158
+ }
159
+ ;
160
+ emit(eventName, event) {
161
+ this.events.emit(eventName, event);
162
+ }
163
+ on(eventName, handler) {
164
+ return this.events.on(eventName, handler);
165
+ }
166
+ once(eventName, handler) {
167
+ return this.events.once(eventName, handler);
168
+ }
169
+ off(eventName, handler) {
170
+ this.events.off(eventName, handler);
171
+ }
172
+ /**
173
+ * Creates a new game using the given [[EngineOptions]]. By default, if no options are provided,
174
+ * the game will be rendered full screen (taking up all available browser window space).
175
+ * You can customize the game rendering through [[EngineOptions]].
176
+ *
177
+ * Example:
178
+ *
179
+ * ```js
180
+ * var game = new ex.Engine({
181
+ * width: 0, // the width of the canvas
182
+ * height: 0, // the height of the canvas
183
+ * enableCanvasTransparency: true, // the transparencySection of the canvas
184
+ * canvasElementId: '', // the DOM canvas element ID, if you are providing your own
185
+ * displayMode: ex.DisplayMode.FullScreen, // the display mode
186
+ * pointerScope: ex.PointerScope.Document, // the scope of capturing pointer (mouse/touch) events
187
+ * backgroundColor: ex.Color.fromHex('#2185d0') // background color of the engine
188
+ * });
189
+ *
190
+ * // call game.start, which is a Promise
191
+ * game.start().then(function () {
192
+ * // ready, set, go!
193
+ * });
194
+ * ```
195
+ */
196
+ constructor(options) {
197
+ var _a, _b, _c, _d, _e, _f;
198
+ /**
199
+ * Current Excalibur version string
200
+ *
201
+ * Useful for plugins or other tools that need to know what features are available
202
+ */
203
+ this.version = EX_VERSION;
204
+ /**
205
+ * Listen to and emit events on the Engine
206
+ */
207
+ this.events = new EventEmitter();
208
+ /**
209
+ * Optionally set the maximum fps if not set Excalibur will go as fast as the device allows.
210
+ *
211
+ * You may want to constrain max fps if your game cannot maintain fps consistently, it can look and feel better to have a 30fps game than
212
+ * one that bounces between 30fps and 60fps
213
+ */
214
+ this.maxFps = Number.POSITIVE_INFINITY;
215
+ /**
216
+ * Contains all the scenes currently registered with Excalibur
217
+ */
218
+ this.scenes = {};
219
+ this._suppressPlayButton = false;
220
+ /**
221
+ * Indicates whether audio should be paused when the game is no longer visible.
222
+ */
223
+ this.pauseAudioWhenHidden = true;
224
+ /**
225
+ * Indicates whether the engine should draw with debug information
226
+ */
227
+ this._isDebug = false;
228
+ /**
229
+ * Sets the Transparency for the engine.
230
+ */
231
+ this.enableCanvasTransparency = true;
232
+ /**
233
+ * The action to take when a fatal exception is thrown
234
+ */
235
+ this.onFatalException = (e) => {
236
+ Logger.getInstance().fatal(e);
237
+ };
238
+ this._toaster = new Toaster();
239
+ this._timescale = 1.0;
240
+ this._isInitialized = false;
241
+ this._deferredGoTo = null;
242
+ this._originalOptions = {};
243
+ this._performanceThresholdTriggered = false;
244
+ this._fpsSamples = [];
245
+ this._loadingComplete = false;
246
+ this._isReady = false;
247
+ this._isReadyPromise = new Promise(resolve => {
248
+ this._isReadyResolve = resolve;
249
+ });
250
+ /**
251
+ * Returns the current frames elapsed milliseconds
252
+ */
253
+ this.currentFrameElapsedMs = 0;
254
+ /**
255
+ * Returns the current frame lag when in fixed update mode
256
+ */
257
+ this.currentFrameLagMs = 0;
258
+ this._lagMs = 0;
259
+ this._screenShotRequests = [];
260
+ options = { ...Engine._DEFAULT_ENGINE_OPTIONS, ...options };
261
+ this._originalOptions = options;
262
+ Flags.freeze();
263
+ // Initialize browser events facade
264
+ this.browser = new BrowserEvents(window, document);
265
+ // Check compatibility
266
+ const detector = new Detector();
267
+ if (!options.suppressMinimumBrowserFeatureDetection && !(this._compatible = detector.test())) {
268
+ const message = document.createElement('div');
269
+ message.innerText = 'Sorry, your browser does not support all the features needed for Excalibur';
270
+ document.body.appendChild(message);
271
+ detector.failedTests.forEach(function (test) {
272
+ const testMessage = document.createElement('div');
273
+ testMessage.innerText = 'Browser feature missing ' + test;
274
+ document.body.appendChild(testMessage);
275
+ });
276
+ if (options.canvasElementId) {
277
+ const canvas = document.getElementById(options.canvasElementId);
278
+ if (canvas) {
279
+ canvas.parentElement.removeChild(canvas);
280
+ }
281
+ }
282
+ return;
283
+ }
284
+ else {
285
+ this._compatible = true;
286
+ }
287
+ // Use native console API for color fun
288
+ // eslint-disable-next-line no-console
289
+ if (console.log && !options.suppressConsoleBootMessage) {
290
+ // eslint-disable-next-line no-console
291
+ console.log(`%cPowered by Excalibur.js (v${EX_VERSION})`, 'background: #176BAA; color: white; border-radius: 5px; padding: 15px; font-size: 1.5em; line-height: 80px;');
292
+ // eslint-disable-next-line no-console
293
+ console.log('\n\
294
+ /| ________________\n\
295
+ O|===|* >________________>\n\
296
+ \\|');
297
+ // eslint-disable-next-line no-console
298
+ console.log('Visit', 'http://excaliburjs.com', 'for more information');
299
+ }
300
+ // Suppress play button
301
+ if (options.suppressPlayButton) {
302
+ this._suppressPlayButton = true;
303
+ }
304
+ this._logger = Logger.getInstance();
305
+ // If debug is enabled, let's log browser features to the console.
306
+ if (this._logger.defaultLevel === LogLevel.Debug) {
307
+ detector.logBrowserFeatures();
308
+ }
309
+ this._logger.debug('Building engine...');
310
+ this.canvasElementId = options.canvasElementId;
311
+ if (options.canvasElementId) {
312
+ this._logger.debug('Using Canvas element specified: ' + options.canvasElementId);
313
+ this.canvas = document.getElementById(options.canvasElementId);
314
+ }
315
+ else if (options.canvasElement) {
316
+ this._logger.debug('Using Canvas element specified:', options.canvasElement);
317
+ this.canvas = options.canvasElement;
318
+ }
319
+ else {
320
+ this._logger.debug('Using generated canvas element');
321
+ this.canvas = document.createElement('canvas');
322
+ }
323
+ let displayMode = (_a = options.displayMode) !== null && _a !== void 0 ? _a : DisplayMode.Fixed;
324
+ if ((options.width && options.height) || options.viewport) {
325
+ if (options.displayMode === undefined) {
326
+ displayMode = DisplayMode.Fixed;
327
+ }
328
+ this._logger.debug('Engine viewport is size ' + options.width + ' x ' + options.height);
329
+ }
330
+ else if (!options.displayMode) {
331
+ this._logger.debug('Engine viewport is fit');
332
+ displayMode = DisplayMode.FitScreen;
333
+ }
334
+ this._originalDisplayMode = displayMode;
335
+ // Canvas 2D fallback can be flagged on
336
+ let useCanvasGraphicsContext = Flags.isEnabled('use-canvas-context');
337
+ if (!useCanvasGraphicsContext) {
338
+ // Attempt webgl first
339
+ try {
340
+ this.graphicsContext = new ExcaliburGraphicsContextWebGL({
341
+ canvasElement: this.canvas,
342
+ enableTransparency: this.enableCanvasTransparency,
343
+ smoothing: options.antialiasing,
344
+ backgroundColor: options.backgroundColor,
345
+ snapToPixel: options.snapToPixel,
346
+ useDrawSorting: options.useDrawSorting
347
+ });
348
+ }
349
+ catch (e) {
350
+ this._logger.warn(`Excalibur could not load webgl for some reason (${e.message}) and loaded a Canvas 2D fallback. ` +
351
+ `Some features of Excalibur will not work in this mode. \n\n` +
352
+ 'Read more about this issue at https://excaliburjs.com/docs/webgl');
353
+ // fallback to canvas in case of failure
354
+ useCanvasGraphicsContext = true;
355
+ }
356
+ }
357
+ if (useCanvasGraphicsContext) {
358
+ this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({
359
+ canvasElement: this.canvas,
360
+ enableTransparency: this.enableCanvasTransparency,
361
+ smoothing: options.antialiasing,
362
+ backgroundColor: options.backgroundColor,
363
+ snapToPixel: options.snapToPixel,
364
+ useDrawSorting: options.useDrawSorting
365
+ });
366
+ }
367
+ this.screen = new Screen({
368
+ canvas: this.canvas,
369
+ context: this.graphicsContext,
370
+ antialiasing: (_b = options.antialiasing) !== null && _b !== void 0 ? _b : true,
371
+ browser: this.browser,
372
+ viewport: (_c = options.viewport) !== null && _c !== void 0 ? _c : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),
373
+ resolution: options.resolution,
374
+ displayMode,
375
+ pixelRatio: options.suppressHiDPIScaling ? 1 : ((_d = options.pixelRatio) !== null && _d !== void 0 ? _d : null)
376
+ });
377
+ // Set default filtering based on antialiasing
378
+ TextureLoader.filtering = options.antialiasing ? ImageFiltering.Blended : ImageFiltering.Pixel;
379
+ if (options.backgroundColor) {
380
+ this.backgroundColor = options.backgroundColor.clone();
381
+ }
382
+ this.maxFps = (_e = options.maxFps) !== null && _e !== void 0 ? _e : this.maxFps;
383
+ this.fixedUpdateFps = (_f = options.fixedUpdateFps) !== null && _f !== void 0 ? _f : this.fixedUpdateFps;
384
+ this.clock = new StandardClock({
385
+ maxFps: this.maxFps,
386
+ tick: this._mainloop.bind(this),
387
+ onFatalException: (e) => this.onFatalException(e)
388
+ });
389
+ this.enableCanvasTransparency = options.enableCanvasTransparency;
390
+ this._loader = new Loader();
391
+ this._loader.wireEngine(this);
392
+ this.debug = new Debug(this);
393
+ this._initialize(options);
394
+ this.rootScene = this.currentScene = new Scene();
395
+ this.addScene('root', this.rootScene);
396
+ window.___EXCALIBUR_DEVTOOL = this;
397
+ }
398
+ _monitorPerformanceThresholdAndTriggerFallback() {
399
+ const { allow } = this._originalOptions.configurePerformanceCanvas2DFallback;
400
+ let { threshold, showPlayerMessage } = this._originalOptions.configurePerformanceCanvas2DFallback;
401
+ if (threshold === undefined) {
402
+ threshold = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.threshold;
403
+ }
404
+ if (showPlayerMessage === undefined) {
405
+ showPlayerMessage = Engine._DEFAULT_ENGINE_OPTIONS.configurePerformanceCanvas2DFallback.showPlayerMessage;
406
+ }
407
+ if (!Flags.isEnabled('use-canvas-context') && allow && this.ready && !this._performanceThresholdTriggered) {
408
+ // Calculate Average fps for last X number of frames after start
409
+ if (this._fpsSamples.length === threshold.numberOfFrames) {
410
+ this._fpsSamples.splice(0, 1);
411
+ }
412
+ this._fpsSamples.push(this.clock.fpsSampler.fps);
413
+ let total = 0;
414
+ for (let i = 0; i < this._fpsSamples.length; i++) {
415
+ total += this._fpsSamples[i];
416
+ }
417
+ const average = total / this._fpsSamples.length;
418
+ if (this._fpsSamples.length === threshold.numberOfFrames) {
419
+ if (average <= threshold.fps) {
420
+ this._performanceThresholdTriggered = true;
421
+ this._logger.warn(`Switching to browser 2D Canvas fallback due to performance. Some features of Excalibur will not work in this mode.\n` +
422
+ 'this might mean your browser doesn\'t have webgl enabled or hardware acceleration is unavailable.\n\n' +
423
+ 'If in Chrome:\n' +
424
+ ' * Visit Settings > Advanced > System, and ensure "Use Hardware Acceleration" is checked.\n' +
425
+ ' * Visit chrome://flags/#ignore-gpu-blocklist and ensure "Override software rendering list" is "enabled"\n' +
426
+ 'If in Firefox, visit about:config\n' +
427
+ ' * Ensure webgl.disabled = false\n' +
428
+ ' * Ensure webgl.force-enabled = true\n' +
429
+ ' * Ensure layers.acceleration.force-enabled = true\n\n' +
430
+ 'Read more about this issue at https://excaliburjs.com/docs/performance');
431
+ if (showPlayerMessage) {
432
+ this._toaster.toast('Excalibur is encountering performance issues. ' +
433
+ 'It\'s possible that your browser doesn\'t have hardware acceleration enabled. ' +
434
+ 'Visit [LINK] for more information and potential solutions.', 'https://excaliburjs.com/docs/performance');
435
+ }
436
+ this.useCanvas2DFallback();
437
+ this.emit('fallbackgraphicscontext', this.graphicsContext);
438
+ }
439
+ }
440
+ }
441
+ }
442
+ /**
443
+ * Switches the engine's graphics context to the 2D Canvas.
444
+ * @warning Some features of Excalibur will not work in this mode.
445
+ */
446
+ useCanvas2DFallback() {
447
+ var _a, _b, _c;
448
+ // Swap out the canvas
449
+ const newCanvas = this.canvas.cloneNode(false);
450
+ this.canvas.parentNode.replaceChild(newCanvas, this.canvas);
451
+ this.canvas = newCanvas;
452
+ const options = { ...this._originalOptions, antialiasing: this.getAntialiasing() };
453
+ const displayMode = this._originalDisplayMode;
454
+ // New graphics context
455
+ this.graphicsContext = new ExcaliburGraphicsContext2DCanvas({
456
+ canvasElement: this.canvas,
457
+ enableTransparency: this.enableCanvasTransparency,
458
+ smoothing: options.antialiasing,
459
+ backgroundColor: options.backgroundColor,
460
+ snapToPixel: options.snapToPixel,
461
+ useDrawSorting: options.useDrawSorting
462
+ });
463
+ // Reset screen
464
+ if (this.screen) {
465
+ this.screen.dispose();
466
+ }
467
+ this.screen = new Screen({
468
+ canvas: this.canvas,
469
+ context: this.graphicsContext,
470
+ antialiasing: (_a = options.antialiasing) !== null && _a !== void 0 ? _a : true,
471
+ browser: this.browser,
472
+ viewport: (_b = options.viewport) !== null && _b !== void 0 ? _b : (options.width && options.height ? { width: options.width, height: options.height } : Resolution.SVGA),
473
+ resolution: options.resolution,
474
+ displayMode,
475
+ pixelRatio: options.suppressHiDPIScaling ? 1 : ((_c = options.pixelRatio) !== null && _c !== void 0 ? _c : null)
476
+ });
477
+ this.screen.setCurrentCamera(this.currentScene.camera);
478
+ // Reset pointers
479
+ this.input.pointers.detach();
480
+ const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;
481
+ this.input.pointers = this.input.pointers.recreate(pointerTarget, this);
482
+ this.input.pointers.init();
483
+ }
484
+ /**
485
+ * Returns a BoundingBox of the top left corner of the screen
486
+ * and the bottom right corner of the screen.
487
+ */
488
+ getWorldBounds() {
489
+ return this.screen.getWorldBounds();
490
+ }
491
+ /**
492
+ * Gets the current engine timescale factor (default is 1.0 which is 1:1 time)
493
+ */
494
+ get timescale() {
495
+ return this._timescale;
496
+ }
497
+ /**
498
+ * Sets the current engine timescale factor. Useful for creating slow-motion effects or fast-forward effects
499
+ * when using time-based movement.
500
+ */
501
+ set timescale(value) {
502
+ if (value <= 0) {
503
+ Logger.getInstance().error('Cannot set engine.timescale to a value of 0 or less than 0.');
504
+ return;
505
+ }
506
+ this._timescale = value;
507
+ }
508
+ /**
509
+ * Adds a [[Timer]] to the [[currentScene]].
510
+ * @param timer The timer to add to the [[currentScene]].
511
+ */
512
+ addTimer(timer) {
513
+ return this.currentScene.addTimer(timer);
514
+ }
515
+ /**
516
+ * Removes a [[Timer]] from the [[currentScene]].
517
+ * @param timer The timer to remove to the [[currentScene]].
518
+ */
519
+ removeTimer(timer) {
520
+ return this.currentScene.removeTimer(timer);
521
+ }
522
+ /**
523
+ * Adds a [[Scene]] to the engine, think of scenes in Excalibur as you
524
+ * would levels or menus.
525
+ * @param key The name of the scene, must be unique
526
+ * @param scene The scene to add to the engine
527
+ */
528
+ addScene(key, scene) {
529
+ if (this.scenes[key]) {
530
+ this._logger.warn('Scene', key, 'already exists overwriting');
531
+ }
532
+ this.scenes[key] = scene;
533
+ }
534
+ /**
535
+ * @internal
536
+ */
537
+ removeScene(entity) {
538
+ if (entity instanceof Scene) {
539
+ // remove scene
540
+ for (const key in this.scenes) {
541
+ if (this.scenes.hasOwnProperty(key)) {
542
+ if (this.scenes[key] === entity) {
543
+ delete this.scenes[key];
544
+ }
545
+ }
546
+ }
547
+ }
548
+ if (typeof entity === 'string') {
549
+ // remove scene
550
+ delete this.scenes[entity];
551
+ }
552
+ }
553
+ add(entity) {
554
+ if (arguments.length === 2) {
555
+ this.addScene(arguments[0], arguments[1]);
556
+ return;
557
+ }
558
+ if (this._deferredGoTo && this.scenes[this._deferredGoTo]) {
559
+ this.scenes[this._deferredGoTo].add(entity);
560
+ }
561
+ else {
562
+ this.currentScene.add(entity);
563
+ }
564
+ }
565
+ remove(entity) {
566
+ if (entity instanceof Entity) {
567
+ this.currentScene.remove(entity);
568
+ }
569
+ if (entity instanceof Scene) {
570
+ this.removeScene(entity);
571
+ }
572
+ if (typeof entity === 'string') {
573
+ this.removeScene(entity);
574
+ }
575
+ }
576
+ /**
577
+ * Changes the currently updating and drawing scene to a different,
578
+ * named scene. Calls the [[Scene]] lifecycle events.
579
+ * @param key The key of the scene to transition to.
580
+ * @param data Optional data to send to the scene's onActivate method
581
+ */
582
+ goToScene(key, data) {
583
+ // if not yet initialized defer goToScene
584
+ if (!this.isInitialized) {
585
+ this._deferredGoTo = key;
586
+ return;
587
+ }
588
+ if (this.scenes[key]) {
589
+ const previousScene = this.currentScene;
590
+ const nextScene = this.scenes[key];
591
+ this._logger.debug('Going to scene:', key);
592
+ // only deactivate when initialized
593
+ if (this.currentScene.isInitialized) {
594
+ const context = { engine: this, previousScene, nextScene };
595
+ this.currentScene._deactivate.apply(this.currentScene, [context, nextScene]);
596
+ this.currentScene.events.emit('deactivate', new DeactivateEvent(context, this.currentScene));
597
+ }
598
+ // set current scene to new one
599
+ this.currentScene = nextScene;
600
+ this.screen.setCurrentCamera(nextScene.camera);
601
+ // initialize the current scene if has not been already
602
+ this.currentScene._initialize(this);
603
+ const context = { engine: this, previousScene, nextScene, data };
604
+ this.currentScene._activate.apply(this.currentScene, [context, nextScene]);
605
+ this.currentScene.events.emit('activate', new ActivateEvent(context, this.currentScene));
606
+ }
607
+ else {
608
+ this._logger.error('Scene', key, 'does not exist!');
609
+ }
610
+ }
611
+ /**
612
+ * Transforms the current x, y from screen coordinates to world coordinates
613
+ * @param point Screen coordinate to convert
614
+ */
615
+ screenToWorldCoordinates(point) {
616
+ return this.screen.screenToWorldCoordinates(point);
617
+ }
618
+ /**
619
+ * Transforms a world coordinate, to a screen coordinate
620
+ * @param point World coordinate to convert
621
+ */
622
+ worldToScreenCoordinates(point) {
623
+ return this.screen.worldToScreenCoordinates(point);
624
+ }
625
+ /**
626
+ * Initializes the internal canvas, rendering context, display mode, and native event listeners
627
+ */
628
+ _initialize(options) {
629
+ var _a, _b, _c, _d;
630
+ this.pageScrollPreventionMode = options.scrollPreventionMode;
631
+ // initialize inputs
632
+ const pointerTarget = options && options.pointerScope === PointerScope.Document ? document : this.canvas;
633
+ this.input = {
634
+ keyboard: new Keyboard(),
635
+ pointers: new PointerEventReceiver(pointerTarget, this),
636
+ gamepads: new Gamepads()
637
+ };
638
+ this.input.keyboard.init({
639
+ grabWindowFocus: (_b = (_a = this._originalOptions) === null || _a === void 0 ? void 0 : _a.grabWindowFocus) !== null && _b !== void 0 ? _b : true
640
+ });
641
+ this.input.pointers.init({
642
+ grabWindowFocus: (_d = (_c = this._originalOptions) === null || _c === void 0 ? void 0 : _c.grabWindowFocus) !== null && _d !== void 0 ? _d : true
643
+ });
644
+ this.input.gamepads.init();
645
+ this.inputMapper = new InputMapper(this.input);
646
+ // Issue #385 make use of the visibility api
647
+ // https://developer.mozilla.org/en-US/docs/Web/Guide/User_experience/Using_the_Page_Visibility_API
648
+ this.browser.document.on('visibilitychange', () => {
649
+ if (document.visibilityState === 'hidden') {
650
+ this.events.emit('hidden', new HiddenEvent(this));
651
+ this._logger.debug('Window hidden');
652
+ }
653
+ else if (document.visibilityState === 'visible') {
654
+ this.events.emit('visible', new VisibleEvent(this));
655
+ this._logger.debug('Window visible');
656
+ }
657
+ });
658
+ if (!this.canvasElementId && !options.canvasElement) {
659
+ document.body.appendChild(this.canvas);
660
+ }
661
+ }
662
+ onInitialize(_engine) {
663
+ // Override me
664
+ }
665
+ /**
666
+ * If supported by the browser, this will set the antialiasing flag on the
667
+ * canvas. Set this to `false` if you want a 'jagged' pixel art look to your
668
+ * image resources.
669
+ * @param isSmooth Set smoothing to true or false
670
+ */
671
+ setAntialiasing(isSmooth) {
672
+ this.screen.antialiasing = isSmooth;
673
+ }
674
+ /**
675
+ * Return the current smoothing status of the canvas
676
+ */
677
+ getAntialiasing() {
678
+ return this.screen.antialiasing;
679
+ }
680
+ /**
681
+ * Gets whether the actor is Initialized
682
+ */
683
+ get isInitialized() {
684
+ return this._isInitialized;
685
+ }
686
+ _overrideInitialize(engine) {
687
+ if (!this.isInitialized) {
688
+ this.onInitialize(engine);
689
+ this.events.emit('initialize', new InitializeEvent(engine, this));
690
+ this._isInitialized = true;
691
+ if (this._deferredGoTo) {
692
+ const deferredScene = this._deferredGoTo;
693
+ this._deferredGoTo = null;
694
+ this.goToScene(deferredScene);
695
+ }
696
+ else {
697
+ this.goToScene('root');
698
+ }
699
+ }
700
+ }
701
+ /**
702
+ * Updates the entire state of the game
703
+ * @param delta Number of milliseconds elapsed since the last update.
704
+ */
705
+ _update(delta) {
706
+ if (!this.ready) {
707
+ // suspend updates until loading is finished
708
+ this._loader.update(this, delta);
709
+ // Update input listeners
710
+ this.inputMapper.execute();
711
+ this.input.keyboard.update();
712
+ this.input.gamepads.update();
713
+ return;
714
+ }
715
+ // Publish preupdate events
716
+ this._preupdate(delta);
717
+ // process engine level events
718
+ this.currentScene.update(this, delta);
719
+ // Update graphics postprocessors
720
+ this.graphicsContext.updatePostProcessors(delta);
721
+ // Publish update event
722
+ this._postupdate(delta);
723
+ // Update input listeners
724
+ this.inputMapper.execute();
725
+ this.input.keyboard.update();
726
+ this.input.gamepads.update();
727
+ }
728
+ /**
729
+ * @internal
730
+ */
731
+ _preupdate(delta) {
732
+ this.emit('preupdate', new PreUpdateEvent(this, delta, this));
733
+ this.onPreUpdate(this, delta);
734
+ }
735
+ onPreUpdate(_engine, _delta) {
736
+ // Override me
737
+ }
738
+ /**
739
+ * @internal
740
+ */
741
+ _postupdate(delta) {
742
+ this.emit('postupdate', new PostUpdateEvent(this, delta, this));
743
+ this.onPostUpdate(this, delta);
744
+ }
745
+ onPostUpdate(_engine, _delta) {
746
+ // Override me
747
+ }
748
+ /**
749
+ * Draws the entire game
750
+ * @param delta Number of milliseconds elapsed since the last draw.
751
+ */
752
+ _draw(delta) {
753
+ this.graphicsContext.beginDrawLifecycle();
754
+ this.graphicsContext.clear();
755
+ this._predraw(this.graphicsContext, delta);
756
+ // Drawing nothing else while loading
757
+ if (!this._isReady) {
758
+ this._loader.canvas.draw(this.graphicsContext, 0, 0);
759
+ this.graphicsContext.flush();
760
+ return;
761
+ }
762
+ this.graphicsContext.backgroundColor = this.backgroundColor;
763
+ this.currentScene.draw(this.graphicsContext, delta);
764
+ this._postdraw(this.graphicsContext, delta);
765
+ // Flush any pending drawings
766
+ this.graphicsContext.flush();
767
+ this.graphicsContext.endDrawLifecycle();
768
+ this._checkForScreenShots();
769
+ }
770
+ /**
771
+ * @internal
772
+ */
773
+ _predraw(_ctx, delta) {
774
+ this.emit('predraw', new PreDrawEvent(_ctx, delta, this));
775
+ this.onPreDraw(_ctx, delta);
776
+ }
777
+ onPreDraw(_ctx, _delta) {
778
+ // Override me
779
+ }
780
+ /**
781
+ * @internal
782
+ */
783
+ _postdraw(_ctx, delta) {
784
+ this.emit('postdraw', new PostDrawEvent(_ctx, delta, this));
785
+ this.onPostDraw(_ctx, delta);
786
+ }
787
+ onPostDraw(_ctx, _delta) {
788
+ // Override me
789
+ }
790
+ /**
791
+ * Enable or disable Excalibur debugging functionality.
792
+ * @param toggle a value that debug drawing will be changed to
793
+ */
794
+ showDebug(toggle) {
795
+ this._isDebug = toggle;
796
+ }
797
+ /**
798
+ * Toggle Excalibur debugging functionality.
799
+ */
800
+ toggleDebug() {
801
+ this._isDebug = !this._isDebug;
802
+ return this._isDebug;
803
+ }
804
+ /**
805
+ * Returns true when loading is totally complete and the player has clicked start
806
+ */
807
+ get loadingComplete() {
808
+ return this._loadingComplete;
809
+ }
810
+ get ready() {
811
+ return this._isReady;
812
+ }
813
+ isReady() {
814
+ return this._isReadyPromise;
815
+ }
816
+ /**
817
+ * Starts the internal game loop for Excalibur after loading
818
+ * any provided assets.
819
+ * @param loader Optional [[Loader]] to use to load resources. The default loader is [[Loader]], override to provide your own
820
+ * custom loader.
821
+ *
822
+ * Note: start() only resolves AFTER the user has clicked the play button
823
+ */
824
+ async start(loader) {
825
+ if (!this._compatible) {
826
+ throw new Error('Excalibur is incompatible with your browser');
827
+ }
828
+ // Wire loader if we have it
829
+ if (loader) {
830
+ // Push the current user entered resolution/viewport
831
+ this.screen.pushResolutionAndViewport();
832
+ // Configure resolution for loader, it expects resolution === viewport
833
+ this.screen.resolution = this.screen.viewport;
834
+ this.screen.applyResolutionAndViewport();
835
+ this._loader = loader;
836
+ this._loader.suppressPlayButton = this._suppressPlayButton || this._loader.suppressPlayButton;
837
+ this._loader.wireEngine(this);
838
+ }
839
+ // Start the excalibur clock which drives the mainloop
840
+ // has started is a slight misnomer, it's really mainloop started
841
+ this._logger.debug('Starting game clock...');
842
+ this.browser.resume();
843
+ this.clock.start();
844
+ this._logger.debug('Game clock started');
845
+ if (loader) {
846
+ await this.load(this._loader);
847
+ this._loadingComplete = true;
848
+ // reset back to previous user resolution/viewport
849
+ this.screen.popResolutionAndViewport();
850
+ this.screen.applyResolutionAndViewport();
851
+ }
852
+ this._loadingComplete = true;
853
+ // Initialize before ready
854
+ this._overrideInitialize(this);
855
+ this._isReady = true;
856
+ this._isReadyResolve();
857
+ this.emit('start', new GameStartEvent(this));
858
+ return this._isReadyPromise;
859
+ }
860
+ _mainloop(elapsed) {
861
+ this.emit('preframe', new PreFrameEvent(this, this.stats.prevFrame));
862
+ const delta = elapsed * this.timescale;
863
+ this.currentFrameElapsedMs = delta;
864
+ // reset frame stats (reuse existing instances)
865
+ const frameId = this.stats.prevFrame.id + 1;
866
+ this.stats.currFrame.reset();
867
+ this.stats.currFrame.id = frameId;
868
+ this.stats.currFrame.delta = delta;
869
+ this.stats.currFrame.fps = this.clock.fpsSampler.fps;
870
+ GraphicsDiagnostics.clear();
871
+ const beforeUpdate = this.clock.now();
872
+ const fixedTimestepMs = 1000 / this.fixedUpdateFps;
873
+ if (this.fixedUpdateFps) {
874
+ this._lagMs += delta;
875
+ while (this._lagMs >= fixedTimestepMs) {
876
+ this._update(fixedTimestepMs);
877
+ this._lagMs -= fixedTimestepMs;
878
+ }
879
+ }
880
+ else {
881
+ this._update(delta);
882
+ }
883
+ const afterUpdate = this.clock.now();
884
+ this.currentFrameLagMs = this._lagMs;
885
+ this._draw(delta);
886
+ const afterDraw = this.clock.now();
887
+ this.stats.currFrame.duration.update = afterUpdate - beforeUpdate;
888
+ this.stats.currFrame.duration.draw = afterDraw - afterUpdate;
889
+ this.stats.currFrame.graphics.drawnImages = GraphicsDiagnostics.DrawnImagesCount;
890
+ this.stats.currFrame.graphics.drawCalls = GraphicsDiagnostics.DrawCallCount;
891
+ this.emit('postframe', new PostFrameEvent(this, this.stats.currFrame));
892
+ this.stats.prevFrame.reset(this.stats.currFrame);
893
+ this._monitorPerformanceThresholdAndTriggerFallback();
894
+ }
895
+ /**
896
+ * Stops Excalibur's main loop, useful for pausing the game.
897
+ */
898
+ stop() {
899
+ if (this.clock.isRunning()) {
900
+ this.emit('stop', new GameStopEvent(this));
901
+ this.browser.pause();
902
+ this.clock.stop();
903
+ this._logger.debug('Game stopped');
904
+ }
905
+ }
906
+ /**
907
+ * Returns the Engine's running status, Useful for checking whether engine is running or paused.
908
+ */
909
+ isRunning() {
910
+ return this.clock.isRunning();
911
+ }
912
+ /**
913
+ * Takes a screen shot of the current viewport and returns it as an
914
+ * HTML Image Element.
915
+ * @param preserveHiDPIResolution in the case of HiDPI return the full scaled backing image, by default false
916
+ */
917
+ screenshot(preserveHiDPIResolution = false) {
918
+ const screenShotPromise = new Promise((resolve) => {
919
+ this._screenShotRequests.push({ preserveHiDPIResolution, resolve });
920
+ });
921
+ return screenShotPromise;
922
+ }
923
+ _checkForScreenShots() {
924
+ // We must grab the draw buffer before we yield to the browser
925
+ // the draw buffer is cleared after compositing
926
+ // the reason for the asynchrony is setting `preserveDrawingBuffer: true`
927
+ // forces the browser to copy buffers which can have a mass perf impact on mobile
928
+ for (const request of this._screenShotRequests) {
929
+ const finalWidth = request.preserveHiDPIResolution ? this.canvas.width : this.screen.resolution.width;
930
+ const finalHeight = request.preserveHiDPIResolution ? this.canvas.height : this.screen.resolution.height;
931
+ const screenshot = document.createElement('canvas');
932
+ screenshot.width = finalWidth;
933
+ screenshot.height = finalHeight;
934
+ const ctx = screenshot.getContext('2d');
935
+ ctx.imageSmoothingEnabled = this.screen.antialiasing;
936
+ ctx.drawImage(this.canvas, 0, 0, finalWidth, finalHeight);
937
+ const result = new Image();
938
+ const raw = screenshot.toDataURL('image/png');
939
+ result.src = raw;
940
+ request.resolve(result);
941
+ }
942
+ // Reset state
943
+ this._screenShotRequests.length = 0;
944
+ }
945
+ /**
946
+ * Another option available to you to load resources into the game.
947
+ * Immediately after calling this the game will pause and the loading screen
948
+ * will appear.
949
+ * @param loader Some [[Loadable]] such as a [[Loader]] collection, [[Sound]], or [[Texture]].
950
+ */
951
+ async load(loader) {
952
+ try {
953
+ await loader.load();
954
+ }
955
+ catch (e) {
956
+ this._logger.error('Error loading resources, things may not behave properly', e);
957
+ await Promise.resolve();
958
+ }
959
+ }
960
+ }
961
+ /**
962
+ * Default [[EngineOptions]]
963
+ */
964
+ Engine._DEFAULT_ENGINE_OPTIONS = {
965
+ width: 0,
966
+ height: 0,
967
+ enableCanvasTransparency: true,
968
+ useDrawSorting: true,
969
+ configurePerformanceCanvas2DFallback: {
970
+ allow: false,
971
+ showPlayerMessage: false,
972
+ threshold: { fps: 20, numberOfFrames: 100 }
973
+ },
974
+ canvasElementId: '',
975
+ canvasElement: undefined,
976
+ snapToPixel: false,
977
+ pointerScope: PointerScope.Canvas,
978
+ suppressConsoleBootMessage: null,
979
+ suppressMinimumBrowserFeatureDetection: null,
980
+ suppressHiDPIScaling: null,
981
+ suppressPlayButton: null,
982
+ grabWindowFocus: true,
983
+ scrollPreventionMode: ScrollPreventionMode.Canvas,
984
+ backgroundColor: Color.fromHex('#2185d0') // Excalibur blue
985
+ };
986
+ //# sourceMappingURL=Engine.js.map