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
package/CHANGELOG.md CHANGED
@@ -1,1955 +1,2003 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- This project adheres to [Semantic Versioning](http://semver.org/).
5
-
6
- ## [Unreleased]
7
-
8
- ### Breaking Changes
9
-
10
- -
11
-
12
- ### Deprecated
13
-
14
- -
15
-
16
- ### Added
17
-
18
- -
19
-
20
-
21
- ### Fixed
22
-
23
- -
24
-
25
- ### Updates
26
-
27
- -
28
-
29
- ### Changed
30
-
31
- -
32
-
33
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
34
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
35
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
36
-
37
-
38
- ## [v0.28.2]
39
-
40
- ### Breaking Changes
41
-
42
- -
43
-
44
- ### Deprecated
45
-
46
- -
47
-
48
- ### Added
49
-
50
- - Added new feature to collision group raycasting, directly provide a `collisionMask` that you want to search for.
51
-
52
- ```typescript
53
- const playerGroup = ex.CollisionGroupManager.create('playerGroup');
54
- const notPlayersMask = ~playersGroup.category;
55
- const hits = engine.currentScene.physics.rayCast(
56
- new ex.Ray(player.pos, playerDir),
57
- {
58
- maxDistance: playerSightDistance,
59
- // Search for all categories that match the mask
60
- collisionMask: notPlayers,
61
- searchAllColliders: false
62
- });
63
- ```
64
-
65
-
66
- ### Fixed
67
-
68
- - Fixed issue where rendering multiple materials at once would crash the renderer
69
- - Fixed issue where raycasting with more complex collision groups was not working as expected
70
-
71
- ### Updates
72
-
73
- -
74
-
75
- ### Changed
76
-
77
- -
78
-
79
- ## [v0.28.2]
80
-
81
- ### Breaking Changes
82
-
83
- -
84
-
85
- ### Deprecated
86
-
87
- -
88
-
89
- ### Added
90
-
91
- - Added `ex.Engine.version` to report the current excalibur version build string
92
- - Added new `ex.Screen.events`
93
- - `screen.events.on('resize', (evt) => )` Will emit when the screen is resized
94
- - `screen.events.on('fullscreen', (evt) => )` Will emit when the screen is changed into browser fullscreen mode
95
- - `screen.events.on('pixelratio', (evt) => )` Will emit when the screen's pixel ratio changes (moving from a hidpi screen to a non, or vice versa)
96
-
97
- ### Fixed
98
-
99
- - Fixed issue where removing handlers by function reference only removed the first registered one
100
- - Fixed issue where play button was hidden when going fullscreen mode
101
- - Fixed issue where screen resizing caused artifacts on the loading screen
102
- - Fixed bug in `useCanvas2DFallback()` where `antialiasing` settings could be lost
103
- - Fixed bug in `useCanvas2DFallback()` where opacity was not respected in `save
104
- - Fixed typo in trigger event signature `entertrigger` should have been `enter`
105
- - Fixed typo in trigger event signature `exittrigger` should have been `exit`
106
- - Fixed typo in animation event signature `ended` should have been `end`
107
- - Fixed issue where some excalibur `clear()` implementations modified the collection they were iterating over
108
- - Fixed async issue where sound could not be stopped if `stop()`/`start()` were called in rapid succession
109
- - Fixed issue with input mapper where `keyboard.wasPressed(...)` did not fire
110
- - Fixed issue issue where TileMaps would not properly draw Tiles when setup in screen space coordinates
111
- - Fixed issue where the ex.Line graphics bounds were incorrect causing erroneous offscreen culling
112
- - Fixed event type signature on `ex.Engine.input.pointers.primary.on('wheel', ...)` for wheel events
113
-
114
- ### Updates
115
-
116
- - Improved performance in TileMaps when drawing tiles using QuadTree data structure
117
-
118
- ### Changed
119
-
120
- - Changed the canvas 2d fallback default, no longer is enabled by default. Developers must opt in.
121
- - Allow entity names to be set after construction! Entities will now default to a name "Entity#1234" followed by an id.
122
-
123
- ## [v0.28.0]
124
-
125
- ### Breaking Changes
126
-
127
- - Removed `ex.Class` base class type, this was a common base class for many excalibur types that provided old on/off event functionality. This functionality has been preserved on the types that had it before using `ex.EventEmitter`
128
-
129
- ### Deprecated
130
-
131
- - The `ex.Input.*` import site is deprecated, will be removed in v0.29.0. All the imports are still available on `ex.` now
132
- - [[ex.Input.Gamepad]] `isButtonPressed` has been renamed to `isButtonHeld`
133
- - `ex.EventDispatcher` is marked deprecated, will eventually be removed in v0.29.0
134
-
135
-
136
- ### Added
137
-
138
- - Added new `ex.InputMapper` for mapping multiple input sources into actions! This can be useful for providing accessibility into your games and allowing users to map inputs to different game commands.
139
- ```typescript
140
- const moveRight = (amount: number) => { actor.vel.x = 100 * amount }
141
- const moveLeft = (amount: number) => { actor.vel.x = -100 * amount }
142
- const moveUp = (amount: number) => { actor.vel.y = -100 * amount }
143
- const moveDown = (amount: number) => { actor.vel.y = 100 * amount }
144
- engine.inputMapper.on(({keyboard}) => keyboard.isHeld(ex.Keys.ArrowRight) ? 1 : 0, moveRight);
145
- engine.inputMapper.on(({gamepads}) => gamepads.at(0).isButtonPressed(ex.Buttons.DpadRight) ? 1 : 0, moveRight);
146
- engine.inputMapper.on(({gamepads}) => gamepads.at(0).getAxes(ex.Axes.LeftStickX) > 0 ? gamepads.at(0).getAxes(ex.Axes.LeftStickX) : 0, moveRight);
147
- ```
148
- - Added strongly typed events with `ex.EventEmitter<TEventMap>`
149
- - Added new convenience properties for flipping all the graphics on an Actor
150
- * `ex.Actor.graphics.flipHorizontal` - Flips all the graphics horizontally
151
- * `ex.Actor.graphics.flipVertical` - Flips all the graphics vertically
152
- - Added new `ex.Scene.transfer(actor)` method for transferring actors between scenes, useful if you want to only have an actor in 1 scene at a time.
153
- - Added new `ex.Material` to add custom shaders per `ex.Actor`!
154
- * This feature cant be applied using the `ex.Actor.graphics.material = material` property or by setting the material property on the `ex.ExcaliburGraphicsContext.material = material` with `.save()/.restore()`
155
- * This feature opt out of batch rendering and issues a separate draw call
156
- * A custom vertex shader can be provided, otherwise a default will be provided
157
- * A number of default uniforms are available to shaders
158
- * Pre-built varyings:
159
- * `in vec2 v_uv` - UV coordinate
160
- * Pre-built uniforms:
161
- * `uniform sampler2D u_graphic` - The current graphic displayed by the GraphicsComponent
162
- * `uniform vec2 u_resolution` - The current resolution of the screen
163
- * `uniform vec2 u_size;` - The current size of the graphic
164
- * `uniform vec4 u_color` - The current color of the material
165
- * `uniform float u_opacity` - The current opacity of the graphics context
166
- ```typescript
167
- const material = new ex.Material({
168
- name: 'test',
169
- color: ex.Color.Red,
170
- fragmentSource: `#version 300 es
171
- precision mediump float;
172
- // UV coord
173
- in vec2 v_uv;
174
- uniform sampler2D u_graphic;
175
- uniform vec4 u_color;
176
- uniform float u_opacity;
177
- out vec4 fragColor;
178
- void main() {
179
- vec4 color = u_color;
180
- color = texture(u_graphic, v_uv);
181
- color.rgb = color.rgb * u_opacity;
182
- color.a = color.a * u_opacity;
183
- fragColor = color * u_color;
184
- }`
185
- });
186
- ```
187
- - Added updates to `ex.PostProcessor`
188
- * New optional `ex.PostProcessor.onUpdate` hook for updating custom uniforms
189
- * Added default uniforms that are automatically added
190
- * `uniform float u_time_ms` - total playback time in milliseconds
191
- * `uniform float u_elapsed_ms` - the elapsed time from the last frame in milliseconds
192
- * `uniform vec2 u_resolution` - the resolution of the canvas (in pixels)
193
-
194
- - Added new helper called `ex.Animation.fromSpriteSheetCoordinates` to help build animations more tersely from SpriteSheets
195
- ```typescript
196
- const spriteSheet = SpriteSheet.fromImageSource({...});
197
- const anim = Animation.fromSpriteSheetCoordinates({
198
- spriteSheet,
199
- frameCoordinates: [
200
- {x: 0, y: 5, duration: 100},
201
- {x: 1, y: 5, duration: 200},
202
- {x: 2, y: 5, duration: 100},
203
- {x: 3, y: 5, duration: 500}
204
- ],
205
- strategy: AnimationStrategy.PingPong
206
- });
207
- ```
208
-
209
- - Added new `FrameEvent` to `ex.Animation` which includes the frame index of the current frame!
210
- ```typescript
211
- const anim = new Animation();
212
-
213
- // TS autocompletes the handler
214
- anim.on('frame', (frame: FrameEvent) => {
215
- // Do stuff on frame
216
- });
217
- ```
218
-
219
- - Added new typed `ex.EventEmitter` which will eventually replace the old `ex.EventDispatcher`, this gives users a way of strongly typing the possible events that can be emitted using a type map. This is loosely typed you can still emit any event you want, you only get type completion suggestions for the type map.
220
- ```typescript
221
- export type AnimationEvents = {
222
- frame: FrameEvent;
223
- loop: Animation;
224
- ended: Animation;
225
- };
226
-
227
- export class Animation {
228
- public events = new EventEmitter<AnimationEvents>();
229
- ...
230
- }
231
-
232
- const anim = new Animation();
233
-
234
- // TS autocompletes the handler
235
- anim.on('frame', (frame: FrameEvent) => {
236
- // Do stuff on frame
237
- });
238
- ```
239
-
240
- - Added ability to perform arbitrary ray casts into `ex.Scene`, the `ex.PhysicsWorld` can be passed a variety of options to influence the types of ray cast hits that
241
- are returned
242
- ```typescript
243
- const engine = new ex.Engine({...});
244
- const enemyGroup = ex.CollisionGroupManager.create('enemy');
245
- const ray = new ex.Ray(ex.vec(0, 0), ex.Vector.Right);
246
- const hits = engine.currentScene.physics.rayCast(ray, {
247
- /**
248
- * Optionally specify to search for all colliders that intersect the ray cast, not just the first which is the default
249
- */
250
- searchAllColliders: true,
251
- /**
252
- * Optionally specify the maximum distance in pixels to ray cast, default is Infinity
253
- */
254
- maxDistance: 100,
255
- /**
256
- * Optionally specify a collision group to consider in the ray cast, default is All
257
- */
258
- collisionGroup: enemyGroup
259
- });
260
-
261
- ```
262
- - Added word-wrap support for `ex.Text` using the optional parameter `maxWidth`
263
- - Added the emitted particle transform style as part of `ex.ParticleEmitter({particleTransform: ex.ParticleTransform.Global})`, [[ParticleTransform.Global]] is the default and emits particles as if they were world space objects, useful for most effects. If set to [[ParticleTransform.Local]] particles are children of the emitter and move relative to the emitter as they would in a parent/child actor relationship.
264
- - Added `wasButtonReleased` and `wasButtonPressed` methods to [[ex.Input.Gamepad]]
265
- - Added `clone()` method to `ex.SpriteSheet`
266
-
267
- ### Fixed
268
-
269
- - Fixed issue with `ex.TileMap` collider consolidation where custom colliders would prevent normal solid tile colliders from being included.
270
- - Fixed memory leak in the internal `ex.EntityManager`, it did not properly clear internal state when removing entities
271
- - Fixed issue where scaling a `ex.TileMap` didn't properly offscreen cull due to the bounds not scaling properly.
272
- - Fixed issue where `ex.Text.flipHorizontal` or `ex.Text.flipVertical` would not work
273
- - Fixed issue where overriding existing components did not work properly because of deferred component removal
274
- - Fixed issue where `ex.ScreenElement` pointer events were not working by default.
275
- - Fixed issue where setting lineWidth on `ex.Circle` was not accounted for in the bitmap
276
- - Fixed issue in macos where the meta key would prevent keyup's from firing correctly
277
- - Fixed issue when excalibur was hosted in a x-origin iframe, the engine will grab window focus by default if in an iframe. This can be suppressed with `new ex.Engine({grabWindowFocus: false})`
278
- - Fixed issue where `ex.Camera.rotation = ...` did not work to rotate the camera, also addressed offscreen culling issues that were revealed by this fix.
279
- - Fixed issue where the `ex.ScreenElement` anchor was not being accounted for properly when passed as a constructor parameter.
280
- - Fixed issue where you could not use multiple instances of Excalibur on the same page, you can now have as many Excalibur's as you want (up to the webgl context limit).
281
- - Fixed issue where `ex.ScreenElement` would log a warning when created without a height or width
282
- - Fixed issue where `ex.Sound` would get confused parsing and playing sound files with a querystring in their path
283
- - Fixed issue where `ex.ColliderComponent` was not deeply cloning the stored `ex.Collider` causing them to be shared across clones.
284
- - Fixed issue where `ex.GraphicsComponent` was not deeploy cloning the
285
- stored `ex.Graphics` causing them to be shared across clones.
286
- - Fixed issue where `Actor.clone()` and `Entity.clone()` crashed.
287
- - Fixed issue where zero mtv collisions cause erroneous precollision events to be fired in the `ArcadeSolver` and `RealisticSolver`
288
- - Fixed issue where calling `.kill()` on a child entity would not remove it from the parent `Entity`
289
- - Fixed issue where calling `.removeAllChildren()` would not remove all the children from the parent `Entity`
290
- - Fixed issue where world origin was inconsistent when the using `ex.DisplayMode.FitScreenAndFill` when the screen was resized.
291
- - Fixed issue where context opacity was not respected when set in a `preDraw`
292
- - Fixed issue where `ex.Sound.loop` was not working, and switching tab visibility would cause odd behavior with looping `ex.Sound`
293
- - Fixed issue where adding a `ex.ParticleEmitter` as a child did not position particles according to the parent
294
- - Fixed issue where screenshots from `ex.Engine.screenshot()` did not match the smoothing set on the engine.
295
- - Fixed incorrect event type returned when `ex.Actor.on('postupdate', (event) => {...})`.
296
- - Fixed issue where using numerous `ex.Text` instances would cause Excalibur to crash webgl by implementing a global font cache.
297
- - Fixed issue where child entities did not inherit the scene from their parent
298
- - Fixed issue where `ex.Font` would become corrupted when re-used by multiple `ex.Text` instances
299
- - Fixed `engine.on('visible')` event not firing
300
- - Fixed `EventDispatcher.emit` converting falsy values to `ex.GameEvent`. It will only convert `undefined` or `null` values now.
301
-
302
- ### Updates
303
-
304
- -
305
-
306
- ### Changed
307
-
308
- - Excalibur will now use `ex.EventEmitter` to broadcast events, Excalibur types that have events support will also have an `.events` member.
309
- - Excalibur resources by default no longer add cache busting query string to resources. All built in resources now expose a `bustCache` property to allow setting this before loading, for example `ex.Sound.bustCache`.
310
-
311
-
312
- ## [0.27.0] - 2022-07-08
313
-
314
- ### Breaking Changes
315
-
316
- - `ex.Engine.snapToPixel` now defaults to `false`, it was unexpected to have pixel snapping on by default it has now been switched.
317
- - The `ex.Physics.useRealisticPhysics()` physics solver has been updated to fix a bug in bounciness to be more physically accurate, this does change how physics behaves. Setting `ex.Body.bounciness = 0` will simulate the old behavior.
318
- - `ex.TransformComponent.posChanged$` has been removed, it incurs a steep performance cost
319
- - `ex.EventDispatcher` meta events 'subscribe' and 'unsubscribe' were unused and undocumented and have been removed
320
- - `ex.TileMap` tlies are now drawn from the lower left by default to match with `ex.IsometricMap` and Tiled, but can be configured with `renderFromTopOfGraphic` to restore the previous behavior.
321
- - Scene `onActivate` and `onDeactivate` methods have been changed to receive a single parameter, an object containing the `previousScene`, `nextScene`, and optional `data` passed in from `goToScene()`
322
-
323
- ### Deprecated
324
-
325
- -
326
-
327
- ### Added
328
- - Added new configurable `ex.TileMap` option for rendering from the bottom or the top of the graphic, this matches with `ex.IsometricMap` and how Tiled renders `renderFromTopOfGraphic`, by default `false` and renders from the bottom.
329
- ```typescript
330
- const tileMap = new ex.TileMap({
331
- renderFromTopOfGraphic: false
332
- })
333
- ```
334
- - Added new `ex.Future` type which is a convenient way of wrapping a native browser promise and resolving/rejecting later
335
- ```typescript
336
- const future = new ex.Future();
337
- const promise = future.promise; // returns promise
338
- promise.then(() => {
339
- console.log('Resolved!');
340
- });
341
- future.resolve(); // resolved promise
342
- ```
343
- - Added new `ex.Semaphore` type to limit the number of concurrent cans in a section of code, this is used internally to work around a chrome browser limitation, but can be useful for throttling network calls or even async game events.
344
- ```typescript
345
- const semaphore = new ex.Semaphore(10); // Only allow 10 concurrent between enter() and exit()
346
- ...
347
-
348
- await semaphore.enter();
349
- await methodToBeLimited();
350
- semaphore.exit();
351
- ```
352
- - Added new `ex.WatchVector` type that can observe changes to x/y more efficiently than `ex.watch()`
353
- - Added performance improvements
354
- * `ex.Vector.distance` improvement
355
- * `ex.BoundingBox.transform` improvement
356
- - Added ability to clone `ex.Vector.clone(destVector)` into a destination vector
357
- - Added new `ex.Transform` type that is a light weight container for transformation data. This logic has been extracted from the `ex.TransformComponent`, this makes it easy to pass `ex.Transform`s around. Additionally the extracted `ex.Transform` logic has been refactored for performance.
358
- - Added new `ex.AffineMatrix` that is meant for 2D affine transformations, it uses less memory and performs less calculations than the `ex.Matrix` which uses a 4x4 Float32 matrix.
359
- - Added new fixed update step to Excalibur! This allows developers to configure a fixed FPS for the update loop. One advantage of setting a fix update is that you will have a more consistent and predictable physics simulation. Excalibur graphics will be interpolated automatically to avoid any jitter in the fixed update.
360
- * If the fixed update FPS is greater than the display FPS, excalibur will run multiple updates in a row (at the configured update elapsed) to catch up, for example there could be X updates and 1 draw each clock step.
361
- * If the fixed update FPS is less than the display FPS, excalibur will skip updates until it meets the desired FPS, for example there could be no update for 1 draw each clock step.
362
- ```typescript
363
- const game = new ex.Engine({
364
- fixedUpdateFps: 20 // 20 fps fixed update, or a fixed update delta of 50 milliseconds
365
- });
366
- // turn off interpolation on a per actor basis
367
- const actor = new ex.Actor({...});
368
- actor.body.enableFixedUpdateInterpolate = false;
369
- game.add(game);
370
- ```
371
-
372
- - Allowed setting playback `ex.Sound.duration` which will limit the amount of time that a clip plays from the current playback position.
373
- - Added a new lightweight `ex.StateMachine` type for building finite state machines
374
- ```typescript
375
- const machine = ex.StateMachine.create({
376
- start: 'STOPPED',
377
- states: {
378
- PLAYING: {
379
- onEnter: () => {
380
- console.log("playing");
381
- },
382
- transitions: ['STOPPED', 'PAUSED']
383
- },
384
- STOPPED: {
385
- onEnter: () => {
386
- console.log("stopped");
387
- },
388
- transitions: ['PLAYING', 'SEEK']
389
- },
390
- SEEK: {
391
- transitions: ['*']
392
- },
393
- PAUSED: {
394
- onEnter: () => {
395
- console.log("paused")
396
- },
397
- transitions: ['PLAYING', 'STOPPED']
398
- }
399
- }
400
- });
401
- ```
402
- - Added `ex.Sound.seek(positionInSeconds)` which will allow you to see to a place in the sound, this will implicitly pause the sound
403
- - Added `ex.Sound.getTotalPlaybackDuration()` which will return the total time in the sound in seconds.
404
- - Allow tinting of `ex.Sprite`'s by setting a new `tint` property, renderers must support the tint property in order to function.
405
- ```typescript
406
- const imageSource = new ex.ImageSource('./path/to/image.png');
407
- await imageSource.load();
408
- const sprite = imageSource.toSprite();
409
- sprite.tint = ex.Color.Red;
410
- ```
411
- - Added `ex.Sound.getPlaybackPosition()` which returns the current playback position in seconds of the currently playing sound.
412
- - Added `ex.Sound.playbackRate` which allows developers to get/set the current rate of playback. 1.0 is the default playback rate, 2.0 is twice the speed, and 0.5 is half speed.
413
- - Added missing `ex.EaseBy` action type, uses `ex.EasingFunctions` to move relative from the current entity position.
414
- - Added 2 new `Action` types to enable running parallel actions. `ex.ActionSequence` which allows developers to specify a sequence of actions to run in order, and `ex.ParallelActions` to run multiple actions at the same time.
415
- ```typescript
416
- const actor = new ex.Actor();
417
- const parallel = new ex.ParallelActions([
418
- new ex.ActionSequence(actor, ctx => ctx.moveTo(ex.vec(100, 0), 100)),
419
- new ex.ActionSequence(actor, ctx => ctx.rotateTo(Math.PI/2, Math.PI/2))
420
- ]);
421
- actor.actions.runAction(parallel);
422
- // actor will now move to (100, 100) and rotate to Math.PI/2 at the same time!!
423
- ```
424
- - Add target element id to `ex.Screen.goFullScreen('some-element-id')` to influence the fullscreen element in the fullscreen browser API.
425
- - Added optional `data` parameter to `goToScene`, which gets passed to the target scene's `onActivate` method.
426
- ```typescript
427
- class SceneA extends ex.Scene {
428
- /* ... */
429
-
430
- onActivate(context: ex.SceneActivationContext<{ foo: string }>) {
431
- console.log(context.data.foo); // bar
432
- }
433
- }
434
-
435
- engine.goToScene('sceneA', { foo: 'bar' })
436
- ```
437
- - Added the ability to select variable duration into Timer constructor.
438
- ```typescript
439
- const random = new ex.Random(1337);
440
- const timer = new ex.Timer({
441
- random,
442
- interval: 500,
443
- randomRange: [0, 500]
444
- })
445
- ```
446
-
447
- ### Fixed
448
-
449
- - Fixed issue with `ex.Canvas` and `ex.Raster` graphics that forced their dimensions to the next highest power of two.
450
- - Fixed issue with `ex.Engine.snapToPixel` where positions very close to pixel boundary created jarring 1 pixel oscillations.
451
- - Fixed bug where a deferred `goToScene` would preserve the incorrect scene so `engine.add(someActor)` would place actors in the wrong scene after transitioning to another.
452
- - Fixed usability issue and log warning if the `ex.ImageSource` is not loaded and a draw was attempted.
453
- - Fixed bug in `ex.Physics.useRealisticPhysics()` solver where `ex.Body.bounciness` was not being respected in the simulation
454
- - Fixed bug in `ex.Physics.useRealisticPhysics()` solver where `ex.Body.limitDegreeOfFreedom` was not working all the time.
455
- - Fixed bug in `Clock.schedule` where callbacks would not fire at the correct time, this was because it was scheduling using browser time and not the clock's internal time.
456
- - Fixed issue in Chromium browsers where Excalibur crashes if more than 256 `Image.decode()` calls are happening in the same frame.
457
- - Fixed issue where `ex.EdgeCollider` were not working properly in `ex.CompositeCollider` for `ex.TileMap`'s
458
- - Fixed issue where `ex.BoundingBox` overlap return false due to floating point rounding error causing multiple collisions to be evaluated sometimes
459
- - Fixed issue with `ex.EventDispatcher` where removing a handler that didn't already exist would remove another handler by mistake
460
- - Fixed issue with `ex.EventDispatcher` where concurrent modifications of the handler list where handlers would or would not fire correctly and throw
461
- - Tweak to the `ex.ArcadeSolver` to produce more stable results by adjusting by an infinitesimal epsilon
462
- - Contacts with overlap smaller than the epsilon are ignored
463
- - Colliders with bounds that overlap smaller than the epsilon are ignored
464
- - Fixed issue with `ex.ArcadeSolver` based collisions where colliders were catching on seams when sliding along a floor of multiple colliders. This was by sorting contacts by distance between bodies.
465
- ![sorted-collisions](https://user-images.githubusercontent.com/612071/172401390-9e9c3490-3566-47bf-b258-6a7da86a3464.gif)
466
-
467
- - Fixed issue with `ex.ArcadeSolver` where corner contacts would zero out velocity even if the bodies were already moving away from the contact "divergent contacts".
468
- ![cancel-velocity-fix](https://user-images.githubusercontent.com/612071/172500318-539f3a36-31ae-4efc-b6ab-c4524b297adb.gif)
469
-
470
- - Fixed issue where `ex.Sound` wasn't being paused when the browser window lost focus
471
-
472
- ### Updates
473
-
474
- - Updated the collision system to improve performance
475
- * Cache computed values where possible
476
- * Avoid calculating transformations until absolutely necessary
477
- * Avoid calling methods in tight loops
478
-
479
- ### Changed
480
-
481
- - `ex.Engine.configurePerformanceCanvas2DFallback` no longer requires `threshold` or `showPlayerMessage`
482
- - `ex.Engine.snapToPixel` now defaults to `false`
483
- - Most places where `ex.Matrix` was used have been switched to `ex.AffineMatrix`
484
- - Most places where `ex.TransformComponent` was used have been switched to `ex.Transform`
485
-
486
- ## [0.26.0] - 2022-05-20
487
-
488
- ### Breaking Changes
489
-
490
- - `ex.Line` has be replaced with a new Graphics type, the old geometric behavior is now under the type `ex.LineSegment`
491
- - Notable deprecated types removed
492
- - `ex.SortedList` old sorted list is removed
493
- - `ex.Collection` old collection type is removed
494
- - `ex.Util` import site, exported code promoted `ex.*`
495
- - `ex.DisplayMode.Position` is removed, use CSS to position the canvas
496
- - `ex.Trait` interface, traits are not longer supported
497
- - `ex.Promises` old promise implementation is removed in favor of browser promises
498
- - Notable method & property removals
499
- - `ex.Actor`
500
- * `.getZIndex()` and `.setZIndex()` removed use `.z`
501
- - `ex.Scene`
502
- * `.screenElements` removed in favor of `.entities`
503
- * `.addScreenElement(...)` removed use `.add(...)`
504
- * `.addTileMap(...)` removed use `.add(...)`
505
- * `.removeTileMap(...)` removed use `.remove(...)`
506
- - `ex.Timer`
507
- * `.unpause()` removed use `.resume()`
508
- - `ex.Camera`
509
- * `.rx` removed use `.angularVelocity`
510
- - `ex.BodyComponent`
511
- * `.sx` removed use `.scaleFactor`
512
- * `.rx` removed use `.angularVelocity`
513
- - `ex.ActionsComponent`
514
- * `.asPromise()` removed use `.toPromise()`
515
- - `ex.ActionContext`
516
- * `.asPromise()` removed use `.toPromise()`
517
- - `ex.Color`
518
- * Misspellings corrected
519
- - The old drawing API had been removed from excalibur, this should not affect you unless you were using the `ex.Flags.useLegacyDrawing()` or `ex.Flags.useCanvasGraphicsContext()`.
520
- - Notably all implementations of `Drawable` are removed, use the new `Graphics` API
521
- - Methods on actor `ex.Actor.setDrawing(...)`, `ex.Actor.addDrawing(...)` are removed, use the `ex.Actor.graphics.add(...)`, `ex.Actor.graphics.show(...)` and `ex.Actor.graphics.use(...)`
522
- - The `ex.Actor.onPreDraw(...)` and `ex.Actor.onPostDraw(...)` are removed, use `ex.Actor.graphics.onPreDraw(...)` and `ex.Actor.graphics.onPostDraw(...)`
523
- - The events `predraw` and `postdraw` are removed
524
- - `ex.Scene.onPreDraw()` and `ex.Scene.onPostDraw()` are now called with the `ExcaliburGraphicsContext` instead of an `CanvasRenderingContext2D`
525
- - `ex.TileMap` has several breaking changes around naming, but brings it consistent with Tiled terminology and the new `ex.IsometricMap`. Additionally the new names are easier to follow.
526
- - Constructor has been changed to the following
527
- ```typescript
528
- new ex.TileMap({
529
- pos: ex.vec(100, 100),
530
- tileWidth: 64,
531
- tileHeight: 48,
532
- rows: 20,
533
- columns: 20
534
- });
535
- ```
536
- - `ex.Cell` has been renamed to `ex.Tile`
537
- - `ex.Tile` now uses `addGraphic(...)`, `removeGraphic(...)`, `clearGraphics()` and `getGraphics()` instead of having an accessible `ex.Tile.graphics` array.
538
- - `ex.TileMap.data` has been renamed to `ex.TileMap.tiles`
539
- - `ex.TileMap.getCell(..)` has been renamed to `ex.TileMap.getTile(...)`
540
- - `ex.TileMap.getCellByIndex(...)` has been renamed to `ex.TileMap.getTileByIndex(...)`
541
- - `ex.TileMap.getCellByPoint(...)` has been renamed to `ex.TileMap.getTileByPoint(...)`
542
-
543
-
544
- ### Deprecated
545
-
546
- -
547
-
548
- ### Added
549
-
550
- - Added new parameter to `ex.Raster({quality: 4})` to specify the internal scaling for the bitmap, this is useful for improving the rendering quality of small rasters due to sampling error.
551
- - Added new `ex.Line` graphics object for drawing lines!
552
- ```typescript
553
- const lineActor = new ex.Actor({
554
- pos: ex.vec(100, 0)
555
- });
556
- lineActor.graphics.anchor = ex.Vector.Zero;
557
- lineActor.graphics.use(new ex.Line({
558
- start: ex.vec(0, 0),
559
- end: ex.vec(200, 200),
560
- color: ex.Color.Green,
561
- thickness: 10
562
- }));
563
- game.add(lineActor);
564
- ```
565
- - Added new performance fallback configuration to `ex.Engine` for developers to help players experiencing poor performance in non-standard browser configurations
566
- * This will fallback to the Canvas2D rendering graphics context which usually performs better on non hardware accelerated browsers, currently postprocessing effects are unavailable in this fallback.
567
- * By default if a game is running at 20fps or lower for 100 frames or more after the game has started it will be triggered, the developer can optionally show a player message that is off by default.
568
- ```typescript
569
- var game = new ex.Engine({
570
- ...
571
- configurePerformanceCanvas2DFallback: {
572
- allow: true, // opt-out of the fallback
573
- showPlayerMessage: true, // opt-in to a player pop-up message
574
- threshold: { fps: 20, numberOfFrames: 100 } // configure the threshold to trigger the fallback
575
- }
576
- });
577
- ```
578
- - Added new `ex.ParallaxComponent` for creating parallax effects on the graphics, entities with this component are drawn differently and a collider will not be where you expect. It is not recommended you use colliders with parallax entities.
579
- ```typescript
580
- const actor = new ex.Actor();
581
- // The actor will be drawn shifted based on the camera position scaled by the parallax factor
582
- actor.addComponent(new ParallaxComponent(ex.vec(0.5, 0.5)));
583
- ```
584
- - Added feature to build `SpriteSheet`s from a list of different sized source views using `ex.SpriteSheet.fromImageSourceWithSourceViews(...)`
585
- ```typescript
586
- const ss = ex.SpriteSheet.fromImageSourceWithSourceViews({
587
- image,
588
- sourceViews: [
589
- {x: 0, y: 0, width: 20, height: 30},
590
- {x: 20, y: 0, width: 40, height: 50},
591
- ]
592
- });
593
- ```
594
- - Added draw call sorting `new ex.Engine({useDrawSorting: true})` to efficiently draw render plugins in batches to avoid expensive renderer switching as much as possible. By default this is turned on, but can be opted out of.
595
- - Added the ability to clone into a target `Matrix` this is useful to save allocations and in turn garbage collection pauses.
596
- - `ex.Engine` now support setting the pixel ratio in the constructor `new ex.Engine({pixelRatio: 2})`, this is useful for smooth `ex.Text` rendering when `antialiasing: false` and rendering pixel art type graphics
597
- - `ex.TileMap` now supports per Tile custom colliders!
598
- ```typescript
599
- const tileMap = new ex.TileMap(...);
600
- const tile = tileMap.getTile(0, 0);
601
- tile.solid = true;
602
- tile.addCollider(...); // add your custom collider!
603
- ```
604
- - New `ex.IsometricMap` for drawing isometric grids! (They also support custom colliders via the same mechanism as `ex.TileMap`)
605
- ```typescript
606
- new ex.IsometricMap({
607
- pos: ex.vec(250, 10),
608
- tileWidth: 32,
609
- tileHeight: 16,
610
- columns: 15,
611
- rows: 15
612
- });
613
- ```
614
- - `ex.IsometricTile` now come with a `ex.IsometricEntityComponent` which can be applied to any entity that needs to be correctly sorted to preserve the isometric illusion
615
- - `ex.IsometricEntitySystem` generates a new z-index based on the `elevation` and y position of an entity with `ex.IsometricEntityComponent`
616
-
617
- - Added arbitrary non-convex polygon support (only non-self intersecting) with `ex.PolygonCollider(...).triangulate()` which builds a new `ex.CompositeCollider` composed of triangles.
618
- - Added faster `ex.BoundingBox.transform(...)` implementation.
619
- - Added faster `ex.BoundingBox.overlap(...)` implementation.
620
- - Added `ex.Vector.min(...)` and `ex.Vector.max(...)` to find the min/max of each vector component between 2 vectors.
621
- - Added `ex.TransformComponent.zIndexChange$` observable to watch when z index changes.
622
- - Added new display mode `ex.DisplayMode.FitContainerAndFill`.
623
- - Added new display mode `ex.DisplayMode.FitScreenAndFill`.
624
- - Added new display mode `ex.DisplayMode.FitContainerAndZoom`.
625
- - Added new display mode `ex.DisplayMode.FitScreenAndZoom`.
626
- ### Fixed
627
-
628
- - Fixed unreleased issue where fixed update interpolation was incorrect with child actors
629
- - Fixed unreleased bug where CompositeCollider components would not collide appropriately because contacts did not have unique ids
630
- - Fixed issue where CompositeColliders treat separate constituents as separate collisionstart/collisionend which is unexpected
631
- - Fixed issue where resources that failed to load would silently fail making debugging challenging
632
- - Fixed issue where large pieces of Text were rendered as black rectangles on mobile, excalibur now internally breaks these into smaller chunks in order to render them.
633
- - Fixed issue #2263 where keyboard input `wasPressed` was not working in the `onPostUpdate` lifecycle
634
- - Fixed issue #2263 where there were some keys missing from the `ex.Input.Keys` enum, including `Enter`
635
- - Fixed issue where Rectangle line renderer did not respect z order
636
-
637
- ### Updates
638
-
639
- - Performance improvement to the `ex.Loader` screen keeping frame rates higher by only updating the backing `ex.Canvas` when there are changes
640
- - Improved collision broadphase by swapping to a more efficient `ex.BoundingBox.overlaps` check
641
- - Improved collision narrowphase by improving `ex.PolygonCollider` calculations for localBounds, bounds, and transformed point geometry
642
- - Improved Text/Font performance by internally caching expensive native `measureText()` calls
643
- - Performance improvement to GraphicsSystem
644
- - Performance improvement to the transform capture of the previous frame transform and motion
645
-
646
- ### Changed
647
-
648
- - Split offscreen detection into a separate system
649
- - Renamed `ex.Matrix.multv()` and `ex.Matrix.multm()` to `ex.Matrix.multiply()` which matches our naming conventions
650
-
651
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
652
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
653
- <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
654
-
655
- ## [0.25.3] - 2022-02-05
656
-
657
- ## Breaking Changes
658
-
659
- - Small breaking change to `engine.screenshot()` you must now use `await engine.screenshot()`. This avoids copy buffer performance impact of `preserveDrawingBuffer: true` by capturing a screen shot request on the next frame when the buffer has not yet been cleared.
660
-
661
- ### Deprecated
662
-
663
- -
664
-
665
- ### Added
666
-
667
- -
668
-
669
- ### Fixed
670
-
671
- - Fixed issue where collision normals are inaccurate on polygon colliders that offset from their origin
672
- - Fixed issue where only Pixel 6 devices crash when using their MAX_TEXTURE_IMAGE_UNITS, artificially cap Excalibur to 125 textures max
673
- - Fixed issue [#2224] where pointer events sometimes didn't work in mobile platforms due to `touch-action` not being set to `none`
674
- - Fixed issue [#2203] where `engine.screenshot()` did not work in the WebGL implementation
675
- - Fixed issue [#1528] where screenshots didn't match the displayed game's size in HiDPI displays, images are now consistent with the game. If you want the full scaled image pass `engine.screenshot(true)` to preserve HiDPI Resolution.
676
- - Fixed issue [#2206] error and warning logs for large images to help developers identify error situations in the webgl implementation
677
-
678
- ### Updates
679
-
680
- -
681
-
682
- ### Changed
683
-
684
- -
685
-
686
- ## [0.25.2] - 2022-01-21
687
-
688
- ### Breaking Changes
689
-
690
- - `ex.Util.extend()` is removed, modern js spread operator `{...someobject, ...someotherobject}` handles this better.
691
- - Excalibur post processing is now moved to the `engine.graphicsContext.addPostProcessor()`
692
- - Breaking change to `ex.PostProcessor`, all post processors must now now implement this interface
693
- ```typescript
694
- export interface PostProcessor {
695
- intialize(gl: WebGLRenderingContext): void;
696
- getShader(): Shader;
697
- }
698
- ```
699
- ### Deprecated
700
-
701
- - The static `Engine.createMainLoop` is now marked deprecated and will be removed in v0.26.0, it is replaced by the `Clock` api
702
- - Mark legacy draw routines in `ex.Engine`, `ex.Scene`, and `ex.Actor` deprecated
703
-
704
- ### Added
705
-
706
- - Added ability to build custom renderer plugins that are accessible to the `ex.ExcaliburGraphicsContext.draw<TCustomRenderer>(...)` after registering them `ex.ExcaliburGraphicsContext.register(new LineRenderer())`
707
- - Added ability to draw circles and rectangles with outlines! `ex.ExcaliburGraphicsContext.drawCircle(...)` and `ex.ExcaliburGraphicsContext.drawRectangle(...)`
708
- - Added `ex.CoordPlane` can be set in the `new ex.Actor({coordPlane: CoordPlane.Screen})` constructor
709
- - Added convenience feature, setting the color, sets the color on default graphic if applicable
710
- - Added a `DebugGraphicsComponent` for doing direct debug draw in the `DebugSystem`
711
- - Added back TileMap debug draw
712
- - Added `ex.Scene.timers` to expose the list of timers
713
- - Added support for different webgl texture blending modes as `ex.ImageFiltering` :
714
- * `ex.ImageFiltering.Blended` - Blended is useful when you have high resolution artwork and would like it blended and smoothed
715
- * `ex.ImageFiltering.Pixel` - Pixel is useful when you do not want smoothing aka antialiasing applied to your graphics.
716
- - Excalibur will set a "default" blend mode based on the `ex.EngineOption` antialiasing property, but can be overridden per graphic
717
- - `antialiasing: true`, then the blend mode defaults to `ex.ImageFiltering.Blended`
718
- - `antialiasing: false`, then the blend mode defaults to `ex.ImageFiltering.Pixel`
719
- - `ex.Text/ex.Font` defaults to blended which improves the default look of text rendering dramatically!
720
- - `ex.Circle` and `ex.Polygon` also default to blended which improves the default look dramatically!
721
- - `ex.ImageSource` can now specify a blend mode before the Image is loaded, otherwise
722
- - Added new `measureText` method to the `ex.SpriteFont` and `ex.Font` to return the bounds of any particular text
723
- - Added new `Clock` api to manage the core main loop. Clocks hide the implementation detail of how the mainloop runs, users just knows that it ticks somehow. Clocks additionally encapsulate any related browser timing, like `performance.now()`
724
- 1. `StandardClock` encapsulates the existing `requestAnimationFrame` api logic
725
- 2. `TestClock` allows a user to manually step the mainloop, this can be useful for frame by frame debugging #1170
726
- 3. The base abstract clock implements the specifics of elapsed time
727
-
728
- - Added a new feature to Engine options to set a maximum fps `new ex.Engine({...options, maxFps: 30})`. This can be useful when needing to deliver a consistent experience across devices.
729
- - Pointers can now be configured to use the collider or the graphics bounds as the target for pointers with the `ex.PointerComponent`
730
- - `useColliderShape` - (default true) uses the collider component geometry for pointer events
731
- - `useGraphicsBounds` - (default false) uses the graphics bounds for pointer events
732
-
733
-
734
- ### Fixed
735
-
736
- - Fixed issue [#2192] where Actor.center was not correct in child actors
737
- - Fixed issue where `ex.CircleCollider`s did not respect rotation/scale when offset
738
- - Fixed issue [#2157] when compiling in TS strict mode complaining about `ex.Poolable`
739
- - Fixed issue where scaled graphics were not calculating the correct bounds
740
- - Fixed unreleased issue where clock implementation was not updating frame id
741
- - Fixed alpha pre-multiply math in multiple shaders
742
- - Fixed label initialization of fonts, passing a font in the constructor work
743
- - Fixed bug in sprite bounds calculations not taking scale into account
744
- - Fixed bug with pointer api where clicking on screen coordinate actors didn't work
745
- - Fixed [#1815] issue where Camera would jitter when using a strategies based off of actors in the previous frame.
746
- - Fixed issue where TileMaps would sometimes have a geometry seam that may not fall on an actual screen pixel causing a visible gap between tiles and the background
747
- -- ![image](https://user-images.githubusercontent.com/612071/144700377-ac4585ba-3f4c-44b8-95db-ad36c5fc9a32.png)
748
- - Fixed unreleased issue where SpriteFonts log every frame they detect a misconfigured font.
749
- - Fixed unreleased issue where clock when constraining fps would pass larger than expected elapsed times to the simulation causing things to "speed up" bizarrely
750
- - Fixed unreleased issue where games with no resources would crash
751
- - Fixed issue [#2152] where shared state in `ex.Font` and `ex.SpriteFont` prevented text from aligning properly when re-used
752
- - Fixed issue where fast moving `CompositeCollider`s were erroneously generating pairs for their constituent parts
753
- - Fixed Safari 13.1 crash when booting Excalibur because of they odd MediaQuery API in older Safari
754
- - Fixed issue where pointers did not work because of missing types
755
- - Fixed issue with `ArcadeSolver` where stacked/overlapped tiles would double solve the position of the collider for the same overlap
756
- - Fixed issue where changing the `ex.Sprite.width` or `ex.Sprite.height` did not resize the graphic.
757
- - Fixed issue where initial Actor anchors set in the constructor were not being set in the graphics component
758
- - EventDispatcher
759
- - `EventDispatcher` - doesn't require the target object. The context of `this` is not tampered anymore.
760
- - Pointers
761
- - `PointerAbstraction` - is fixed to maintain reference
762
- -
763
-
764
- ### Updates
765
-
766
- - The following Engine's pieces: `Collision` `Graphics` `Resources` `Trigger` are updated to reflect the new EventDispatcher behavior.
767
- - Refactor camera/screen interaction to utilize transforms instead of bespoke coordinate conversion
768
- ### Changed
769
-
770
- - Updated Graphics to improve general performance
771
- - Updated the webgl primitives to make building `ex.Shader`s, `ex.VertexBuffer`s, and `ex.VertexLayout`s much easier
772
- - Broke up the internal monolithic shader into separate internal renderer plugins
773
- - Changed the debug system to separate displaying the debug position point (`game.debug.transform.showPosition = true`) and debug position label (`game.debug.transform.showPositionLabel = true`)
774
- - `ex.ColorBlindCorrector` is renamed to `ex.ColorBlindnessPostProcessor`, and `ex.ColorBlindness` is renamed to `ex.ColorBlindnessMode`
775
- - Color blindness can still be corrected or simulated:
776
- * `game.debug.colorBlindMode.correct(ex.ColorBlindnessMode.Deuteranope)`
777
- * `game.debug.colorBlindMode.simulate(ex.ColorBlindnessMode.Deuteranope)`
778
- - Excalibur now uses pre-multiplied alpha automatically, images will be unpacked into memory using `gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true)`
779
- - Excalibur FPS is now sampled over 100ms blocks, this gives a more usable fps in the stats. The sampler is available off of the engine clock `engine.clock.fpsSampler.fps`
780
- - Pointer Events:
781
- * Event types (up, down, move, etc) now all exist in 2 types `ex.Input.PointerEvent` and `ex.Input.WheelEvent`
782
- * The `stopPropagation()` method used to cancel further dispatches has been renamed to `cancel()` to match other events API.
783
- * Events no longer have a reference to the `pointer` but now have all of the same information that was availabe on the pointer `worldPos`, `screenPos`, `pagePos`
784
-
785
-
786
- ## [0.25.1] - 2021-11-05
787
-
788
- ### Added
789
-
790
- - *Experimental:* Native ES module bundle distribution in package `esm/excalibur.js` entrypoint ([#2064](https://github.com/excaliburjs/Excalibur/pull/2064))
791
- - `withEngine` utils support an aditional options parameter to override the Engine default options.
792
- - Story to show a play / pause implementation.
793
- - `ex.Animation` now support `totalDuration` that will calculate automatically each frame duration based on how many frames have.
794
- - `ex.Animation` now supports `.reverse()` to reverse the direction of play in an animation, use the `ex.Animation.direction` to inspect if the animation is playing in the `ex.AnimationDirection.Forward` direction or the `ex.AnimationDirection.Backward` direction.
795
- ### Changed
796
-
797
- - Pointer system refactored into 2 parts:
798
- * First is an ECS style system `ex.PointerSystem` that dispatches events to Entities/Actors
799
- * Second is an event receiver `ex.PointerEventReceiver` which is responsible for collecting the native browser events
800
- * The API is mostly backwards compatible breaking changes are listed in the breaking change section, event types have been simplified, and `stopPropagation()` and been renamed to `cancel()`
801
- - Internal Actions implementation converted to ECS system and component, this is a backwards compatible change with v0.25.0
802
- - `ex.ActionsSystem` and `ex.ActionsComponent` now wrap the existing `ex.ActionContext`
803
- - Actions can be shared with all entities now!
804
- - Dispatch the `hidePlayButton` on the Button Event to prevent that keep on the screen on some situations [#1431].
805
- - Revert VSCode Workbench Colors
806
-
807
- ### Deprecated
808
-
809
- - Actions `asPromise()` renamed to `toPromise()`
810
-
811
- ### Fixed
812
-
813
- - Fixed loader button position on window resize
814
- - Fixed issue with setting `ex.TileMap.z` to a value
815
- - Fixed crash in debug system if there is no collider geometry
816
- - Fixed ImageSource loading error message [#2049]
817
-
818
- ## [0.25.0] - 2021-10-03
819
-
820
- ### Breaking Changes
821
-
822
- - Actor Drawing: `ex.Actor.addDrawing`, `ex.Actor.setDrawing`, `onPostDraw()`, and `onPreDraw()` are no longer on by default and will be removed in v0.26.0, they are available behind a flag `ex.Flags.useLegacyDrawing()`
823
- - For custom drawing use the `ex.Canvas`
824
- - `ex.Actor.rx` has been renamed to `ex.Actor.angularVelocity`
825
- - Rename `ex.Edge` to `ex.EdgeCollider` and `ex.ConvexPolygon` to `ex.PolygonCollider` to avoid confusion and maintian consistency
826
- - `ex.Label` constructor now only takes the option bag constructor and the font properties have been replaced with `ex.Font`
827
- ```typescript
828
- const label = new ex.Label({
829
- text: 'My Text',
830
- x: 100,
831
- y: 100,
832
- font: new ex.Font({
833
- family: 'Consolas',
834
- size: 32
835
- })
836
- });
837
- ```
838
- - `ex.Physics.debug` properties for Debug drawing are now moved to `engine.debug.physics`, `engine.debug.collider`, and `engine.debug.body`.
839
- - Old `debugDraw(ctx: CanvasRenderingContext2D)` methods are removed.
840
- - Collision `Pair`'s are now between Collider's and not bodies
841
- - `PerlinNoise` has been removed from the core repo will now be offered as a [plugin](https://github.com/excaliburjs/excalibur-perlin)
842
- - Legacy drawing implementations are moved behind `ex.LegacyDrawing` new Graphics implemenations of `Sprite`, `SpriteSheet`, `Animation` are now the default import.
843
- - To use any of the `ex.LegacyDrawing.*` implementations you must opt-in with the `ex.Flags.useLegacyDrawing()` note: new graphics do not work in this egacy mode
844
- - Renames `CollisionResolutionStrategy.Box` collision resolution strategy to `Arcade`
845
- - Renames `CollisionResolutionStrategy.RigidBody` collision resolution strategy to `Realistic`
846
- - `Collider` is now a first class type and encapsulates what `Shape` used to be. `Collider` is no longer a member of the `Body`
847
- - `CollisionType` and `CollisionGroup` are now a member of the `Body` component, the reasoning is they define how the simulated physics body will behave in simulation.
848
- - `Timer`'s no longer automatically start when added to a `Scene`, this `Timer.start()` must be called. ([#1865](ttps://github.com/excaliburjs/Excalibur/issues/1865))
849
- - `Timer.complete` is now read-only to prevent odd bugs, use `reset()`, `stop()`, and `start()` to manipulate timers.
850
- - `Actor.actions.repeat()` and `Actor.actions.repeatForever()` now require a handler that specifies the actions to repeat. This is more clear and helps prevent bugs like #1891
851
-
852
- ```typescript
853
- const actor = new ex.Actor();
854
-
855
- actor.actions
856
- // Move up in a zig-zag by repeating 5 times
857
- .repeat((ctx) => {
858
- ctx.moveBy(10, 0, 10);
859
- ctx.moveBy(0, 10, 10);
860
- }, 5)
861
- .callMethod(() => {
862
- console.log('Done repeating!');
863
- });
864
- ```
865
-
866
- - Removes `Entity.components` as a way to access, add, and remove components
867
- - `ex.Camera.z` has been renamed to property `ex.Camera.zoom` which is the zoom factor
868
- - `ex.Camera.zoom(...)` has been renamed to function `ex.Camera.zoomOverTime()`
869
- - TileMap no longer needs registered SpriteSheets, `Sprite`'s can be added directly to `Cell`'s with `addGraphic`
870
- - The confusing `TileSprite` type is removed (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
871
- - Directly changing debug drawing by `engine.isDebug = value` has been replaced by `engine.showDebug(value)` and `engine.toggleDebug()` ([#1655](https://github.com/excaliburjs/Excalibur/issues/1655))
872
- - `UIActor` Class instances need to be replaced to `ScreenElement` (This Class it's marked as Obsolete) ([#1656](https://github.com/excaliburjs/Excalibur/issues/1656))
873
- - Switch to browser based promise, the Excalibur implementation `ex.Promise` is marked deprecated ([#994](https://github.com/excaliburjs/Excalibur/issues/994))
874
- - `DisplayMode`'s have changed ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733)) & ([#1928](https://github.com/excaliburjs/Excalibur/issues/1928)):
875
-
876
- - `DisplayMode.FitContainer` fits the screen to the available width/height in the canvas parent element, while maintaining aspect ratio and resolution
877
- - `DisplayMode.FillContainer` update the resolution and viewport dyanmically to fill the available space in the canvas parent element, DOES NOT preserve `aspectRatio`
878
- - `DisplayMode.FitScreen` fits the screen to the available browser window space, while maintaining aspect ratio and resolution
879
- - `DisplayMode.FillScreen` now does what `DisplayMode.FullScreen` used to do, the resolution and viewport dynamically adjust to fill the available space in the window, DOES NOT preserve `aspectRatio` ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
880
- - `DisplayMode.FullScreen` is now removed, use `Screen.goFullScreen()`.
881
-
882
- - `SpriteSheet` now is immutable after creation to reduce chance of bugs if you modified a public field. The following properties are read-only: `columns`, `rows`, `spWidth`, `spHeight`, `image`, `sprites` and `spacing`.
883
- - `Engine.pointerScope` now defaults to a more expected `ex.Input.PointerScope.Canvas` instead of `ex.Input.PointerScope.Document` which can cause frustrating bugs if building an HTML app with Excalibur
884
-
885
- ### Added
886
-
887
- - New property `center` to `Screen` to encapsulate screen center coordinates calculation considering zoom and device pixel ratio
888
- - New `ex.Shape.Capsule(width, height)` helper for defining capsule colliders, these are useful for ramps or jagged floor colliders.
889
- - New collision group constructor argument added to Actor`new Actor({collisionGroup: collisionGroup})`
890
- - `SpriteSheet.getSprite(x, y)` can retrieve a sprite from the SpriteSheet by x and y coordinate. For example, `getSprite(0, 0)` returns the top left sprite in the sheet.
891
- - `SpriteSheet`'s now have dimensionality with `rows` and `columns` optionally specified, if not there is always 1 row, and `sprites.length` columns
892
- - `new Actor({radius: 10})` can now take a radius parameter to help create circular actors
893
- - The `ExcaliburGraphicsContext` now supports drawing debug text
894
- - `Entity` may also now optionally have a `name`, this is useful for finding entities by name or when displaying in debug mode.
895
- - New `DebugSystem` ECS system will show debug drawing output for things toggled on/off in the `engine.debug` section, this allows for a less cluttered debug experience.
896
- - Each debug section now has a configurable color.
897
- - Turn on WebGL support with `ex.Flags.useWebGL()`
898
- - Added new helpers to `CollisionGroup` to define groups that collide with specified groups `CollisionGroup.collidesWith([groupA, groupB])`
899
- - Combine groups with `const groupAandB = CollisionGroup.combine([groupA, groupB])`
900
- - Invert a group instance `const everthingButGroupA = groupA.invert()`
901
- - Improved Collision Simulation
902
- - New ECS based `CollisionSystem` and `MotionSystem`
903
- - Rigid body's can now sleep for improved performance
904
- - Multiple contacts now supported which improves stability
905
- - Iterative solver for improved stability
906
- - Added `ColliderComponent` to hold individual `Collider` implementations like `Circle`, `Box`, or `CompositeCollider`
907
- - `Actor.collider.get()` will get the current collider
908
- - `Actor.collider.set(someCollider)` allows you to set a specific collider
909
- - New `CompositeCollider` type to combine multiple colliders together into one for an entity
910
- - Composite colliders flatten into their individual colliders in the collision system
911
- - Composite collider keeps it's internal colliders in a DynamicTree for fast `.collide` checks
912
- - New `TransformComponent` to encapsulate Entity transform, that is to say position, rotation, and scale
913
- - New `MotionComponent` to encapsulate Entity transform values changing over time like velocity and acceleration
914
- - Added multi-line support to `Text` graphics ([#1866](https://github.com/excaliburjs/Excalibur/issues/1866))
915
- - Added `TileMap` arbitrary graphics support with `.addGraphic()` ([#1862](https://github.com/excaliburjs/Excalibur/issues/1862))
916
- - Added `TileMap` row and column accessors `getRows()` and `getColumns()` ([#1859](https://github.com/excaliburjs/Excalibur/issues/1859))
917
- - Added the ability to store arbitrary data in `TileMap` cells with `Cell.data.set('key', 'value')` and `Cell.data.get('key')` ([#1861](https://github.com/excaliburjs/Excalibur/issues/1861))
918
- - Actions `moveTo()`, `moveBy()`, `easeTo()`, `scaleTo()`, and `scaleBy()` now have vector overloads
919
- - `Animation.fromSpriteSheet` will now log a warning if an index into the `SpriteSheet` is invalid ([#1856](https://github.com/excaliburjs/Excalibur/issues/1856))
920
- - `new ImageSource()` will now log a warning if an image type isn't fully supported. ([#1855](https://github.com/excaliburjs/Excalibur/issues/1855))
921
- - `Timer.start()` to explicitly start timers, and `Timer.stop()` to stop timers and "rewind" them.
922
- - `Timer.timeToNextAction` will return the milliseconds until the next action callback
923
- - `Timer.timeElapsedTowardNextAction` will return the milliseconds counted towards the next action callback
924
- - `BoundingBox` now has a method for detecting zero dimensions in width or height `hasZeroDimensions()`
925
- - `BoundingBox`'s can now by `transform`'d by a `Matrix`
926
- - Added `new Entity(components: Component[])` constructor overload to create entities with components quickly.
927
- - Added `Entity.get(type: ComponentType)` to get strongly typed components if they exist on the entity.
928
- - Added `Entity.has(type: ComponentType)` overload to check if an entity has a component of that type.
929
- - Added `Entity.hasTag(tag: string)`, `Entity.addTag(tag: string)`, and `Entity.removeTag(tag: string, force: boolean)`.
930
- - Tag `offscreen` is now added to entities that are offscreen
931
- - Added `Entity.componentAdded$` and `Entity.componentRemoved$` for observing component changes on an entity.
932
- - For child/parent entities:
933
- - Added `Entity.addChild(entity: Entity)`, `Entity.removeChild(entity: Entity)`, `Entity.removeAllChildren()` for managing child entities
934
- - Added `Entity.addTemplate(templateEntity: Entity)` for adding template entities or "prefab".
935
- - Added `Entity.parent` readonly accessor to the parent (if exists), and `Entity.unparent()` to unparent an entity.
936
- - Added `Entity.getAncestors()` is a sorted list of parents starting with the topmost parent.
937
- - Added `Entity.children` readonly accessor to the list of children.
938
- - Add the ability to press enter to start the game after loaded
939
- - Add Excalibur Feature Flag implementation for releasing experimental or preview features ([#1673](https://github.com/excaliburjs/Excalibur/issues/1673))
940
- - Color now can parse RGB/A string using Color.fromRGBString('rgb(255, 255, 255)') or Color.fromRGBString('rgb(255, 255, 255, 1)')
941
- - `DisplayMode.FitScreen` will now scale the game to fit the available space, preserving the `aspectRatio`. ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
942
- - `SpriteSheet.spacing` now accepts a structure `{ top: number, left: number, margin: number }` for custom spacing dimensions ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
943
- - `SpriteSheet.ctor` now has an overload that accepts `spacing` for consistency although the object constructor is recommended ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
944
- - Add `SpriteSheet.getSpacingDimensions()` method to retrieve calculated spacing dimensions ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
945
- - Add `KeyEvent.value?: string` which is the key value (or "typed" value) that the browser detected. For example, holding Shift and pressing 9 will have a value of `(` which is the typed character.
946
- - Add `KeyEvent.originalEvent?: KeyboardEvent` which exposes the raw keyboard event handled from the browser.
947
- - Added a new getter to GraphicsComponent.ts called currentKeys that will return the names of the graphics shown in all layers
948
- - Added a new getter to GraphicsLayer called currentKeys that will the names of the graphics shown in this layer
949
-
950
- ### Changed
951
-
952
- - `Gif` now supports new graphics component
953
- - `Algebra.ts` refactored into separate files in `Math/`
954
- - Engine/Scene refactored to make use of the new ECS world which simplifies their logic
955
- - `TileMap` now uses the built in `Collider` component instead of custom collision code.
956
- - Updates the Excalibur ECS implementation for ease of use and Excalibur draw system integration
957
- - Adds "ex." namespace to built in component types like "ex.transform"
958
- - Adds `ex.World` to encapsulate all things ECS
959
- - Adds `ex.CanvasDrawSystem` to handle all HTML Canvas 2D drawing via ECS
960
- - Updates `ex.Actor` to use new `ex.TransformComponent` and `ex.CanvasDrawComponent`
961
-
962
- ### Deprecated
963
-
964
- - `Timer.unpause()` has be deprecated in favor of `Timer.resume()` ([#1864](https://github.com/excaliburjs/Excalibur/issues/1864))
965
- - Removed UIActor Stub in favor of ScreenElement ([#1656](https://github.com/excaliburjs/Excalibur/issues/1656))
966
- - `ex.SortedList` as deprecated
967
- - `ex.Promise` is marked deprecated ([#994](https://github.com/excaliburjs/Excalibur/issues/994))
968
- - `ex.DisplayMode.Position` CSS can accomplish this task better than Excalibur ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
969
-
970
- ### Fixed
971
-
972
- - Fixed allow `ex.ColliderComponent` to not have a collider
973
- - Fixed issue where collision events were not being forwarded from individual colliders in a `ex.CompositeCollider`
974
- - Fixed issue where `ex.CompositeCollider`'s individual colliders were erroneously generating pairs
975
- - Fixed issue where `GraphicsOptions` `width/height` could not be used to define a `ex.Sprite` with equivalent `sourceView` and `destSize` ([#1863](https://github.com/excaliburjs/Excalibur/issues/1863))
976
- - Fixed issue where `ex.Scene.onActivate/onDeactivate` were called with the wrong arguments ([#1850](https://github.com/excaliburjs/Excalibur/issues/1850))
977
- - Fixed issue where no width/height argmunents to engine throws an error
978
- - Fixed issue where zero dimension image draws on the ExcaliburGraphicsContext throw an error
979
- - Fixed issue where the first scene onInitialize fires at Engine contructor time and before the "play button" clicked ([#1900](https://github.com/excaliburjs/Excalibur/issues/1900))
980
- - Fixed issue where the "play button" click was being interpreted as an input event excalibur needed to handle ([#1854](https://github.com/excaliburjs/Excalibur/issues/1854))
981
- - Fixed issue where pointer events were not firing at the ex.Engine.input.pointers level ([#1439](https://github.com/excaliburjs/Excalibur/issues/1439))
982
- - Fixed issue where pointer events propagate in an unexpected order, now they go from high z-index to low z-index ([#1922](https://github.com/excaliburjs/Excalibur/issues/1922))
983
- - Fixed issue with Raster padding which caused images to grow over time ([#1897](https://github.com/excaliburjs/Excalibur/issues/1897))
984
- - Fixed N+1 repeat/repeatForever bug ([#1891](https://github.com/excaliburjs/Excalibur/issues/1891))
985
- - Fixed repeat/repeatForever issue with `rotateTo` ([#635](https://github.com/excaliburjs/Excalibur/issues/635))
986
- - Entity update lifecycle is now called correctly
987
- - Fixed GraphicsSystem `enterviewport` and `exitviewport` event
988
- - Fixed DOM element leak when restarting games, play button elements piled up in the DOM.
989
- - Fixed issues with `ex.Sprite` not rotating/scaling correctly around the anchor (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
990
- - Optionally specify whether to draw around the anchor or not `drawAroundAnchor`
991
- - Fixed in the browser "FullScreen" api, coordinates are now correctly mapped from page space to world space ([#1734](https://github.com/excaliburjs/Excalibur/issues/1734))
992
- - Fix audio decoding bug introduced in https://github.com/excaliburjs/Excalibur/pull/1707
993
- - Fixed issue with promise resolve on double resource load ([#1434](https://github.com/excaliburjs/Excalibur/issues/1434))
994
- - Fixed Firefox bug where scaled graphics with anti-aliasing turned off are not pixelated ([#1676](https://github.com/excaliburjs/Excalibur/issues/1676))
995
- - Fixed z-index regression where actors did not respect z-index ([#1678](https://github.com/excaliburjs/Excalibur/issues/1678))
996
- - Fixed Animation flicker bug when switching to an animation ([#1636](https://github.com/excaliburjs/Excalibur/issues/1636))
997
- - Fixed `ex.Actor.easeTo` actions, they now use velocity to move Actors ([#1638](https://github.com/excaliburjs/Excalibur/issues/1638))
998
- - Fixed `Scene` constructor signature to make the `Engine` argument optional ([#1363](https://github.com/excaliburjs/Excalibur/issues/1363))
999
- - Fixed `anchor` properly of single shape `Actor` [#1535](https://github.com/excaliburjs/Excalibur/issues/1535)
1000
- - Fixed Safari bug where `Sound` resources would fail to load ([#1848](https://github.com/excaliburjs/Excalibur/issues/1848))
1001
-
1002
- <!----------------------------------------------------------------------------------------------->
1003
-
1004
- ## [0.24.5] - 2020-09-07
1005
-
1006
- ### Breaking Changes
1007
-
1008
- - [#1361] Makes use of proxies, Excalibur longer supports IE11 :boom: ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)
1009
-
1010
- ### Added
1011
-
1012
- - Adds new ECS Foundations API, which allows excalibur core behavior to be manipulated with ECS style code ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)
1013
- - Adds new `ex.Entity` & `ex.EntityManager` which represent anything that can do something in a Scene and are containers for Components
1014
- - Adds new `ex.Component` type which allows encapsulation of state on entities
1015
- - Adds new `ex.Query` & `ex.QueryManager` which allows queries over entities that match a component list
1016
- - Adds new `ex.System` type which operates on matching Entities to do some behavior in Excalibur.
1017
- - Adds new `ex.Observable` a small observable implementation for observing Entity component changes over time
1018
-
1019
- ### Fixed
1020
-
1021
- - Fixed Animation flicker bug on the first frame when using animations with scale, anchors, or rotation. ([#1636](https://github.com/excaliburjs/Excalibur/issues/1636))
1022
-
1023
- <!----------------------------------------------------------------------------------------------->
1024
-
1025
- ## [0.24.4] - 2020-09-02
1026
-
1027
- ### Added
1028
-
1029
- - Add new `ex.Screen` abstraction to manage viewport size and resolution independently and all other screen related logic. ([#1617](https://github.com/excaliburjs/Excalibur/issues/1617))
1030
- - New support for the browser fullscreen API
1031
- - Add color blind mode simulation and correction in debug object.
1032
- ([#390](https://github.com/excaliburjs/Excalibur/issues/390))
1033
- - Add `LimitCameraBoundsStrategy`, which always keeps the camera locked to within the given bounds. ([#1498](https://github.com/excaliburjs/Excalibur/issues/1498))
1034
- - Add mechanisms to manipulate the `Loader` screen. ([#1417](https://github.com/excaliburjs/Excalibur/issues/1417))
1035
- - Logo position `Loader.logoPosition`
1036
- - Play button position `Loader.playButtonPosition`
1037
- - Loading bar position `Loader.loadingBarPosition`
1038
- - Loading bar color `Loader.loadingBarColor` by default is white, but can be any excalibur `ex.Color`
1039
-
1040
- ### Changed
1041
-
1042
- - Remove usage of `mock.engine` from the tests. Use real engine instead.
1043
- - Upgrade Excalibur to TypeScript 3.9.2
1044
- - Upgrade Excalibur to Node 12 LTS
1045
-
1046
- ### Fixed
1047
-
1048
- - Fixed Loader play button markup and styles are now cleaned up after clicked ([#1431](https://github.com/excaliburjs/Excalibur/issues/1431))
1049
- - Fixed Excalibur crashing when embedded within a cross-origin IFrame ([#1151](https://github.com/excaliburjs/Excalibur/issues/1151))
1050
- - Fixed performance issue where uneccessary effect processing was occurring for opacity changes ([#1549](https://github.com/excaliburjs/Excalibur/issues/1549))
1051
- - Fixed issue when loading images from a base64 strings that would crash the loader ([#1543](https://github.com/excaliburjs/Excalibur/issues/1543))
1052
- - Fixed issue where actors that were not in scene still received pointer events ([#1555](https://github.com/excaliburjs/Excalibur/issues/1555))
1053
- - Fixed Scene initialization order when using the lifecycle overrides ([#1553](https://github.com/excaliburjs/Excalibur/issues/1553))
1054
-
1055
- <!----------------------------------------------------------------------------------------------->
1056
-
1057
- ## [0.24.0] - 2020-04-23
1058
-
1059
- ### Breaking Changes
1060
-
1061
- - Remove obsolete `.extend()` semantics in Class.ts as as well as related test cases.
1062
-
1063
- ### Added
1064
-
1065
- - Added new option for constructing bounding boxes. You can now construct with an options
1066
- object rather than only individual coordinate parameters. ([#1151](https://github.com/excaliburjs/Excalibur/issues/1151))
1067
- - Added new interface for specifying the type of the options object passed to the
1068
- bounding box constructor.
1069
- - Added the `ex.vec(x, y)` shorthand for creating vectors.
1070
- ([#1340](https://github.com/excaliburjs/Excalibur/issues/1340))
1071
- - Added new event `processed` to `Sound` that passes processed `string | AudioBuffer` data. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1072
- - Added new property `duration` to `Sound` and `AudioInstance` that exposes the track's duration in seconds when Web Audio API is used. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1073
-
1074
- ### Changed
1075
-
1076
- - Animation no longer mutate underlying sprites, instead they draw the sprite using the animations parameters. This allows more robust flipping at runtime. ([#1258](https://github.com/excaliburjs/Excalibur/issues/1258))
1077
- - Changed obsolete decorator to only log the same message 5 times. ([#1281](https://github.com/excaliburjs/Excalibur/issues/1281))
1078
- - Switched to core-js based polyfills instead of custom written ones ([#1214](https://github.com/excaliburjs/Excalibur/issues/1214))
1079
- - Updated to TypeScript@3.6.4 and node 10 LTS build
1080
- - `Sound.stop()` now always rewinds the track, even when the sound is paused. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1081
-
1082
- ### Deprecated
1083
-
1084
- - `ex.Vector.magnitude()` will be removed in `v0.25.0`, use `ex.Vector.size()`. ([#1277](https://github.com/excaliburjs/Excalibur/issues/1277))
1085
-
1086
- ### Fixed
1087
-
1088
- - Fixed Excalibur crashing when displaying both a tilemap and a zero-size actor ([#1418](https://github.com/excaliburjs/Excalibur/issues/1418))
1089
- - Fixed animation flipping behavior ([#1172](https://github.com/excaliburjs/Excalibur/issues/1172))
1090
- - Fixed actors being drawn when their opacity is 0 ([#875](https://github.com/excaliburjs/Excalibur/issues/875))
1091
- - Fixed iframe event handling, excalibur will respond to keyboard events from the top window ([#1294](https://github.com/excaliburjs/Excalibur/issues/1294))
1092
- - Fixed camera to be vector backed so `ex.Camera.x = ?` and `ex.Camera.pos.setTo(...)` both work as expected([#1299](https://github.com/excaliburjs/Excalibur/issues/1299))
1093
- - Fixed missing on/once/off signatures on `ex.Pointer` ([#1345](https://github.com/excaliburjs/Excalibur/issues/1345))
1094
- - Fixed sounds not being stopped when `Engine.stop()` is called. ([#1476](https://github.com/excaliburjs/Excalibur/pull/1476))
1095
-
1096
- <!----------------------------------------------------------------------------------------------->
1097
-
1098
- ## [0.23.0] - 2019-06-08
1099
-
1100
- ### Breaking Changes
1101
-
1102
- - `ex.Actor.scale`, `ex.Actor.sx/sy`, `ex.Actor.actions.scaleTo/scaleBy` will not work as expected with new collider implementation, set width and height directly. These features will be completely removed in v0.24.0.
1103
-
1104
- ### Added
1105
-
1106
- - New collision group implementation ([#1091](https://github.com/excaliburjs/Excalibur/issues/1091), [#862](https://github.com/excaliburjs/Excalibur/issues/862))
1107
- - New `ex.Collider` type which is the container for all collision related behavior and state. Actor is now extracted from collision.
1108
- - New interface `Clonable<T>` to indicate if an object contains a clone method
1109
- - New interface `Eventable<T>` to indicated if an object can emit and receive events
1110
- - `ex.Vector.scale` now also works with vector input
1111
- - `ex.BoundingBox.fromDimension(width: number, height: number)` can generate a bounding box from a width and height
1112
- - `ex.BoundingBox.translate(pos: Vector)` will create a new bounding box shifted by `pos`
1113
- - `ex.BoundingBox.scale(scale: Vector)` will create a new bounding box scaled by `scale`
1114
- - Added `isActor()` and `isCollider()` type guards
1115
- - Added `ex.CollisionShape.draw` collision shapes can now be drawn, actor's will use these shapes if no other drawing is specified
1116
- - Added a `getClosestLineBetween` method to `CollisionShape`'s for returning the closest line between 2 shapes ([#1071](https://github.com/excaliburjs/Excalibur/issues/1071))
1117
-
1118
- ### Changed
1119
-
1120
- - Change `ex.Actor.within` to use surface of object geometry instead of the center to make judgements ([#1071](https://github.com/excaliburjs/Excalibur/issues/1071))
1121
- - Changed `moveBy`, `rotateBy`, and `scaleBy` to operate relative to the current actor position at a speed, instead of moving to an absolute by a certain time.
1122
- - Changed event handlers in excalibur to expect non-null event objects, before `hander: (event?: GameEvent) => void` implied that event could be null. This change addresses ([#1147](https://github.com/excaliburjs/Excalibur/issues/1147)) making strict null/function checks compatible with new TypeScript.
1123
- - Changed collision system to remove actor coupling, in addition `ex.Collider` is a new type that encapsulates all collision behavior. Use `ex.Actor.body.collider` to interact with collisions in Excalibur ([#1119](https://github.com/excaliburjs/Excalibur/issues/1119))
1124
- - Add new `ex.Collider` type that is the housing for all collision related code
1125
- - The source of truth for `ex.CollisionType` is now on collider, with a convenience getter on actor
1126
- - The collision system now operates on `ex.Collider`'s not `ex.Actor`'s
1127
- - `ex.CollisionType` has been moved to a separate file outside of `Actor`
1128
- - CollisionType is switched to a string enum, style guide also updated
1129
- - `ex.CollisionPair` now operates on a pair of `ex.Colliders`'s instead of `ex.Actors`'s
1130
- - `ex.CollisionContact` now operates on a pair of `ex.Collider`'s instead of `ex.Actors`'s
1131
- - `ex.Body` has been modified to house all the physical position/transform information
1132
- - Integration has been moved from actor to `Body` as a physical concern
1133
- - `useBoxCollision` has been renamed to `useBoxCollider`
1134
- - `useCircleCollision` has been renamed to `useCircleCollider`
1135
- - `usePolygonCollision` has been renamed to `usePolygonCollider`
1136
- - `useEdgeCollision` has been renamed to `useEdgeCollider`
1137
- - Renamed `ex.CollisionArea` to `ex.CollisionShape`
1138
- - `ex.CircleArea` has been renamed to `ex.Circle`
1139
- - `ex.PolygonArea` has been renamed to `ex.ConvexPolygon`
1140
- - `ex.EdgeArea` has been renamed to `ex.Edge`
1141
- - Renamed `getWidth()` & `setWidth()` to property `width`
1142
- - Actor and BoundingBox are affected
1143
- - Renamed `getHeight()` & `setHeight()` to property `height`
1144
- - Actor and BoundingBox are affected
1145
- - Renamed `getCenter()` to the property `center`
1146
- - Actor, BoundingBox, and Cell are affected
1147
- - Renamed `getBounds()` to the property `bounds`
1148
- - Actor, Collider, and Shapes are affected
1149
- - Renamed `getRelativeBounds()` to the property `localBounds`
1150
- - Actor, Collider, and Shapes are affected
1151
- - Renamed `moi()` to the property `inertia` (moment of inertia)
1152
- - Renamed `restitution` to the property `bounciness`
1153
- - Moved `collisionType` to `Actor.body.collider.type`
1154
- - Moved `Actor.integrate` to `Actor.body.integrate`
1155
-
1156
- ### Deprecated
1157
-
1158
- - Legacy groups `ex.Group` will be removed in v0.24.0, use collision groups as a replacement [#1091](https://github.com/excaliburjs/Excalibur/issues/1091)
1159
- - Legacy collision groups off `Actor` will be removed in v0.24.0, use `Actor.body.collider.collisionGroup` [#1091](https://github.com/excaliburjs/Excalibur/issues/1091)
1160
- - Removed `NaiveCollisionBroadphase` as it was no longer used
1161
- - Renamed methods and properties will be available until `v0.24.0`
1162
- - Deprecated collision attributes on actor, use `Actor.body.collider`
1163
- - `Actor.x` & `Actor.y` will be removed in `v0.24.0` use `Actor.pos.x` & `Actor.pos.y`
1164
- - `Actor.collisionArea` will be removed in `v0.24.0` use `Actor.body.collider.shape`
1165
- - `Actor.getLeft()`, `Actor.getRight()`, `Actor.getTop()`, and `Actor.getBottom` are deprecated
1166
- - Use `Actor.body.collider.bounds.(left|right|top|bottom)`
1167
- - `Actor.getGeometry()` and `Actor.getRelativeGeometry()` are removed, use `Collider`
1168
- - Collision related properties on Actor moved to `Collider`, use `Actor.body.collider`
1169
- - `Actor.torque`
1170
- - `Actor.mass`
1171
- - `Actor.moi`
1172
- - `Actor.friction`
1173
- - `Actor.restitution`
1174
- - Collision related methods on Actor moved to `Collider`, use `Actor.body.collider` or `Actor.body.collider.bounds`
1175
- - `Actor.getSideFromIntersect(intersect)` -> `BoundingBox.sideFromIntersection`
1176
- - `Actor.collidesWithSide(actor)` -> `Actor.body.collider.bounds.intersectWithSide`
1177
- - `Actor.collides(actor)` -> `Actor.body.collider.bounds.intersect`
1178
-
1179
- ### Fixed
1180
-
1181
- - Fixed issue where leaking window/document handlers was possible when calling `ex.Engine.stop()` and `ex.Engine.start()` ([#1063](https://github.com/excaliburjs/Excalibur/issues/1120))
1182
- - Fixed wrong `Camera` and `Loader` scaling on HiDPI screens when option `suppressHiDPIScaling` is set. ([#1120](https://github.com/excaliburjs/Excalibur/issues/1120))
1183
- - Fixed polyfill application by exporting a `polyfill()` function that can be called. ([#1132](https://github.com/excaliburjs/Excalibur/issues/1132))
1184
- - Fixed `Color.lighten()` ([#1084](https://github.com/excaliburjs/Excalibur/issues/1084))
1185
-
1186
- <!----------------------------------------------------------------------------------------------->
1187
-
1188
- ## [0.22.0] - 2019-04-06
1189
-
1190
- ### Breaking Changes
1191
-
1192
- - `ex.BaseCamera` replaced with `Camera` ([#1087](https://github.com/excaliburjs/Excalibur/issues/1087))
1193
-
1194
- ### Added
1195
-
1196
- - Added `enableCanvasTransparency` property that can enable/disable canvas transparency ([#1096](https://github.com/excaliburjs/Excalibur/issues/1096))
1197
-
1198
- ### Changed
1199
-
1200
- - Upgraded Excalibur to TypeScript 3.3.3333 ([#1052](https://github.com/excaliburjs/Excalibur/issues/1052))
1201
- - Added exceptions on `SpriteSheetImpl` constructor to check if the source texture dimensions are valid ([#1108](https://github.com/excaliburjs/Excalibur/issues/1108))
1202
-
1203
- <!----------------------------------------------------------------------------------------------->
1204
-
1205
- ## [0.21.0] - 2019-02-02
1206
-
1207
- ### Added
1208
-
1209
- - Added ability to automatically convert .gif files to SpriteSheet, Animations, and Sprites ([#153](https://github.com/excaliburjs/Excalibur/issues/153))
1210
- - New `viewport` property on camera to return a world space bounding box of the current visible area ([#1078](https://github.com/excaliburjs/Excalibur/issues/1078))
1211
-
1212
- ### Changed
1213
-
1214
- - Updated `ex.Color` and `ex.Vector` constants to be static getters that return new instances each time, eliminating a common source of bugs ([#1085](https://github.com/excaliburjs/Excalibur/issues/1085))
1215
- - Remove optionality of engine in constructor of Scene and \_engine private with an underscore prefix ([#1067](https://github.com/excaliburjs/Excalibur/issues/1067))
1216
-
1217
- ### Deprecated
1218
-
1219
- - Rename `ex.BaseCamera` to `Camera`, `ex.BaseCamera` will be removed in `v0.22.0` ([#1087](https://github.com/excaliburjs/Excalibur/issues/1087))
1220
-
1221
- ### Fixed
1222
-
1223
- - Fixed issue of early offscreen culling related to zooming in and out ([#1078](https://github.com/excaliburjs/Excalibur/issues/1078))
1224
- - Fixed issue where setting `suppressPlayButton: true` blocks load in certain browsers ([#1079](https://github.com/excaliburjs/Excalibur/issues/1079))
1225
- - Fixed issue where the absence of a pointer button caused an error in the console([#1153](https://github.com/excaliburjs/Excalibur/issues/1153))
1226
-
1227
- <!----------------------------------------------------------------------------------------------->
1228
-
1229
- ## [0.20.0] - 2018-12-10
1230
-
1231
- ### Breaking Changes
1232
-
1233
- - `ex.PauseAfterLoader` removed, use `ex.Loader` instead ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1234
-
1235
- ### Added
1236
-
1237
- - Added strongly-typed `EventTypes` enum to Events.ts to avoid magic strings ([#1066](https://github.com/excaliburjs/Excalibur/issues/1066))
1238
-
1239
- ### Changed
1240
-
1241
- - Added parameter on SpriteSheet constructor so you can define how many pixels of space are between sprites ([#1058](https://github.com/excaliburjs/Excalibur/issues/1058))
1242
-
1243
- <!----------------------------------------------------------------------------------------------->
1244
-
1245
- ## [0.19.1] - 2018-10-22
1246
-
1247
- ### Fixed
1248
-
1249
- - Fixed issue where there were missing files in the dist (Loader.css, Loader.logo.png) ([#1057](https://github.com/excaliburjs/Excalibur/issues/1057))
1250
-
1251
- ## [0.19.0] - 2018-10-13
1252
-
1253
- ### Changed
1254
-
1255
- - Excalibur user documentation has now moved to [excaliburjs.com/docs](https://excaliburjs.com/docs)
1256
- - Excalibur will now prompt for user input before starting the game to be inline with the new webaudio requirements from chrome/mobile browsers ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1257
-
1258
- ### Deprecated
1259
-
1260
- - `PauseAfterLoader` for iOS in favor of new click-to-play functionality built into the default `Loader` ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1261
-
1262
- ### Fixed
1263
-
1264
- - Fixed issue where Edge web audio playback was breaking ([#1047](https://github.com/excaliburjs/Excalibur/issues/1047))
1265
- - Fixed issue where pointer events do not work in mobile ([#1044](https://github.com/excaliburjs/Excalibur/issues/1044))
1266
- - Fixed issue where iOS was not loading by including the right polyfills ([#1043](https://github.com/excaliburjs/Excalibur/issues/1043))
1267
- - Fixed issue where sprites do not work in Firefox ([#980](https://github.com/excaliburjs/Excalibur/issues/978))
1268
- - Fixed issue where collision pairs could sometimes be incorrect ([#975](https://github.com/excaliburjs/Excalibur/issues/975))
1269
- - Fixed box collision velocity resolution so that objects resting on a surface do not accumulate velocity ([#986](https://github.com/excaliburjs/Excalibur/pull/1034))
1270
-
1271
- <!----------------------------------------------------------------------------------------------->
1272
-
1273
- ## [0.18.0] - 2018-08-04
1274
-
1275
- ### Breaking Changes
1276
-
1277
- - `Sound.setVolume()` replaced with `Sound.volume`
1278
- - `Sound.setLoop()` replaced with `Sound.loop`
1279
-
1280
- ### Added
1281
-
1282
- - Add `Scene.isActorInDrawTree` method to determine if an actor is in the scene's draw tree.
1283
-
1284
- ### Fixed
1285
-
1286
- - Fixed missing `exitviewport/enterviewport` events on Actors.on/once/off signatures ([#978](https://github.com/excaliburjs/Excalibur/issues/978))
1287
- - Fix issue where Actors would not be properly added to a scene if they were removed from that scene during the same frame ([#979](https://github.com/excaliburjs/Excalibur/issues/979))
1288
-
1289
- <!----------------------------------------------------------------------------------------------->
1290
-
1291
- ## [0.17.0] - 2018-06-04
1292
-
1293
- ### Breaking Changes
1294
-
1295
- - Property scope `Pointer.actorsUnderPointer` changed to private
1296
- - `Sprite.sx` replaced with `Sprite.x`
1297
- - `Sprite.sy` replaced with `Sprite.y`
1298
- - `Sprite.swidth` replaced with `Sprite.width`
1299
- - `Sprite.sheight` replaced with `Sprite.height`
1300
-
1301
- ### Added
1302
-
1303
- - Allow timers to limit repeats to a finite number of times ([#957](https://github.com/excaliburjs/Excalibur/pull/974))
1304
- - Convenience method on Scene to determine whether it is the current scene. Scene.isCurrentScene() ([#982](https://github.com/excaliburjs/Excalibur/issues/982))
1305
- - New `PointerEvent.stopPropagation()` method added. Works the same way as (`https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation`)
1306
- ([#912](https://github.com/excaliburjs/Excalibur/issues/912))
1307
- - New `Actor.getAncestors()` method, which retrieves full array of current Actor ancestors
1308
- - Static `Actor.defaults` prop, which implements `IActorDefaults`.
1309
- - Native sound events now exposed
1310
- - `volumechange` - on playing sound volume change;
1311
- - `pause` - on playback pause;
1312
- - `stop` - on playback stop;
1313
- - `emptied` - on data cleanup(f.e. when setting new data);
1314
- - `resume` - on playback resume;
1315
- - `playbackstart` - on playback start;
1316
- - `playbackend` - on playback end;
1317
- - Added `Sound.instances` getter, which returns active tracks. Playing or paused
1318
- - Added `Sound.getTrackId(track: [[AudioInstance]])` method. Which returns id of track provided,
1319
- if it is in list of active tracks.
1320
-
1321
- ### Changed
1322
-
1323
- - Refactored Easing functions to be reversable ([#944](https://github.com/excaliburjs/Excalibur/pull/944))
1324
- - Now at creation every `Actor.anchor` prop is set to default `Actor.defaults.anchor`.
1325
- - Scene.remove(Actor) now starts the Actor.Kill event cycle ([#981](https://github.com/excaliburjs/Excalibur/issues/981))
1326
-
1327
- ### Deprecated
1328
-
1329
- - `CapturePointer.update()` method now doesn't propagate event to actor, just verifies pointer events for actor.
1330
- - Added `Sound.volume` & `Sound.loop` properties as a replacement for `Sound.setVolume()` and `Sound.setLoop()`. The methods `setVolume` and `setLoop` have been marked obsolete.
1331
-
1332
- ### Fixed
1333
-
1334
- - Added missing variable assignments to TileMapImpl constructor ([#957](https://github.com/excaliburjs/Excalibur/pull/957))
1335
- - Correct setting audio volume level from `value` to `setValueAtTime` to comply with deprecation warning in Chrome 59 ([#953](https://github.com/excaliburjs/Excalibur/pull/953))
1336
- - Force HiDPI scaling to always be at least 1 to prevent visual artifacts in some browsers
1337
- - Recalculate physics geometry when width/height change on Actor ([#948](https://github.com/excaliburjs/Excalibur/pull/948))
1338
- - Fix camera move chaining ([#944](https://github.com/excaliburjs/Excalibur/pull/944))
1339
- - Fix `pickSet(allowDuplicates: true)` now returns the proper length array with correct elements ([#977](https://github.com/excaliburjs/Excalibur/issues/977))
1340
- - `Index` export order to prevent `almond.js` from creation of corrupted modules loading order.
1341
- - `Sound.pause()` now saves correct timings.
1342
- - Fix `ex.Vector.isValid` edgecase at `Infinity` ([#1006](https://github.com/excaliburjs/Excalibur/issues/1006))
1343
-
1344
- <!----------------------------------------------------------------------------------------------->
1345
-
1346
- ## [0.16.0] - 2018-03-31
1347
-
1348
- ### Added
1349
-
1350
- - New typesafe and override safe event lifecycle overriding, all `onEventName` handlers will no longer be dangerous to override ([#582](https://github.com/excaliburjs/Excalibur/issues/582))
1351
- - New lifecycle event `onPreKill` and `onPostKill`
1352
- - SpriteSheets can now produce animations from custom sprite coordinates `SpriteSheet.getAnimationByCoords(engine, coords[], speed)` ([#918](https://github.com/excaliburjs/Excalibur/issues/918))
1353
- - Added drag and drop support for Actors ([#134](https://github.com/excaliburjs/Excalibur/issues/134))
1354
- - New Event `enter`
1355
- - New Event `leave`
1356
- - New Event `pointerenter`
1357
- - New Event `pointerleave`
1358
- - New Event `pointerdragstart`
1359
- - New Event `pointerdragend`
1360
- - New Event `pointerdragmove`
1361
- - New Event `pointerdragenter`
1362
- - New Event `pointerdragleave`
1363
- - New Class `PointerDragEvent` which extends `PointerEvent`
1364
- - New Class `GlobalCoordinates` that contains Vectors for the world, the page, and the screen.
1365
- - Added property `ICapturePointerConfig.captureDragEvents` which controls whether to emit drag events to the actor
1366
- - Added property `PointerEvent.pointer` which equals the original pointer object
1367
-
1368
- ### Deprecated
1369
-
1370
- - `Sprite.sx`, `Sprite.sy`, `Sprite.swidth`, `Sprite.sheight` have been deprecated in favor of `Sprite.x`, `Sprite.y`, `Sprite.width`, `Sprite.height` ([#918](https://github.com/excaliburjs/Excalibur/issues/918))
1371
-
1372
- ### Fixed
1373
-
1374
- - Added missing lifecycle event handlers on Actors, Triggers, Scenes, Engine, and Camera ([#582](https://github.com/excaliburjs/Excalibur/issues/582))
1375
- - Tile Maps now correctly render negative x-axis coordinates ([#904](https://github.com/excaliburjs/Excalibur/issues/904))
1376
- - Offscreen culling in HiDPI mode ([#949](https://github.com/excaliburjs/Excalibur/issues/949))
1377
- - Correct bounds check to check drawWidth/drawHeight for HiDPI
1378
- - suppressHiDPIScaling now also suppresses pixel ratio based scaling
1379
- - Extract and separate Sprite width/height from drawWidth/drawHeight to prevent context corruption ([#951](https://github.com/excaliburjs/Excalibur/pull/951))
1380
-
1381
- <!----------------------------------------------------------------------------------------------->
1382
-
1383
- ## [0.15.0] - 2018-02-16
1384
-
1385
- ### Breaking Changes
1386
-
1387
- - `LockedCamera` replaced with `BaseCamera.strategy.lockToActor`
1388
- - `SideCamera` replaced with `BaseCamera.strategy.lockToActorAxis`
1389
- - `Body.wasTouching` replaced with event type `CollisionEnd`
1390
-
1391
- ### Added
1392
-
1393
- - Option bag constructors have been added for commonly-used classes (see [Constructors.md](https://github.com/excaliburjs/Excalibur/blob/main/src/engine/Docs/Constructors.md)) ([#410](https://github.com/excaliburjs/Excalibur/issues/410))
1394
-
1395
- <!----------------------------------------------------------------------------------------------->
1396
-
1397
- ## [0.14.0] - 2017-12-02
1398
-
1399
- ### Breaking Changes
1400
-
1401
- - Triggers now have a new option bag constructor using the `ITriggerOptions` interface. ([#863](https://github.com/excaliburjs/Excalibur/issues/863)).
1402
- - `update` event replaced with `postupdate` event
1403
- - `CollisionEvent` replaced by `PreCollisionEvent`
1404
- - `getDrawWidth()` and `getDrawHeight()` replaced with the getters `drawWidth` and `drawHeight`
1405
- - `PointerEvent.x` and `PointerEvent.y` replaced with `PointerEvent.pos`
1406
-
1407
- ### Added
1408
-
1409
- - Automatic HiDPI screen detection and scaling in excalibur internals to correct blurry bitmap rendering on HiDPI screens. This feature can optionally be suppressed with `IEngineOptions.suppressHiDPIScaling`.
1410
- - Added new line utility `Line.normal()` and `Line.distanceToPoint` ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1411
- - Added new PolygonArea utility `PolygonArea.getClosestFace(point)` ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1412
- - Triggers now fire an `EnterTriggerEvent` when an actor enters the trigger, and an `ExitTriggerEvent` when an actor exits the trigger. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1413
- - Actors have a new events `CollisionStart` which when 2 actors first start colliding and `CollisionEnd` when 2 actors are no longer colliding. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1414
- - New camera strategies implementation for following targets in a scene. Allows for custom strategies to be implemented on top of some prebuilt
1415
- - `LockCameraToActorStrategy` which behaves like `LockedCamera` and can be switched on with `Camera.strategy.lockToActor(actor)`.
1416
- - `LockCameraToActorAxisStrategy` which behaves like `SideCamera` and can be switched on with `Camera.strategy.lockToActorAxis(actor, ex.Axis.X)`
1417
- - `ElasticToActorStrategy` which is a new strategy that elastically moves the camera to an actor and can be switched on with `Camera.strategy.elasticToActor(actor, cameraElasticity, cameraFriction)`
1418
- - `CircleAroundActorStrategy` which is a new strategy that will follow an actor when a certain radius from the camera focus and can be switched on with `Camera.strategy.circleAroundActor(actor)`
1419
-
1420
- ### Changed
1421
-
1422
- - `Trigger` has been rebuilt to provide a better experience
1423
- - The trigger `action` only fires when an actor enters the designated area instead of every frame of collision. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1424
- - Triggers can now draw like other Actors, but are still not visible by default ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1425
-
1426
- ### Deprecated
1427
-
1428
- - `Body.wasTouching` has been deprecated in favor of a new event type `CollisionEnd` ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1429
- - `SideCamera` and `LockedCamera` are deprecated in favor of camera strategies
1430
-
1431
- ### Fixed
1432
-
1433
- - Fixed odd jumping behavior when polygons collided with the end of an edge ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1434
-
1435
- <!----------------------------------------------------------------------------------------------->
1436
-
1437
- ## [0.13.0] - 2017-10-07
1438
-
1439
- ### Breaking Changes
1440
-
1441
- - `Scene.children` replaced with `Scene.actors`
1442
-
1443
- ### Added
1444
-
1445
- - Convenience getters implemented `halfDrawWidth`, `halfDrawHeight`, `halfCanvasWidth`, `halfCanvasHeight`, `canvasWidth`, and `canvasHeight`.
1446
- - New pause/unpause feature for timers to help with more robust pausing ([#885](https://github.com/excaliburjs/Excalibur/issues/885))
1447
- - New event listening feature to listen to events only `.once(...)` then unsubscribe automatically ([#745](https://github.com/excaliburjs/Excalibur/issues/745))
1448
- - New collision event `postcollision` to indicate if collision resolution occured ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1449
-
1450
- ### Deprecated
1451
-
1452
- - `PointerEvent.x` and `PointerEvent.y`, in favor of `PointerEvent.pos` ([#612](https://github.com/excaliburjs/Excalibur/issues/612))
1453
- - `CollisionEvent` has been deprecated in favor of the more clear `PreCollisionEvent` ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1454
- - `getDrawWidth()` and `getDrawHeight()` have been marked obsolete and changed into the getters `drawWidth` and `drawHeight` respectively in order to progressively make getters/setters consistent ([#861](https://github.com/excaliburjs/Excalibur/issues/612))
1455
-
1456
- ### Fixed
1457
-
1458
- - Fixed same instance of color potentially being shared, and thus mutated, between instance actors ([#840](https://github.com/excaliburjs/Excalibur/issues/840))
1459
- - Fixed bug where active and passive type collisions would resolve when they shouldn't in rigid body physics mode ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1460
-
1461
- <!----------------------------------------------------------------------------------------------->
1462
-
1463
- ## [0.12.0] 2017-08-12
1464
-
1465
- ### Breaking Changes
1466
-
1467
- - `CollisionType.Elastic` has been removed
1468
- - `Promises.wrap` has been replaced with `Promise.resolve`
1469
-
1470
- ### Added
1471
-
1472
- - Added new hsl and hex format options in Color.toString(format). rgb is the default to maintain backwards compatibility ([#852](https://github.com/excaliburjs/Excalibur/issues/852))
1473
-
1474
- ### Changed
1475
-
1476
- - `Animation.loop` property now to set to `true` by default ([#583](https://github.com/excaliburjs/Excalibur/issues/583))
1477
- - Added backgroundColor to engine options as part of Engine constructor ([#846](https://github.com/excaliburjs/Excalibur/issues/846))
1478
-
1479
- ### Deprecated
1480
-
1481
- - `ex.Scene.children` is now `ex.Scene.actors` ([#796](https://github.com/excaliburjs/Excalibur/issues/796))
1482
-
1483
- <!----------------------------------------------------------------------------------------------->
1484
-
1485
- ## [0.11.0] 2017-06-10
1486
-
1487
- ### Breaking Changes
1488
-
1489
- - Renamed `Utils.removeItemToArray()` to `Utils.removeItemFromArray()` ([#798](https://github.com/excaliburjs/Excalibur/issues/798/))
1490
-
1491
- ### Added
1492
-
1493
- - Added optional volume argument to `Sound.play(volume?: number)`, which will play the Audio file at anywhere from mute (`volume` is 0.0) to full volume (`volume` is 1.0). ([#801](https://github.com/excaliburjs/Excalibur/issues/801))
1494
- - Added another DisplayMode option: `DisplayMode.Position`. When this is selected as the displayMode type, the user must specify a new `position` option ([#781](https://github.com/excaliburjs/Excalibur/issues/781))
1495
- - Added a static method `distance` to the `Vector` class ([#517](https://github.com/excaliburjs/Excalibur/issues/517))
1496
- - Added `WheelEvent` event type for the `wheel` browser event, Excalibur now supports scroll wheel ([#808](https://github.com/excaliburjs/Excalibur/issues/808/))
1497
-
1498
- ### Changed
1499
-
1500
- - Camera zoom over time now returns a promise that resolves on completion ([#800](https://github.com/excaliburjs/Excalibur/issues/800))
1501
- - Edge builds have more descriptive versions now containing build number and Git commit hash (e.g. `0.10.0-alpha.105#commit`) ([#777](https://github.com/excaliburjs/Excalibur/issues/777))
1502
-
1503
- ### Fixed
1504
-
1505
- - Fixed camera zoom over time, before it did not work at all ([#800](https://github.com/excaliburjs/Excalibur/issues/800))
1506
- - Fixed semi-colon key not being detected on Firefox and Opera. ([#789](https://github.com/excaliburjs/Excalibur/issues/789))
1507
-
1508
- <!----------------------------------------------------------------------------------------------->
1509
-
1510
- ## [0.10.0] 2017-04-07
1511
-
1512
- ### Breaking Changes
1513
-
1514
- - Rename `Engine.width` and `Engine.height` to be `Engine.canvasWidth` and `Engine.canvasHeight` ([#591](https://github.com/excaliburjs/Excalibur/issues/591))
1515
- - Rename `Engine.getWidth` and `Engine.getHeight` to be `Engine.getDrawWidth` and `Engine.getDrawHeight` ([#591](https://github.com/excaliburjs/Excalibur/issues/591))
1516
- - Changed `GameEvent` to be a generic type for TypeScript, allowing strongly typing the `target` property. ([#724](https://github.com/excaliburjs/Excalibur/issue/724))
1517
- - Removed `Body.useEdgeCollision()` parameter `center` ([#724](https://github.com/excaliburjs/Excalibur/issue/724))
1518
-
1519
- ### Added
1520
-
1521
- - Added `Engine.isPaused` to retrieve the running status of Engine ([#750](https://github.com/excaliburjs/Excalibur/issues/750))
1522
- - Added `Engine.getWorldBounds` to provide a quick way to get the top left corner and bottom right corner of the screen ([#729](https://github.com/excaliburjs/Excalibur/issues/729))
1523
- - Added predraw and postdraw events to `Engine` class. These events happen when prior to and after a draw ([#744](https://github.com/excaliburjs/Excalibur/issues/744))
1524
- - Added Perlin noise generation helper `ex.PerlinGenerator` for 1d, 2d, and 3d noise, along with drawing utilities ([#491](https://github.com/excaliburjs/Excalibur/issues/491))
1525
- - Added font styles support for normal, italic, and oblique in addition to bold text support ([#563](https://github.com/excaliburjs/Excalibur/issues/563))
1526
-
1527
- ### Changed
1528
-
1529
- - Update project to use TypeScript 2.2.2 ([#762](https://github.com/excaliburjs/Excalibur/issues/762))
1530
- - Changed `Util.extend` to include `Object.assign` functionality ([#763](https://github.com/excaliburjs/Excalibur/issues/763))
1531
-
1532
- ### Fixed
1533
-
1534
- - Update the order of the affine transformations to fix bug when scaling and rotating Actors ([#770](https://github.com/excaliburjs/Excalibur/issues/770))
1535
-
1536
- <!----------------------------------------------------------------------------------------------->
1537
-
1538
- ## [0.9.0] 2017-02-09
1539
-
1540
- ### Added
1541
-
1542
- - Added `preupdate`, `postupdate`, `predraw`, `postdraw` events to TileMap
1543
- - Added `ex.Random` with seed support via Mersenne Twister algorithm ([#538](https://github.com/excaliburjs/Excalibur/issues/538))
1544
- - Added extended feature detection and reporting to `ex.Detector` ([#707](https://github.com/excaliburjs/Excalibur/issues/707))
1545
- - `ex.Detector.getBrowserFeatures()` to retrieve the support matrix of the current browser
1546
- - `ex.Detector.logBrowserFeatures()` to log the support matrix to the console (runs at startup when in Debug mode)
1547
- - Added `@obsolete` decorator to help give greater visibility to deprecated methods ([#684](https://github.com/excaliburjs/Excalibur/issues/684))
1548
- - Added better support for module loaders and TypeScript importing. See [Installation](https://excaliburjs.com/docs/installation) docs for more info. ([#606](https://github.com/excaliburjs/Excalibur/issues/606))
1549
- - Added new Excalibur example project templates ([#706](https://github.com/excaliburjs/Excalibur/issues/706), [#733](https://github.com/excaliburjs/Excalibur/issues/733)):
1550
- - [Browserify](https://github.com/excaliburjs/example-ts-browserify)
1551
- - [Webpack](https://github.com/excaliburjs/example-ts-webpack)
1552
- - [Angular2](https://github.com/excaliburjs/example-ts-angular2)
1553
- - [Universal Windows Platform (UWP)](https://github.com/excaliburjs/example-uwp)
1554
- - [Apache Cordova](https://github.com/excaliburjs/example-cordova)
1555
- - [Xamarin Forms](https://github.com/excaliburjs/example-xamarin)
1556
- - [Electron](https://github.com/excaliburjs/example-electron)
1557
- - Added `Pointer.lastPagePos`, `Pointer.lastScreenPos` and `Pointer.lastWorldPos` that store the last pointer move coordinates ([#509](https://github.com/excaliburjs/Excalibur/issues/509))
1558
-
1559
- ### Changed
1560
-
1561
- - Changed `Util.clamp` to use math libraries ([#536](https://github.com/excaliburjs/Excalibur/issues/536))
1562
- - Upgraded to TypeScript 2.1.4 ([#726](https://github.com/excaliburjs/Excalibur/issues/726))
1563
-
1564
- ### Fixed
1565
-
1566
- - Fixed Scene/Actor activation and initialization order, actors were not being initialized before scene activation causing bugs ([#661](https://github.com/excaliburjs/Excalibur/issues/661))
1567
- - Fixed bug where the engine would not load if a loader was provided without any resources ([#565](https://github.com/excaliburjs/Excalibur/issues/565))
1568
- - Fixed bug where an Actor/UIActor/TileMap added during a Timer callback would not initialize before running `draw` loop. ([#584](https://github.com/excaliburjs/Excalibur/issues/584))
1569
- - Fixed bug where on slower systems a Sprite may not be drawn on the first `draw` frame ([#748](https://github.com/excaliburjs/Excalibur/issues/748))
1570
-
1571
- <!----------------------------------------------------------------------------------------------->
1572
-
1573
- ## [0.8.0] 2016-12-04
1574
-
1575
- ### Added
1576
-
1577
- - `ex.Vector.magnitude` alias that calls `ex.Vector.distance()` to get magnitude of Vector ([#663](https://github.com/excaliburjs/Excalibur/issues/663))
1578
- - Added new `ex.Line` utilities ([#662](https://github.com/excaliburjs/Excalibur/issues/662)):
1579
- - `ex.Line.slope` for the raw slope (m) value
1580
- - `ex.Line.intercept` for the Y intercept (b) value
1581
- - `ex.Line.findPoint(x?, y?)` to find a point given an X or a Y value
1582
- - `ex.Line.hasPoint(x, y, threshold)` to determine if given point lies on the line
1583
- - Added `Vector.One` and `Vector.Half` constants ([#649](https://github.com/excaliburjs/Excalibur/issues/649))
1584
- - Added `Vector.isValid` to check for null, undefined, Infinity, or NaN vectors method as part of ([#665](https://github.com/excaliburjs/Excalibur/issues/665))
1585
- - Added `ex.Promise.resolve` and `ex.Promise.reject` static methods ([#501](https://github.com/excaliburjs/Excalibur/issues/501))
1586
- - PhantomJS based testing infrastructure to accurately test browser features such as image diffs on canvas drawing ([#521](https://github.com/excaliburjs/Excalibur/issues/521))
1587
- - Added some basic debug stat collection to Excalibur ([#97](https://github.com/excaliburjs/Excalibur/issues/97)):
1588
- - Added `ex.Engine.stats` to hold frame statistic information
1589
- - Added `ex.Engine.debug` to hold debug flags and current frame stats
1590
- - Added `preframe` and `postframe` events to `Engine` as hooks
1591
- - Added ex.Physics statistics to the Excalibur statistics collection
1592
- - Added new fast body collision detection to Excalibur to prevent fast moving objects from tunneling through other objects ([#665](https://github.com/excaliburjs/Excalibur/issues/665))
1593
- - Added DynamicTree raycast to query the scene for bounds that intersect a ray
1594
- - Added fast BoundingBox raycast test
1595
-
1596
- ### Changed
1597
-
1598
- - Internal physics names refactored to be more readable and to use names more in line with game engine terminology (explicit broadphase and narrowphase called out)
1599
-
1600
- ### Deprecated
1601
-
1602
- - `ex.Promise.wrap` ([#501](https://github.com/excaliburjs/Excalibur/issues/501))
1603
-
1604
- ### Fixed
1605
-
1606
- - Fix `Actor.oldPos` and `Actor.oldVel` values on update ([#666](https://github.com/excaliburjs/Excalibur/issues/666))
1607
- - Fix `Label.getTextWidth` returns incorrect result ([#679](https://github.com/excaliburjs/Excalibur/issues/679))
1608
- - Fix semi-transparent PNGs appear garbled ([#687](https://github.com/excaliburjs/Excalibur/issues/687))
1609
- - Fix incorrect code coverage metrics, previously our test process was reporting higher than actual code coverage ([#521](https://github.com/excaliburjs/Excalibur/issues/521))
1610
- - Fix `Actor.getBounds()` and `Actor.getRelativeBounds()` to return accurate bounding boxes based on the scale and rotation of actors. ([#692](https://github.com/excaliburjs/Excalibur/issues/692))
1611
-
1612
- <!----------------------------------------------------------------------------------------------->
1613
-
1614
- ## [0.7.1] - 2016-10-03
1615
-
1616
- ### Breaking Changes
1617
-
1618
- - Refactored and modified Sound API ([#644](https://github.com/excaliburjs/Excalibur/issues/644))
1619
- - `Sound.setData` now returns a Promise which differs from previous API
1620
- - Removed internal `FallbackAudio` and `Sound` classes and replaced with single `Sound` class
1621
- - Added `AudioTagInstance` and `WebAudioInstance` internal classes
1622
-
1623
- ### Added
1624
-
1625
- - `ex.Promise.join(Promise[])` support (in addition to `...promises` support) ([#642](https://github.com/excaliburjs/Excalibur/issues/642))
1626
- - Moved build artifacts to separate [excalibur-dist](https://github.com/excaliburjs/excalibur-dist) repository ([#648](https://github.com/excaliburjs/Excalibur/issues/648))
1627
- - `ex.Events` namespace and typed event handler `.on(...)` overloads for default events on core excalibur objects ([#639](https://github.com/excaliburjs/Excalibur/issues/639))
1628
- - `Engine.timescale` property (default: 1.0) to add time-scaling to the engine for time-based movements ([#543](https://github.com/excaliburjs/Excalibur/issues/543))
1629
- - Two new parameters to `ex.Util.DrawUtil.line` that accept a line thickness and end-cap style ([#658](https://github.com/excaliburjs/Excalibur/issues/658))
1630
-
1631
- ### Fixed
1632
-
1633
- - `Actor.actions.fade` properly supporting fading between 0 and 1 and vice versa ([#640](https://github.com/excaliburjs/Excalibur/issues/640))
1634
- - Fix issues with audio offset tracking and muting while game is invisible ([#644](https://github.com/excaliburjs/Excalibur/issues/644))
1635
- - `Actor.getHeight()` and `Actor.getWidth()` now take into account parent scaling ([#645](https://github.com/excaliburjs/Excalibur/issues/645))
1636
- - `Actor.debugDraw` now works properly for child actors ([#505](https://github.com/excaliburjs/Excalibur/issues/505), [#645](https://github.com/excaliburjs/Excalibur/issues/645))
1637
- - Sprite culling was double scaling calculations ([#646](https://github.com/excaliburjs/Excalibur/issues/646))
1638
- - Fix negative zoom sprite culling ([#539](https://github.com/excaliburjs/Excalibur/issues/539))
1639
- - Fix Actor updates happening more than once per frame, causing multiple pointer events to trigger ([#643](https://github.com/excaliburjs/Excalibur/issues/643))
1640
- - Fix `Actor.on('pointerup')` capturePointer events opt-in on event handler. The opt-in was triggering correctly for handlers on 'pointerdown' and 'pointermove', but not 'pointerup'.
1641
-
1642
- <!----------------------------------------------------------------------------------------------->
1643
-
1644
- ## [0.7.0] - 2016-08-29
1645
-
1646
- ### Breaking Changes
1647
-
1648
- - Code marked 'Obsolete' has been removed ([#625](https://github.com/excaliburjs/Excalibur/issues/625), [#603](https://github.com/excaliburjs/Excalibur/issues/603))
1649
- - `Actor`
1650
- - `addEventListener`
1651
- - `getWorldX`, `getWorldY`
1652
- - `clearActions`, `easeTo`, `moveTo`, `moveBy`, `rotateTo`, `rotateBy`, `scaleTo`, `scaleBy`, `blink`, `fade`, `delay`, `die`, `callMethod`, `asPromise`, `repeat`, `repeatForever`, `follow`, `meet`
1653
- - `Class`
1654
- - `addEventListener`, `removeEventListener`
1655
- - `Engine`
1656
- - parameterized constructor
1657
- - `addChild`, `removeChild`
1658
- - `UpdateEvent` removed
1659
- - `Scene.addChild` and `Scene.removeChild` are now protected
1660
- - Removed ex.Template and ex.Binding ([#627](https://github.com/excaliburjs/Excalibur/issues/627))
1661
-
1662
- ### Added
1663
-
1664
- - New physics system, physical properties for Actors ([#557](https://github.com/excaliburjs/Excalibur/issues/557), [#472](https://github.com/excaliburjs/Excalibur/issues/472))
1665
- - Read The Docs support for documentation ([#558](https://github.com/excaliburjs/Excalibur/issues/558))
1666
- - Continuous integration builds unstable packages and publishes them ([#567](https://github.com/excaliburjs/Excalibur/issues/567))
1667
- - Sound and Texture resources can now process data ([#574](https://github.com/excaliburjs/Excalibur/issues/574))
1668
- - Actors now throw an event when they are killed ([#585](https://github.com/excaliburjs/Excalibur/issues/585))
1669
- - "Tap to Play" button for iOS to fulfill platform audio requirements ([#262](https://github.com/excaliburjs/Excalibur/issues/262))
1670
- - Generic lerp/easing functions ([#320](https://github.com/excaliburjs/Excalibur/issues/320))
1671
- - Whitespace checking for conditional statements ([#634](https://github.com/excaliburjs/Excalibur/issues/634))
1672
- - Initial support for [Yeoman generator](https://github.com/excaliburjs/generator-excalibur) ([#578](https://github.com/excaliburjs/Excalibur/issues/578))
1673
-
1674
- ### Changed
1675
-
1676
- - Upgraded Jasmine testing framework to version 2.4 ([#126](https://github.com/excaliburjs/Excalibur/issues/126))
1677
- - Updated TypeScript to 1.8 ([#596](https://github.com/excaliburjs/Excalibur/issues/596))
1678
- - Improved contributing document ([#560](https://github.com/excaliburjs/Excalibur/issues/560))
1679
- - Improved local and global coordinate tracking for Actors ([#60](https://github.com/excaliburjs/Excalibur/issues/60))
1680
- - Updated loader image to match new logo and theme ([#615](https://github.com/excaliburjs/Excalibur/issues/615))
1681
- - Ignored additional files for Bower publishing ([#614](https://github.com/excaliburjs/Excalibur/issues/614))
1682
-
1683
- ### Fixed
1684
-
1685
- - Actions on the action context threw an error ([#564](https://github.com/excaliburjs/Excalibur/issues/564))
1686
- - Actor `getLeft()`, `getTop()`, `getBottom()` and `getRight()` did not respect anchors ([#568](https://github.com/excaliburjs/Excalibur/issues/568))
1687
- - Actor.actions.rotateTo and rotateBy were missing RotationType ([#575](https://github.com/excaliburjs/Excalibur/issues/575))
1688
- - Actors didn't behave correctly when killed and re-added to game ([#586](https://github.com/excaliburjs/Excalibur/issues/586))
1689
- - Default fontFamily for Label didn't work with custom FontSize or FontUnit ([#471](https://github.com/excaliburjs/Excalibur/issues/471))
1690
- - Fixed issues with testing sandbox ([#609](https://github.com/excaliburjs/Excalibur/issues/609))
1691
- - Issue with camera lerp ([#555](https://github.com/excaliburjs/Excalibur/issues/555))
1692
- - Issue setting initial opacity on Actors ([#511](https://github.com/excaliburjs/Excalibur/issues/511))
1693
- - Children were not being updated by their parent Actors ([#616](https://github.com/excaliburjs/Excalibur/issues/616))
1694
- - Center-anchored Actors were not drawn at the correct canvas coordinates when scaled ([#618](https://github.com/excaliburjs/Excalibur/issues/618))
1695
-
1696
- <!----------------------------------------------------------------------------------------------->
1697
-
1698
- ## [0.6.0] - 2016-01-19
1699
-
1700
- ### Added
1701
-
1702
- - GamePads now have a connection event ([#473](https://github.com/excaliburjs/Excalibur/issues/473))
1703
- - Unit circle drawing for debug mode ([#467](https://github.com/excaliburjs/Excalibur/issues/467))
1704
- - Engine now fails gracefully in unsupported browsers ([#386](https://github.com/excaliburjs/Excalibur/issues/386))
1705
- - Global fatal error catching ([#381](https://github.com/excaliburjs/Excalibur/issues/381))
1706
- - MockEngine for testing ([#360](https://github.com/excaliburjs/Excalibur/issues/360))
1707
- - Code coverage reports via Coveralls ([#169](https://github.com/excaliburjs/Excalibur/issues/169))
1708
- - SpriteFonts now support different target colors ([#148](https://github.com/excaliburjs/Excalibur/issues/148))
1709
- - Cameras now have position, velocity, and acceleration properties ([#490](https://github.com/excaliburjs/Excalibur/issues/490))
1710
-
1711
- ### Changed
1712
-
1713
- - `Actor.addChild()` changed to `Actor.add()` ([#519](https://github.com/excaliburjs/Excalibur/issues/519))
1714
- - `Actor.removeChild()` changed to `Actor.remove()` ([#519](https://github.com/excaliburjs/Excalibur/issues/519))
1715
- - Documentation is only deployed on changes to the main git branch ([#483](https://github.com/excaliburjs/Excalibur/issues/483))
1716
- - A warning message is now displayed if no supported audio format is provided for a browser ([#476](https://github.com/excaliburjs/Excalibur/issues/476))
1717
- - Updated TSLint directory scanning ([#442](https://github.com/excaliburjs/Excalibur/issues/442), [#443](https://github.com/excaliburjs/Excalibur/issues/443), [#447](https://github.com/excaliburjs/Excalibur/issues/447))
1718
- - Deprecated older methods ([#399](https://github.com/excaliburjs/Excalibur/issues/399))
1719
- - Changed API for Key events ([#502](https://github.com/excaliburjs/Excalibur/issues/502))
1720
-
1721
- ### Fixed
1722
-
1723
- - Actors now properly collide with TileMaps ([#541](https://github.com/excaliburjs/Excalibur/issues/541))
1724
- - Gamepad detection is fixed ([#460](https://github.com/excaliburjs/Excalibur/issues/460), [#518](https://github.com/excaliburjs/Excalibur/issues/518))
1725
- - Actor scale now correctly occurs after translation ([#514](https://github.com/excaliburjs/Excalibur/issues/514))
1726
- - Actors now respect the `visible` property of their children ([#513](https://github.com/excaliburjs/Excalibur/issues/513))
1727
- - Fixed centered sprite drawing on Actors ([#507](https://github.com/excaliburjs/Excalibur/issues/507))
1728
- - Animation `freezeframe` is now properly set to last Animation frame by default ([#506](https://github.com/excaliburjs/Excalibur/issues/506))
1729
- - It is no longer possible to add the same Actor to a scene multiple times ([#504](https://github.com/excaliburjs/Excalibur/issues/504))
1730
- - Text alignment on SpriteFonts with Labels is fixed ([#484](https://github.com/excaliburjs/Excalibur/issues/484))
1731
- - Engine pointer events properly fire when a camera is zoomed ([#480](https://github.com/excaliburjs/Excalibur/issues/480))
1732
- - Fixed a small bug in rotateTo ([#469](https://github.com/excaliburjs/Excalibur/issues/469))
1733
- - Setting Label colors now works ([#468](https://github.com/excaliburjs/Excalibur/issues/468))
1734
- - Labels now respect set font ([#372](https://github.com/excaliburjs/Excalibur/issues/372))
1735
- - UIActor now respects visibility ([#368](https://github.com/excaliburjs/Excalibur/issues/368))
1736
- - Solid color Actors now respect opacity ([#364](https://github.com/excaliburjs/Excalibur/issues/364))
1737
- - TileMap culling uses proper width and height values ([#293](https://github.com/excaliburjs/Excalibur/issues/293))
1738
- - Font API changed while fixing font size issue
1739
-
1740
- <!----------------------------------------------------------------------------------------------->
1741
-
1742
- ## [0.5.1] - 2015-06-26
1743
-
1744
- ### Added
1745
-
1746
- - Actors can now recursively check the containment of their children ([#453](https://github.com/excaliburjs/Excalibur/issues/453))
1747
- - `RotateTo` and `RotateBy` now support ShortestPath, LongestPath, Clockwise, and Counterclockwise rotation ([#461](https://github.com/excaliburjs/Excalibur/issues/461))
1748
-
1749
- ### Fixed
1750
-
1751
- - `Actor.contains()` did not work for child actors ([#147](https://github.com/excaliburjs/Excalibur/issues/147))
1752
- - Unexpected placement occasionally occurred for Actors with certain collision types ([#319](https://github.com/excaliburjs/Excalibur/issues/319))
1753
- - Velocity wasn’t updating properly when fixed and active Actors collided ([#454](https://github.com/excaliburjs/Excalibur/issues/454))
1754
- - Actors removed with actor.kill() were not being removed from the draw tree ([#458](https://github.com/excaliburjs/Excalibur/issues/458))
1755
- - `RotateTo` and `RotateBy` weren’t using the shortest angle by default ([#282](https://github.com/excaliburjs/Excalibur/issues/282))
1756
- - Sprite width and height didn’t take scaling into account ([#437](https://github.com/excaliburjs/Excalibur/issues/437))
1757
- - Fixed error message when calling `Actor.setDrawing()` on a non-existent key ([#456](https://github.com/excaliburjs/Excalibur/issues/456))
1758
-
1759
- <!----------------------------------------------------------------------------------------------->
1760
-
1761
- ## [0.5.0] - 2015-06-03
1762
-
1763
- ### Added
1764
-
1765
- - resource cache busting ([#280](https://github.com/excaliburjs/Excalibur/issues/280))
1766
- - HTML5 Gamepad API support ([#15](https://github.com/excaliburjs/Excalibur/issues/15))
1767
- - Browserify support ([#312](https://github.com/excaliburjs/Excalibur/issues/312))
1768
- - ‘blur’ and ‘visible’ events to detect when the browser window a game is in has focus ([#385](https://github.com/excaliburjs/Excalibur/issues/385))
1769
- - Z-index support for Actors, allowing for specific ordered drawing ([#356](https://github.com/excaliburjs/Excalibur/issues/356))
1770
- - unlocked drawing for UI elements ([#354](https://github.com/excaliburjs/Excalibur/issues/354))
1771
- - `Promise.join()` to return a new promise when promises passed to it have been resolved ([#341](https://github.com/excaliburjs/Excalibur/issues/341), [#340](https://github.com/excaliburjs/Excalibur/issues/340))
1772
- - ability to skip a frame in an animation ([#313](https://github.com/excaliburjs/Excalibur/issues/313))
1773
- - You can now remove effects from `IDrawable` objects ([#303](https://github.com/excaliburjs/Excalibur/issues/303))
1774
- - generic `Resource` type to allow for XHR loading ([#297](https://github.com/excaliburjs/Excalibur/issues/297))
1775
- - gray `Color` constants ([#209](https://github.com/excaliburjs/Excalibur/issues/209))
1776
-
1777
- ### Changed
1778
-
1779
- - Renamed `engine.addChild()` to `engine.add()` ([#288](https://github.com/excaliburjs/Excalibur/issues/288))
1780
- - Renamed `setSpriteTransformationPoint()` to `setAnchor()` ([#269](https://github.com/excaliburjs/Excalibur/issues/269))
1781
- - Renamed `TopCamera` to `LockedCamera` ([#184](https://github.com/excaliburjs/Excalibur/issues/184))
1782
- - Renamed `Actor.pipeline` to `Actor.traits` ([#351](https://github.com/excaliburjs/Excalibur/issues/351))
1783
- - Actor anchoring now uses center origin by default ([#299](https://github.com/excaliburjs/Excalibur/issues/299))
1784
- - Actor updates (movement, collision, etc.) now use a pipeline ([#330](https://github.com/excaliburjs/Excalibur/issues/330))
1785
- - Organized classes, files, and project structure ([#182](https://github.com/excaliburjs/Excalibur/issues/182), [#347](https://github.com/excaliburjs/Excalibur/issues/347))
1786
- - Improvements to collision detection ([#345](https://github.com/excaliburjs/Excalibur/issues/345), [#332](https://github.com/excaliburjs/Excalibur/issues/332))
1787
- - Loop optimizations for performance improvements ([#296](https://github.com/excaliburjs/Excalibur/issues/296))
1788
- - Updated to TypeScript 1.4 ([#393](https://github.com/excaliburjs/Excalibur/issues/393))
1789
- - Improved pointer event handling so touch and mouse events can be captured together ([#334](https://github.com/excaliburjs/Excalibur/issues/334))
1790
- - Improved `Point` and `Vector` methods and rotation ([#323](https://github.com/excaliburjs/Excalibur/issues/323), [#302](https://github.com/excaliburjs/Excalibur/issues/302))
1791
- - `Color` is now treated as a vector to allow for changes ([#298](https://github.com/excaliburjs/Excalibur/issues/298))
1792
- - Cleaned up event type consistency ([#273](https://github.com/excaliburjs/Excalibur/issues/273))
1793
- - There is now a default instance of a `Camera` ([#270](https://github.com/excaliburjs/Excalibur/issues/270))
1794
- - TSLint now used to enforce code quality
1795
-
1796
- ### Fixed
1797
-
1798
- - A Sprite’s dimensions weren’t validated against the size of its texture ([#318](https://github.com/excaliburjs/Excalibur/issues/318))
1799
- - Improved sprite drawing performance issues ([#316](https://github.com/excaliburjs/Excalibur/issues/316))
1800
- - Actors were sometimes throwing duplicate collision events ([#284](https://github.com/excaliburjs/Excalibur/issues/284))
1801
- - Actors were not setting their initial opacity correctly ([#307](https://github.com/excaliburjs/Excalibur/issues/307))
1802
- - Particle emitters couldn’t emit less than 60 particles per second ([#301](https://github.com/excaliburjs/Excalibur/issues/301))
1803
- - Fixed issue with TileMap collisions ([#286](https://github.com/excaliburjs/Excalibur/issues/286))
1804
- - Animations with duplicate frames weren’t being created correctly ([#283](https://github.com/excaliburjs/Excalibur/issues/283))
1805
- - Separated drawing and collision logic for CollisionMaps (now TileMap) ([#285](https://github.com/excaliburjs/Excalibur/issues/285))
1806
- - Errors in promises were being swallowed if no error callback was supplied ([#337](https://github.com/excaliburjs/Excalibur/issues/337))
1807
- - A null promise was being returned if no loader was given to `Engine.start()` ([#335](https://github.com/excaliburjs/Excalibur/issues/335))
1808
- - Changed default collisionType to ‘PreventCollision’ ([#324](https://github.com/excaliburjs/Excalibur/issues/324))
1809
- - Color didn’t handle alpha = 0 correctly ([#257](https://github.com/excaliburjs/Excalibur/issues/257))
1810
- - Blink action usage was confusing ([#279](https://github.com/excaliburjs/Excalibur/issues/279))
1811
- - Couldn’t use the `width` and `height` properties of a Texture after it loaded ([#355](https://github.com/excaliburjs/Excalibur/issues/355))
1812
- - Using `on(‘pointerdown’)` would not automatically enable pointer capturing ([#398](https://github.com/excaliburjs/Excalibur/issues/398))
1813
- - Unsubscribing from an event sometimes removed other event handlers ([#366](https://github.com/excaliburjs/Excalibur/issues/366))
1814
- - `Actor.setCenterDrawing()` was hard-coded to true ([#375](https://github.com/excaliburjs/Excalibur/issues/375))
1815
- - Console was undefined in IE9. ([#378](https://github.com/excaliburjs/Excalibur/issues/378))
1816
- - Pointers were not handling mobile Safari touch events ([#382](https://github.com/excaliburjs/Excalibur/issues/382))
1817
- - Fixed debug mode drawing ([#274](https://github.com/excaliburjs/Excalibur/issues/274))
1818
- - Flipping a sprite didn’t factor in scaling ([#401](https://github.com/excaliburjs/Excalibur/issues/401))
1819
- - Sound continued to play when the game was paused ([#383](https://github.com/excaliburjs/Excalibur/issues/383))
1820
- - `UIActor.kill()` didn’t remove the actor ([#373](https://github.com/excaliburjs/Excalibur/issues/373))
1821
- - Passing an empty array to `ex.Promise.join` resulted in unresolved promises ([#365](https://github.com/excaliburjs/Excalibur/issues/365))
1822
- - MouseUp / TouchEnd events weren’t capture correctly if outside of canvas ([#374](https://github.com/excaliburjs/Excalibur/issues/374))
1823
- - Clearing actions from an empty action queue caused problems ([#409](https://github.com/excaliburjs/Excalibur/issues/409))
1824
- - `Scene.onActivate()` was being called before Scene.onInitialize() ([#418](https://github.com/excaliburjs/Excalibur/issues/418))
1825
- - New z-indexing wasn’t cleaning up after itself ([#433](https://github.com/excaliburjs/Excalibur/issues/433))
1826
- - Fixed issue with world / screen coordinates in UIActors ([#371](https://github.com/excaliburjs/Excalibur/issues/371))
1827
- - Fade action didn’t work for text ([#261](https://github.com/excaliburjs/Excalibur/issues/261))
1828
- - Fade action didn’t work for plain-color actors ([#256](https://github.com/excaliburjs/Excalibur/issues/256))
1829
- - Collision events weren’t being published for both collision participants ([#254](https://github.com/excaliburjs/Excalibur/issues/254))
1830
- - The loading bar was misrepresenting the time taken to decode audio files ([#106](https://github.com/excaliburjs/Excalibur/issues/106))
1831
- - `actor.getCenter()` wasn’t returning the correct value ([#438](https://github.com/excaliburjs/Excalibur/issues/438))
1832
- - Cameras were on the engine instead of the scene, resulting in scene transition problems ([#277](https://github.com/excaliburjs/Excalibur/issues/277))
1833
- - Actors with sprites larger than the actor would disappear prematurely from the screen ([#287](https://github.com/excaliburjs/Excalibur/issues/287))
1834
- - Derived classes can now use offscreen culling ([#294](https://github.com/excaliburjs/Excalibur/issues/294))
1835
- - Fixed issue with TileMap culling ([#444](https://github.com/excaliburjs/Excalibur/issues/444))
1836
-
1837
- <!----------------------------------------------------------------------------------------------->
1838
-
1839
- ## [0.2.2] - 2014-04-15
1840
-
1841
- ### Fixed
1842
-
1843
- - Removed extra declarations file from package that was causing visual studio build problems
1844
-
1845
- <!----------------------------------------------------------------------------------------------->
1846
-
1847
- ## [0.2.0] - 2014-04-09
1848
-
1849
- ### Added
1850
-
1851
- - Visual Studio 2013 template support ([#139](https://github.com/excaliburjs/Excalibur/issues/139))
1852
- - Collision Map for building large static collidable levels ([#33](https://github.com/excaliburjs/Excalibur/issues/33))
1853
- - Redundant fallback sound sources for cross browser support ([#125](https://github.com/excaliburjs/Excalibur/issues/125))
1854
- - Particle Emitter implementation ([#52](https://github.com/excaliburjs/Excalibur/issues/52))
1855
- - Trigger implementation ([#91](https://github.com/excaliburjs/Excalibur/issues/91))
1856
- - Timer implementation ([#76](https://github.com/excaliburjs/Excalibur/issues/76))
1857
- - Camera Effects: zoom, shake ([#55](https://github.com/excaliburjs/Excalibur/issues/55))
1858
- - Polygon IDrawable ([#93](https://github.com/excaliburjs/Excalibur/issues/93))
1859
- - Alias 'on' and 'off' for 'addEventListener' and 'removeEventListener' ([#229](https://github.com/excaliburjs/Excalibur/issues/229))
1860
- - Optimized draw so only on screen elements are drawn ([#239](https://github.com/excaliburjs/Excalibur/issues/239))
1861
- - Support Scale in the x and y directions for actors ([#118](https://github.com/excaliburjs/Excalibur/issues/118))
1862
- - Added notion of collision grouping ([#100](https://github.com/excaliburjs/Excalibur/issues/100))
1863
- - New Events like 'enterviewport', 'exitviewport', and 'initialize' ([#215](https://github.com/excaliburjs/Excalibur/issues/215), [#224](https://github.com/excaliburjs/Excalibur/issues/224))
1864
- - Textures allow direct pixel manipulation ([#155](https://github.com/excaliburjs/Excalibur/issues/155))
1865
- - Static Logger improvements with '.debug()', '.info()', '.warn()' and '.error()' ([#81](https://github.com/excaliburjs/Excalibur/issues/81))
1866
- - Added callMethod() action to actor ([#244](https://github.com/excaliburjs/Excalibur/issues/244))
1867
- - Added fade() action to actor ([#104](https://github.com/excaliburjs/Excalibur/issues/104))
1868
- - Added follow() and meet() action to actor ([#77](https://github.com/excaliburjs/Excalibur/issues/77))
1869
-
1870
- ### Changed
1871
-
1872
- - 'engine.goToScene()' replaces push and pop ([#168](https://github.com/excaliburjs/Excalibur/issues/168))
1873
- - More intuitive starting workflow ([#149](https://github.com/excaliburjs/Excalibur/issues/149))
1874
- - Collisions are now more concrete on actors with CollisionType ([#241](https://github.com/excaliburjs/Excalibur/issues/241))
1875
- - Namespace all types with 'ex' to prevent Excalibur from polluting the global ([#87](https://github.com/excaliburjs/Excalibur/issues/87))
1876
- - Refactor SceneNode to Scene ([#135](https://github.com/excaliburjs/Excalibur/issues/135))
1877
- - Refactor keys ([#115](https://github.com/excaliburjs/Excalibur/issues/115))
1878
- - Build system with Grunt ([#92](https://github.com/excaliburjs/Excalibur/issues/92))
1879
-
1880
- ### Fixed
1881
-
1882
- - Collision event was firing after other actor has been killed ([#228](https://github.com/excaliburjs/Excalibur/issues/228))
1883
- - Additional actor was killed when actor.kill() is called ([#226](https://github.com/excaliburjs/Excalibur/issues/226))
1884
- - Fixed loading bar ([#195](https://github.com/excaliburjs/Excalibur/issues/195))
1885
- - ex.Color.Yellow constant was wrong ([#122](https://github.com/excaliburjs/Excalibur/issues/122))
1886
- - removeEventListener did not exist off of engine ([#175](https://github.com/excaliburjs/Excalibur/issues/175))
1887
- - Excalibur promises should not swallow exceptions in promise callbacks ([#176](https://github.com/excaliburjs/Excalibur/issues/176))
1888
- - Actor.extend did not work on actor subclasses ([#103](https://github.com/excaliburjs/Excalibur/issues/103))
1889
-
1890
- <!----------------------------------------------------------------------------------------------->
1891
-
1892
- ## [0.1.1] - 2013-12-19
1893
-
1894
- ### Changed
1895
-
1896
- - Refactored Keys to be less confusing ([#115](https://github.com/excaliburjs/Excalibur/issues/115))
1897
- - Refactored ActorEvent to be less confusing ([#113](https://github.com/excaliburjs/Excalibur/issues/113))
1898
-
1899
- ### Fixed
1900
-
1901
- - 'update' event on the Engine now fires correctly ([#105](https://github.com/excaliburjs/Excalibur/issues/105))
1902
- - Actor.extend works on subclasses now ([#103](https://github.com/excaliburjs/Excalibur/issues/103))
1903
-
1904
- <!----------------------------------------------------------------------------------------------->
1905
-
1906
- ## 0.1.0 - 2013-12-11
1907
-
1908
- ### Added
1909
-
1910
- - Actor based paradigm for managing game objects
1911
- - Built-in scripting for actors, allowing objects to move, rotate, blink, scale, and repeat actions
1912
- - Entity-entity collision detection
1913
- - Event support to react to events happening in the game
1914
- - Camera abstraction to easily think about the view port
1915
- - Multiple display modes including fixed size, full screen, and dynamic container
1916
- - Scene stack support to create multiple game levels
1917
- - Sprite sheet and animation support
1918
- - Simple sound library for game audio, supporting the Web Audio API and the HTML Audio API
1919
- - Promise implementation for managing asynchronous behavior
1920
- - Resource loading with optional custom progress bars
1921
-
1922
- <!----------------------------------------------------------------------------------------------->
1923
-
1924
- [unreleased]: https://github.com/excaliburjs/Excalibur/compare/v0.25.1...HEAD
1925
- [0.25.1]: https://github.com/excaliburjs/Excalibur/compare/v0.25.0...v0.25.1
1926
- [0.25.0]: https://github.com/excaliburjs/Excalibur/compare/v0.24.5...v0.25.0
1927
- [0.24.5]: https://github.com/excaliburjs/Excalibur/compare/v0.24.4...v0.24.5
1928
- [0.24.4]: https://github.com/excaliburjs/Excalibur/compare/v0.24.0...v0.24.4
1929
- [0.24.0]: https://github.com/excaliburjs/Excalibur/compare/v0.23.0...v0.24.0
1930
- [0.23.0]: https://github.com/excaliburjs/Excalibur/compare/v0.22.0...v0.23.0
1931
- [0.22.0]: https://github.com/excaliburjs/Excalibur/compare/v0.21.0...v0.22.0
1932
- [0.21.0]: https://github.com/excaliburjs/Excalibur/compare/v0.20.0...v0.21.0
1933
- [0.20.0]: https://github.com/excaliburjs/Excalibur/compare/v0.19.1...v0.20.0
1934
- [0.19.1]: https://github.com/excaliburjs/Excalibur/compare/v0.19.0...v0.19.1
1935
- [0.19.0]: https://github.com/excaliburjs/Excalibur/compare/v0.18.0...v0.19.0
1936
- [0.18.0]: https://github.com/excaliburjs/Excalibur/compare/v0.17.0...v0.18.0
1937
- [0.17.0]: https://github.com/excaliburjs/Excalibur/compare/v0.16.0...v0.17.0
1938
- [0.16.0]: https://github.com/excaliburjs/Excalibur/compare/v0.15.0...v0.16.0
1939
- [0.15.0]: https://github.com/excaliburjs/Excalibur/compare/v0.14.0...v0.15.0
1940
- [0.14.0]: https://github.com/excaliburjs/Excalibur/compare/v0.13.0...v0.14.0
1941
- [0.13.0]: https://github.com/excaliburjs/Excalibur/compare/v0.12.0...v0.13.0
1942
- [0.12.0]: https://github.com/excaliburjs/Excalibur/compare/v0.11.0...v0.12.0
1943
- [0.11.0]: https://github.com/excaliburjs/Excalibur/compare/v0.10.0...v0.11.0
1944
- [0.10.0]: https://github.com/excaliburjs/Excalibur/compare/v0.9.0...v0.10.0
1945
- [0.9.0]: https://github.com/excaliburjs/Excalibur/compare/v0.8.0...v0.9.0
1946
- [0.8.0]: https://github.com/excaliburjs/Excalibur/compare/v0.7.1...v0.8.0
1947
- [0.7.1]: https://github.com/excaliburjs/Excalibur/compare/v0.7.0...v0.7.1
1948
- [0.7.0]: https://github.com/excaliburjs/Excalibur/compare/v0.6.0...v0.7.0
1949
- [0.6.0]: https://github.com/excaliburjs/Excalibur/compare/v0.5.1...v0.6.0
1950
- [0.5.1]: https://github.com/excaliburjs/Excalibur/compare/v0.5.0...v0.5.1
1951
- [0.5.0]: https://github.com/excaliburjs/Excalibur/compare/v0.2.2...v0.5.0
1952
- [0.2.2]: https://github.com/excaliburjs/Excalibur/compare/v0.2.0...v0.2.2
1953
- [0.2.0]: https://github.com/excaliburjs/Excalibur/compare/v0.1.1...v0.2.0
1954
- [0.1.1]: https://github.com/excaliburjs/Excalibur/compare/v0.1...v0.1.1
1955
- [//]: # 'https://github.com/olivierlacan/keep-a-changelog'
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ This project adheres to [Semantic Versioning](http://semver.org/).
5
+
6
+ ## [Unreleased]
7
+
8
+ ### Breaking Changes
9
+
10
+ -
11
+
12
+ ### Deprecated
13
+
14
+ -
15
+
16
+ ### Added
17
+
18
+ -
19
+
20
+
21
+ ### Fixed
22
+
23
+ -
24
+
25
+ ### Updates
26
+
27
+ -
28
+
29
+ ### Changed
30
+
31
+ -
32
+
33
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
34
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
35
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
36
+
37
+ # Change Log
38
+
39
+ All notable changes to this project will be documented in this file.
40
+ This project adheres to [Semantic Versioning](http://semver.org/).
41
+
42
+ ## [v0.28.4]
43
+
44
+ ### Breaking Changes
45
+
46
+ -
47
+
48
+ ### Deprecated
49
+
50
+ -
51
+
52
+ ### Added
53
+
54
+ - Ability to configure TileMap debug drawing with the `ex.Engine.debug.tilemap` property.
55
+ - Materials have a new convenience method for updating uniforms
56
+ ```typescript
57
+ game.input.pointers.primary.on('move', evt => {
58
+ heartActor.pos = evt.worldPos;
59
+ swirlMaterial.update(shader => {
60
+ shader.trySetUniformFloatVector('iMouse', evt.worldPos);
61
+ });
62
+ });
63
+ ```
64
+
65
+
66
+ ### Fixed
67
+
68
+ - Fixed issue where TileMap solid tiles tile packing algorithm would incorrectly merge tiles in certain situations.
69
+ - Sprite tint was not respected when supplied in the constructor, this has been fixed!
70
+ - Adjusted the `FontCache` font timeout to 400 ms and makes it configurable as a static `FontCache.FONT_TIMEOUT`. This is to help prevent a downward spiral on mobile devices that might take a long while to render a few starting frames causing the cache to repeatedly clear and never recover.
71
+
72
+ ### Updates
73
+
74
+ - Materials can now reference a new uniform for the screen texture and a screen uv attribute in their fragment shaders
75
+ * `u_screen_texture` - This is the texture of the screen right before the material draw call
76
+ * `a_screenuv` - The vertex attribute corresponding to the screen uv relative to the current graphic
77
+ * `v_screenuv` - The fragment varying corresponding to the screen uv relative to the current graphic
78
+
79
+ - Materials can now reference the current time in their shaders
80
+ * `u_time_ms` - This is the ms since page navigation (performance.now() under the hood)
81
+
82
+ ### Changed
83
+
84
+ - TileMap debug draw is now less verbose by default to save draw cycles when toggling to debug
85
+
86
+ ## [v0.28.3]
87
+
88
+ ### Breaking Changes
89
+
90
+ -
91
+
92
+ ### Deprecated
93
+
94
+ -
95
+
96
+ ### Added
97
+
98
+ - Added new feature to collision group raycasting, directly provide a `collisionMask` that you want to search for.
99
+
100
+ ```typescript
101
+ const playerGroup = ex.CollisionGroupManager.create('playerGroup');
102
+ const notPlayersMask = ~playersGroup.category;
103
+ const hits = engine.currentScene.physics.rayCast(
104
+ new ex.Ray(player.pos, playerDir),
105
+ {
106
+ maxDistance: playerSightDistance,
107
+ // Search for all categories that match the mask
108
+ collisionMask: notPlayers,
109
+ searchAllColliders: false
110
+ });
111
+ ```
112
+
113
+
114
+ ### Fixed
115
+
116
+ - Fixed issue where rendering multiple materials at once would crash the renderer
117
+ - Fixed issue where raycasting with more complex collision groups was not working as expected
118
+
119
+ ### Updates
120
+
121
+ -
122
+
123
+ ### Changed
124
+
125
+ -
126
+
127
+ ## [v0.28.2]
128
+
129
+ ### Breaking Changes
130
+
131
+ -
132
+
133
+ ### Deprecated
134
+
135
+ -
136
+
137
+ ### Added
138
+
139
+ - Added `ex.Engine.version` to report the current excalibur version build string
140
+ - Added new `ex.Screen.events`
141
+ - `screen.events.on('resize', (evt) => )` Will emit when the screen is resized
142
+ - `screen.events.on('fullscreen', (evt) => )` Will emit when the screen is changed into browser fullscreen mode
143
+ - `screen.events.on('pixelratio', (evt) => )` Will emit when the screen's pixel ratio changes (moving from a hidpi screen to a non, or vice versa)
144
+
145
+ ### Fixed
146
+
147
+ - Fixed issue where removing handlers by function reference only removed the first registered one
148
+ - Fixed issue where play button was hidden when going fullscreen mode
149
+ - Fixed issue where screen resizing caused artifacts on the loading screen
150
+ - Fixed bug in `useCanvas2DFallback()` where `antialiasing` settings could be lost
151
+ - Fixed bug in `useCanvas2DFallback()` where opacity was not respected in `save
152
+ - Fixed typo in trigger event signature `entertrigger` should have been `enter`
153
+ - Fixed typo in trigger event signature `exittrigger` should have been `exit`
154
+ - Fixed typo in animation event signature `ended` should have been `end`
155
+ - Fixed issue where some excalibur `clear()` implementations modified the collection they were iterating over
156
+ - Fixed async issue where sound could not be stopped if `stop()`/`start()` were called in rapid succession
157
+ - Fixed issue with input mapper where `keyboard.wasPressed(...)` did not fire
158
+ - Fixed issue issue where TileMaps would not properly draw Tiles when setup in screen space coordinates
159
+ - Fixed issue where the ex.Line graphics bounds were incorrect causing erroneous offscreen culling
160
+ - Fixed event type signature on `ex.Engine.input.pointers.primary.on('wheel', ...)` for wheel events
161
+
162
+ ### Updates
163
+
164
+ - Improved performance in TileMaps when drawing tiles using QuadTree data structure
165
+
166
+ ### Changed
167
+
168
+ - Changed the canvas 2d fallback default, no longer is enabled by default. Developers must opt in.
169
+ - Allow entity names to be set after construction! Entities will now default to a name "Entity#1234" followed by an id.
170
+
171
+ ## [v0.28.0]
172
+
173
+ ### Breaking Changes
174
+
175
+ - Removed `ex.Class` base class type, this was a common base class for many excalibur types that provided old on/off event functionality. This functionality has been preserved on the types that had it before using `ex.EventEmitter`
176
+
177
+ ### Deprecated
178
+
179
+ - The `ex.Input.*` import site is deprecated, will be removed in v0.29.0. All the imports are still available on `ex.` now
180
+ - [[ex.Input.Gamepad]] `isButtonPressed` has been renamed to `isButtonHeld`
181
+ - `ex.EventDispatcher` is marked deprecated, will eventually be removed in v0.29.0
182
+
183
+
184
+ ### Added
185
+
186
+ - Added new `ex.InputMapper` for mapping multiple input sources into actions! This can be useful for providing accessibility into your games and allowing users to map inputs to different game commands.
187
+ ```typescript
188
+ const moveRight = (amount: number) => { actor.vel.x = 100 * amount }
189
+ const moveLeft = (amount: number) => { actor.vel.x = -100 * amount }
190
+ const moveUp = (amount: number) => { actor.vel.y = -100 * amount }
191
+ const moveDown = (amount: number) => { actor.vel.y = 100 * amount }
192
+ engine.inputMapper.on(({keyboard}) => keyboard.isHeld(ex.Keys.ArrowRight) ? 1 : 0, moveRight);
193
+ engine.inputMapper.on(({gamepads}) => gamepads.at(0).isButtonPressed(ex.Buttons.DpadRight) ? 1 : 0, moveRight);
194
+ engine.inputMapper.on(({gamepads}) => gamepads.at(0).getAxes(ex.Axes.LeftStickX) > 0 ? gamepads.at(0).getAxes(ex.Axes.LeftStickX) : 0, moveRight);
195
+ ```
196
+ - Added strongly typed events with `ex.EventEmitter<TEventMap>`
197
+ - Added new convenience properties for flipping all the graphics on an Actor
198
+ * `ex.Actor.graphics.flipHorizontal` - Flips all the graphics horizontally
199
+ * `ex.Actor.graphics.flipVertical` - Flips all the graphics vertically
200
+ - Added new `ex.Scene.transfer(actor)` method for transferring actors between scenes, useful if you want to only have an actor in 1 scene at a time.
201
+ - Added new `ex.Material` to add custom shaders per `ex.Actor`!
202
+ * This feature cant be applied using the `ex.Actor.graphics.material = material` property or by setting the material property on the `ex.ExcaliburGraphicsContext.material = material` with `.save()/.restore()`
203
+ * This feature opt out of batch rendering and issues a separate draw call
204
+ * A custom vertex shader can be provided, otherwise a default will be provided
205
+ * A number of default uniforms are available to shaders
206
+ * Pre-built varyings:
207
+ * `in vec2 v_uv` - UV coordinate
208
+ * Pre-built uniforms:
209
+ * `uniform sampler2D u_graphic` - The current graphic displayed by the GraphicsComponent
210
+ * `uniform vec2 u_resolution` - The current resolution of the screen
211
+ * `uniform vec2 u_size;` - The current size of the graphic
212
+ * `uniform vec4 u_color` - The current color of the material
213
+ * `uniform float u_opacity` - The current opacity of the graphics context
214
+ ```typescript
215
+ const material = new ex.Material({
216
+ name: 'test',
217
+ color: ex.Color.Red,
218
+ fragmentSource: `#version 300 es
219
+ precision mediump float;
220
+ // UV coord
221
+ in vec2 v_uv;
222
+ uniform sampler2D u_graphic;
223
+ uniform vec4 u_color;
224
+ uniform float u_opacity;
225
+ out vec4 fragColor;
226
+ void main() {
227
+ vec4 color = u_color;
228
+ color = texture(u_graphic, v_uv);
229
+ color.rgb = color.rgb * u_opacity;
230
+ color.a = color.a * u_opacity;
231
+ fragColor = color * u_color;
232
+ }`
233
+ });
234
+ ```
235
+ - Added updates to `ex.PostProcessor`
236
+ * New optional `ex.PostProcessor.onUpdate` hook for updating custom uniforms
237
+ * Added default uniforms that are automatically added
238
+ * `uniform float u_time_ms` - total playback time in milliseconds
239
+ * `uniform float u_elapsed_ms` - the elapsed time from the last frame in milliseconds
240
+ * `uniform vec2 u_resolution` - the resolution of the canvas (in pixels)
241
+
242
+ - Added new helper called `ex.Animation.fromSpriteSheetCoordinates` to help build animations more tersely from SpriteSheets
243
+ ```typescript
244
+ const spriteSheet = SpriteSheet.fromImageSource({...});
245
+ const anim = Animation.fromSpriteSheetCoordinates({
246
+ spriteSheet,
247
+ frameCoordinates: [
248
+ {x: 0, y: 5, duration: 100},
249
+ {x: 1, y: 5, duration: 200},
250
+ {x: 2, y: 5, duration: 100},
251
+ {x: 3, y: 5, duration: 500}
252
+ ],
253
+ strategy: AnimationStrategy.PingPong
254
+ });
255
+ ```
256
+
257
+ - Added new `FrameEvent` to `ex.Animation` which includes the frame index of the current frame!
258
+ ```typescript
259
+ const anim = new Animation();
260
+
261
+ // TS autocompletes the handler
262
+ anim.on('frame', (frame: FrameEvent) => {
263
+ // Do stuff on frame
264
+ });
265
+ ```
266
+
267
+ - Added new typed `ex.EventEmitter` which will eventually replace the old `ex.EventDispatcher`, this gives users a way of strongly typing the possible events that can be emitted using a type map. This is loosely typed you can still emit any event you want, you only get type completion suggestions for the type map.
268
+ ```typescript
269
+ export type AnimationEvents = {
270
+ frame: FrameEvent;
271
+ loop: Animation;
272
+ ended: Animation;
273
+ };
274
+
275
+ export class Animation {
276
+ public events = new EventEmitter<AnimationEvents>();
277
+ ...
278
+ }
279
+
280
+ const anim = new Animation();
281
+
282
+ // TS autocompletes the handler
283
+ anim.on('frame', (frame: FrameEvent) => {
284
+ // Do stuff on frame
285
+ });
286
+ ```
287
+
288
+ - Added ability to perform arbitrary ray casts into `ex.Scene`, the `ex.PhysicsWorld` can be passed a variety of options to influence the types of ray cast hits that
289
+ are returned
290
+ ```typescript
291
+ const engine = new ex.Engine({...});
292
+ const enemyGroup = ex.CollisionGroupManager.create('enemy');
293
+ const ray = new ex.Ray(ex.vec(0, 0), ex.Vector.Right);
294
+ const hits = engine.currentScene.physics.rayCast(ray, {
295
+ /**
296
+ * Optionally specify to search for all colliders that intersect the ray cast, not just the first which is the default
297
+ */
298
+ searchAllColliders: true,
299
+ /**
300
+ * Optionally specify the maximum distance in pixels to ray cast, default is Infinity
301
+ */
302
+ maxDistance: 100,
303
+ /**
304
+ * Optionally specify a collision group to consider in the ray cast, default is All
305
+ */
306
+ collisionGroup: enemyGroup
307
+ });
308
+
309
+ ```
310
+ - Added word-wrap support for `ex.Text` using the optional parameter `maxWidth`
311
+ - Added the emitted particle transform style as part of `ex.ParticleEmitter({particleTransform: ex.ParticleTransform.Global})`, [[ParticleTransform.Global]] is the default and emits particles as if they were world space objects, useful for most effects. If set to [[ParticleTransform.Local]] particles are children of the emitter and move relative to the emitter as they would in a parent/child actor relationship.
312
+ - Added `wasButtonReleased` and `wasButtonPressed` methods to [[ex.Input.Gamepad]]
313
+ - Added `clone()` method to `ex.SpriteSheet`
314
+
315
+ ### Fixed
316
+
317
+ - Fixed issue with `ex.TileMap` collider consolidation where custom colliders would prevent normal solid tile colliders from being included.
318
+ - Fixed memory leak in the internal `ex.EntityManager`, it did not properly clear internal state when removing entities
319
+ - Fixed issue where scaling a `ex.TileMap` didn't properly offscreen cull due to the bounds not scaling properly.
320
+ - Fixed issue where `ex.Text.flipHorizontal` or `ex.Text.flipVertical` would not work
321
+ - Fixed issue where overriding existing components did not work properly because of deferred component removal
322
+ - Fixed issue where `ex.ScreenElement` pointer events were not working by default.
323
+ - Fixed issue where setting lineWidth on `ex.Circle` was not accounted for in the bitmap
324
+ - Fixed issue in macos where the meta key would prevent keyup's from firing correctly
325
+ - Fixed issue when excalibur was hosted in a x-origin iframe, the engine will grab window focus by default if in an iframe. This can be suppressed with `new ex.Engine({grabWindowFocus: false})`
326
+ - Fixed issue where `ex.Camera.rotation = ...` did not work to rotate the camera, also addressed offscreen culling issues that were revealed by this fix.
327
+ - Fixed issue where the `ex.ScreenElement` anchor was not being accounted for properly when passed as a constructor parameter.
328
+ - Fixed issue where you could not use multiple instances of Excalibur on the same page, you can now have as many Excalibur's as you want (up to the webgl context limit).
329
+ - Fixed issue where `ex.ScreenElement` would log a warning when created without a height or width
330
+ - Fixed issue where `ex.Sound` would get confused parsing and playing sound files with a querystring in their path
331
+ - Fixed issue where `ex.ColliderComponent` was not deeply cloning the stored `ex.Collider` causing them to be shared across clones.
332
+ - Fixed issue where `ex.GraphicsComponent` was not deeploy cloning the
333
+ stored `ex.Graphics` causing them to be shared across clones.
334
+ - Fixed issue where `Actor.clone()` and `Entity.clone()` crashed.
335
+ - Fixed issue where zero mtv collisions cause erroneous precollision events to be fired in the `ArcadeSolver` and `RealisticSolver`
336
+ - Fixed issue where calling `.kill()` on a child entity would not remove it from the parent `Entity`
337
+ - Fixed issue where calling `.removeAllChildren()` would not remove all the children from the parent `Entity`
338
+ - Fixed issue where world origin was inconsistent when the using `ex.DisplayMode.FitScreenAndFill` when the screen was resized.
339
+ - Fixed issue where context opacity was not respected when set in a `preDraw`
340
+ - Fixed issue where `ex.Sound.loop` was not working, and switching tab visibility would cause odd behavior with looping `ex.Sound`
341
+ - Fixed issue where adding a `ex.ParticleEmitter` as a child did not position particles according to the parent
342
+ - Fixed issue where screenshots from `ex.Engine.screenshot()` did not match the smoothing set on the engine.
343
+ - Fixed incorrect event type returned when `ex.Actor.on('postupdate', (event) => {...})`.
344
+ - Fixed issue where using numerous `ex.Text` instances would cause Excalibur to crash webgl by implementing a global font cache.
345
+ - Fixed issue where child entities did not inherit the scene from their parent
346
+ - Fixed issue where `ex.Font` would become corrupted when re-used by multiple `ex.Text` instances
347
+ - Fixed `engine.on('visible')` event not firing
348
+ - Fixed `EventDispatcher.emit` converting falsy values to `ex.GameEvent`. It will only convert `undefined` or `null` values now.
349
+
350
+ ### Updates
351
+
352
+ -
353
+
354
+ ### Changed
355
+
356
+ - Excalibur will now use `ex.EventEmitter` to broadcast events, Excalibur types that have events support will also have an `.events` member.
357
+ - Excalibur resources by default no longer add cache busting query string to resources. All built in resources now expose a `bustCache` property to allow setting this before loading, for example `ex.Sound.bustCache`.
358
+
359
+
360
+ ## [0.27.0] - 2022-07-08
361
+
362
+ ### Breaking Changes
363
+
364
+ - `ex.Engine.snapToPixel` now defaults to `false`, it was unexpected to have pixel snapping on by default it has now been switched.
365
+ - The `ex.Physics.useRealisticPhysics()` physics solver has been updated to fix a bug in bounciness to be more physically accurate, this does change how physics behaves. Setting `ex.Body.bounciness = 0` will simulate the old behavior.
366
+ - `ex.TransformComponent.posChanged$` has been removed, it incurs a steep performance cost
367
+ - `ex.EventDispatcher` meta events 'subscribe' and 'unsubscribe' were unused and undocumented and have been removed
368
+ - `ex.TileMap` tlies are now drawn from the lower left by default to match with `ex.IsometricMap` and Tiled, but can be configured with `renderFromTopOfGraphic` to restore the previous behavior.
369
+ - Scene `onActivate` and `onDeactivate` methods have been changed to receive a single parameter, an object containing the `previousScene`, `nextScene`, and optional `data` passed in from `goToScene()`
370
+
371
+ ### Deprecated
372
+
373
+ -
374
+
375
+ ### Added
376
+ - Added new configurable `ex.TileMap` option for rendering from the bottom or the top of the graphic, this matches with `ex.IsometricMap` and how Tiled renders `renderFromTopOfGraphic`, by default `false` and renders from the bottom.
377
+ ```typescript
378
+ const tileMap = new ex.TileMap({
379
+ renderFromTopOfGraphic: false
380
+ })
381
+ ```
382
+ - Added new `ex.Future` type which is a convenient way of wrapping a native browser promise and resolving/rejecting later
383
+ ```typescript
384
+ const future = new ex.Future();
385
+ const promise = future.promise; // returns promise
386
+ promise.then(() => {
387
+ console.log('Resolved!');
388
+ });
389
+ future.resolve(); // resolved promise
390
+ ```
391
+ - Added new `ex.Semaphore` type to limit the number of concurrent cans in a section of code, this is used internally to work around a chrome browser limitation, but can be useful for throttling network calls or even async game events.
392
+ ```typescript
393
+ const semaphore = new ex.Semaphore(10); // Only allow 10 concurrent between enter() and exit()
394
+ ...
395
+
396
+ await semaphore.enter();
397
+ await methodToBeLimited();
398
+ semaphore.exit();
399
+ ```
400
+ - Added new `ex.WatchVector` type that can observe changes to x/y more efficiently than `ex.watch()`
401
+ - Added performance improvements
402
+ * `ex.Vector.distance` improvement
403
+ * `ex.BoundingBox.transform` improvement
404
+ - Added ability to clone `ex.Vector.clone(destVector)` into a destination vector
405
+ - Added new `ex.Transform` type that is a light weight container for transformation data. This logic has been extracted from the `ex.TransformComponent`, this makes it easy to pass `ex.Transform`s around. Additionally the extracted `ex.Transform` logic has been refactored for performance.
406
+ - Added new `ex.AffineMatrix` that is meant for 2D affine transformations, it uses less memory and performs less calculations than the `ex.Matrix` which uses a 4x4 Float32 matrix.
407
+ - Added new fixed update step to Excalibur! This allows developers to configure a fixed FPS for the update loop. One advantage of setting a fix update is that you will have a more consistent and predictable physics simulation. Excalibur graphics will be interpolated automatically to avoid any jitter in the fixed update.
408
+ * If the fixed update FPS is greater than the display FPS, excalibur will run multiple updates in a row (at the configured update elapsed) to catch up, for example there could be X updates and 1 draw each clock step.
409
+ * If the fixed update FPS is less than the display FPS, excalibur will skip updates until it meets the desired FPS, for example there could be no update for 1 draw each clock step.
410
+ ```typescript
411
+ const game = new ex.Engine({
412
+ fixedUpdateFps: 20 // 20 fps fixed update, or a fixed update delta of 50 milliseconds
413
+ });
414
+ // turn off interpolation on a per actor basis
415
+ const actor = new ex.Actor({...});
416
+ actor.body.enableFixedUpdateInterpolate = false;
417
+ game.add(game);
418
+ ```
419
+
420
+ - Allowed setting playback `ex.Sound.duration` which will limit the amount of time that a clip plays from the current playback position.
421
+ - Added a new lightweight `ex.StateMachine` type for building finite state machines
422
+ ```typescript
423
+ const machine = ex.StateMachine.create({
424
+ start: 'STOPPED',
425
+ states: {
426
+ PLAYING: {
427
+ onEnter: () => {
428
+ console.log("playing");
429
+ },
430
+ transitions: ['STOPPED', 'PAUSED']
431
+ },
432
+ STOPPED: {
433
+ onEnter: () => {
434
+ console.log("stopped");
435
+ },
436
+ transitions: ['PLAYING', 'SEEK']
437
+ },
438
+ SEEK: {
439
+ transitions: ['*']
440
+ },
441
+ PAUSED: {
442
+ onEnter: () => {
443
+ console.log("paused")
444
+ },
445
+ transitions: ['PLAYING', 'STOPPED']
446
+ }
447
+ }
448
+ });
449
+ ```
450
+ - Added `ex.Sound.seek(positionInSeconds)` which will allow you to see to a place in the sound, this will implicitly pause the sound
451
+ - Added `ex.Sound.getTotalPlaybackDuration()` which will return the total time in the sound in seconds.
452
+ - Allow tinting of `ex.Sprite`'s by setting a new `tint` property, renderers must support the tint property in order to function.
453
+ ```typescript
454
+ const imageSource = new ex.ImageSource('./path/to/image.png');
455
+ await imageSource.load();
456
+ const sprite = imageSource.toSprite();
457
+ sprite.tint = ex.Color.Red;
458
+ ```
459
+ - Added `ex.Sound.getPlaybackPosition()` which returns the current playback position in seconds of the currently playing sound.
460
+ - Added `ex.Sound.playbackRate` which allows developers to get/set the current rate of playback. 1.0 is the default playback rate, 2.0 is twice the speed, and 0.5 is half speed.
461
+ - Added missing `ex.EaseBy` action type, uses `ex.EasingFunctions` to move relative from the current entity position.
462
+ - Added 2 new `Action` types to enable running parallel actions. `ex.ActionSequence` which allows developers to specify a sequence of actions to run in order, and `ex.ParallelActions` to run multiple actions at the same time.
463
+ ```typescript
464
+ const actor = new ex.Actor();
465
+ const parallel = new ex.ParallelActions([
466
+ new ex.ActionSequence(actor, ctx => ctx.moveTo(ex.vec(100, 0), 100)),
467
+ new ex.ActionSequence(actor, ctx => ctx.rotateTo(Math.PI/2, Math.PI/2))
468
+ ]);
469
+ actor.actions.runAction(parallel);
470
+ // actor will now move to (100, 100) and rotate to Math.PI/2 at the same time!!
471
+ ```
472
+ - Add target element id to `ex.Screen.goFullScreen('some-element-id')` to influence the fullscreen element in the fullscreen browser API.
473
+ - Added optional `data` parameter to `goToScene`, which gets passed to the target scene's `onActivate` method.
474
+ ```typescript
475
+ class SceneA extends ex.Scene {
476
+ /* ... */
477
+
478
+ onActivate(context: ex.SceneActivationContext<{ foo: string }>) {
479
+ console.log(context.data.foo); // bar
480
+ }
481
+ }
482
+
483
+ engine.goToScene('sceneA', { foo: 'bar' })
484
+ ```
485
+ - Added the ability to select variable duration into Timer constructor.
486
+ ```typescript
487
+ const random = new ex.Random(1337);
488
+ const timer = new ex.Timer({
489
+ random,
490
+ interval: 500,
491
+ randomRange: [0, 500]
492
+ })
493
+ ```
494
+
495
+ ### Fixed
496
+
497
+ - Fixed issue with `ex.Canvas` and `ex.Raster` graphics that forced their dimensions to the next highest power of two.
498
+ - Fixed issue with `ex.Engine.snapToPixel` where positions very close to pixel boundary created jarring 1 pixel oscillations.
499
+ - Fixed bug where a deferred `goToScene` would preserve the incorrect scene so `engine.add(someActor)` would place actors in the wrong scene after transitioning to another.
500
+ - Fixed usability issue and log warning if the `ex.ImageSource` is not loaded and a draw was attempted.
501
+ - Fixed bug in `ex.Physics.useRealisticPhysics()` solver where `ex.Body.bounciness` was not being respected in the simulation
502
+ - Fixed bug in `ex.Physics.useRealisticPhysics()` solver where `ex.Body.limitDegreeOfFreedom` was not working all the time.
503
+ - Fixed bug in `Clock.schedule` where callbacks would not fire at the correct time, this was because it was scheduling using browser time and not the clock's internal time.
504
+ - Fixed issue in Chromium browsers where Excalibur crashes if more than 256 `Image.decode()` calls are happening in the same frame.
505
+ - Fixed issue where `ex.EdgeCollider` were not working properly in `ex.CompositeCollider` for `ex.TileMap`'s
506
+ - Fixed issue where `ex.BoundingBox` overlap return false due to floating point rounding error causing multiple collisions to be evaluated sometimes
507
+ - Fixed issue with `ex.EventDispatcher` where removing a handler that didn't already exist would remove another handler by mistake
508
+ - Fixed issue with `ex.EventDispatcher` where concurrent modifications of the handler list where handlers would or would not fire correctly and throw
509
+ - Tweak to the `ex.ArcadeSolver` to produce more stable results by adjusting by an infinitesimal epsilon
510
+ - Contacts with overlap smaller than the epsilon are ignored
511
+ - Colliders with bounds that overlap smaller than the epsilon are ignored
512
+ - Fixed issue with `ex.ArcadeSolver` based collisions where colliders were catching on seams when sliding along a floor of multiple colliders. This was by sorting contacts by distance between bodies.
513
+ ![sorted-collisions](https://user-images.githubusercontent.com/612071/172401390-9e9c3490-3566-47bf-b258-6a7da86a3464.gif)
514
+
515
+ - Fixed issue with `ex.ArcadeSolver` where corner contacts would zero out velocity even if the bodies were already moving away from the contact "divergent contacts".
516
+ ![cancel-velocity-fix](https://user-images.githubusercontent.com/612071/172500318-539f3a36-31ae-4efc-b6ab-c4524b297adb.gif)
517
+
518
+ - Fixed issue where `ex.Sound` wasn't being paused when the browser window lost focus
519
+
520
+ ### Updates
521
+
522
+ - Updated the collision system to improve performance
523
+ * Cache computed values where possible
524
+ * Avoid calculating transformations until absolutely necessary
525
+ * Avoid calling methods in tight loops
526
+
527
+ ### Changed
528
+
529
+ - `ex.Engine.configurePerformanceCanvas2DFallback` no longer requires `threshold` or `showPlayerMessage`
530
+ - `ex.Engine.snapToPixel` now defaults to `false`
531
+ - Most places where `ex.Matrix` was used have been switched to `ex.AffineMatrix`
532
+ - Most places where `ex.TransformComponent` was used have been switched to `ex.Transform`
533
+
534
+ ## [0.26.0] - 2022-05-20
535
+
536
+ ### Breaking Changes
537
+
538
+ - `ex.Line` has be replaced with a new Graphics type, the old geometric behavior is now under the type `ex.LineSegment`
539
+ - Notable deprecated types removed
540
+ - `ex.SortedList` old sorted list is removed
541
+ - `ex.Collection` old collection type is removed
542
+ - `ex.Util` import site, exported code promoted `ex.*`
543
+ - `ex.DisplayMode.Position` is removed, use CSS to position the canvas
544
+ - `ex.Trait` interface, traits are not longer supported
545
+ - `ex.Promises` old promise implementation is removed in favor of browser promises
546
+ - Notable method & property removals
547
+ - `ex.Actor`
548
+ * `.getZIndex()` and `.setZIndex()` removed use `.z`
549
+ - `ex.Scene`
550
+ * `.screenElements` removed in favor of `.entities`
551
+ * `.addScreenElement(...)` removed use `.add(...)`
552
+ * `.addTileMap(...)` removed use `.add(...)`
553
+ * `.removeTileMap(...)` removed use `.remove(...)`
554
+ - `ex.Timer`
555
+ * `.unpause()` removed use `.resume()`
556
+ - `ex.Camera`
557
+ * `.rx` removed use `.angularVelocity`
558
+ - `ex.BodyComponent`
559
+ * `.sx` removed use `.scaleFactor`
560
+ * `.rx` removed use `.angularVelocity`
561
+ - `ex.ActionsComponent`
562
+ * `.asPromise()` removed use `.toPromise()`
563
+ - `ex.ActionContext`
564
+ * `.asPromise()` removed use `.toPromise()`
565
+ - `ex.Color`
566
+ * Misspellings corrected
567
+ - The old drawing API had been removed from excalibur, this should not affect you unless you were using the `ex.Flags.useLegacyDrawing()` or `ex.Flags.useCanvasGraphicsContext()`.
568
+ - Notably all implementations of `Drawable` are removed, use the new `Graphics` API
569
+ - Methods on actor `ex.Actor.setDrawing(...)`, `ex.Actor.addDrawing(...)` are removed, use the `ex.Actor.graphics.add(...)`, `ex.Actor.graphics.show(...)` and `ex.Actor.graphics.use(...)`
570
+ - The `ex.Actor.onPreDraw(...)` and `ex.Actor.onPostDraw(...)` are removed, use `ex.Actor.graphics.onPreDraw(...)` and `ex.Actor.graphics.onPostDraw(...)`
571
+ - The events `predraw` and `postdraw` are removed
572
+ - `ex.Scene.onPreDraw()` and `ex.Scene.onPostDraw()` are now called with the `ExcaliburGraphicsContext` instead of an `CanvasRenderingContext2D`
573
+ - `ex.TileMap` has several breaking changes around naming, but brings it consistent with Tiled terminology and the new `ex.IsometricMap`. Additionally the new names are easier to follow.
574
+ - Constructor has been changed to the following
575
+ ```typescript
576
+ new ex.TileMap({
577
+ pos: ex.vec(100, 100),
578
+ tileWidth: 64,
579
+ tileHeight: 48,
580
+ rows: 20,
581
+ columns: 20
582
+ });
583
+ ```
584
+ - `ex.Cell` has been renamed to `ex.Tile`
585
+ - `ex.Tile` now uses `addGraphic(...)`, `removeGraphic(...)`, `clearGraphics()` and `getGraphics()` instead of having an accessible `ex.Tile.graphics` array.
586
+ - `ex.TileMap.data` has been renamed to `ex.TileMap.tiles`
587
+ - `ex.TileMap.getCell(..)` has been renamed to `ex.TileMap.getTile(...)`
588
+ - `ex.TileMap.getCellByIndex(...)` has been renamed to `ex.TileMap.getTileByIndex(...)`
589
+ - `ex.TileMap.getCellByPoint(...)` has been renamed to `ex.TileMap.getTileByPoint(...)`
590
+
591
+
592
+ ### Deprecated
593
+
594
+ -
595
+
596
+ ### Added
597
+
598
+ - Added new parameter to `ex.Raster({quality: 4})` to specify the internal scaling for the bitmap, this is useful for improving the rendering quality of small rasters due to sampling error.
599
+ - Added new `ex.Line` graphics object for drawing lines!
600
+ ```typescript
601
+ const lineActor = new ex.Actor({
602
+ pos: ex.vec(100, 0)
603
+ });
604
+ lineActor.graphics.anchor = ex.Vector.Zero;
605
+ lineActor.graphics.use(new ex.Line({
606
+ start: ex.vec(0, 0),
607
+ end: ex.vec(200, 200),
608
+ color: ex.Color.Green,
609
+ thickness: 10
610
+ }));
611
+ game.add(lineActor);
612
+ ```
613
+ - Added new performance fallback configuration to `ex.Engine` for developers to help players experiencing poor performance in non-standard browser configurations
614
+ * This will fallback to the Canvas2D rendering graphics context which usually performs better on non hardware accelerated browsers, currently postprocessing effects are unavailable in this fallback.
615
+ * By default if a game is running at 20fps or lower for 100 frames or more after the game has started it will be triggered, the developer can optionally show a player message that is off by default.
616
+ ```typescript
617
+ var game = new ex.Engine({
618
+ ...
619
+ configurePerformanceCanvas2DFallback: {
620
+ allow: true, // opt-out of the fallback
621
+ showPlayerMessage: true, // opt-in to a player pop-up message
622
+ threshold: { fps: 20, numberOfFrames: 100 } // configure the threshold to trigger the fallback
623
+ }
624
+ });
625
+ ```
626
+ - Added new `ex.ParallaxComponent` for creating parallax effects on the graphics, entities with this component are drawn differently and a collider will not be where you expect. It is not recommended you use colliders with parallax entities.
627
+ ```typescript
628
+ const actor = new ex.Actor();
629
+ // The actor will be drawn shifted based on the camera position scaled by the parallax factor
630
+ actor.addComponent(new ParallaxComponent(ex.vec(0.5, 0.5)));
631
+ ```
632
+ - Added feature to build `SpriteSheet`s from a list of different sized source views using `ex.SpriteSheet.fromImageSourceWithSourceViews(...)`
633
+ ```typescript
634
+ const ss = ex.SpriteSheet.fromImageSourceWithSourceViews({
635
+ image,
636
+ sourceViews: [
637
+ {x: 0, y: 0, width: 20, height: 30},
638
+ {x: 20, y: 0, width: 40, height: 50},
639
+ ]
640
+ });
641
+ ```
642
+ - Added draw call sorting `new ex.Engine({useDrawSorting: true})` to efficiently draw render plugins in batches to avoid expensive renderer switching as much as possible. By default this is turned on, but can be opted out of.
643
+ - Added the ability to clone into a target `Matrix` this is useful to save allocations and in turn garbage collection pauses.
644
+ - `ex.Engine` now support setting the pixel ratio in the constructor `new ex.Engine({pixelRatio: 2})`, this is useful for smooth `ex.Text` rendering when `antialiasing: false` and rendering pixel art type graphics
645
+ - `ex.TileMap` now supports per Tile custom colliders!
646
+ ```typescript
647
+ const tileMap = new ex.TileMap(...);
648
+ const tile = tileMap.getTile(0, 0);
649
+ tile.solid = true;
650
+ tile.addCollider(...); // add your custom collider!
651
+ ```
652
+ - New `ex.IsometricMap` for drawing isometric grids! (They also support custom colliders via the same mechanism as `ex.TileMap`)
653
+ ```typescript
654
+ new ex.IsometricMap({
655
+ pos: ex.vec(250, 10),
656
+ tileWidth: 32,
657
+ tileHeight: 16,
658
+ columns: 15,
659
+ rows: 15
660
+ });
661
+ ```
662
+ - `ex.IsometricTile` now come with a `ex.IsometricEntityComponent` which can be applied to any entity that needs to be correctly sorted to preserve the isometric illusion
663
+ - `ex.IsometricEntitySystem` generates a new z-index based on the `elevation` and y position of an entity with `ex.IsometricEntityComponent`
664
+
665
+ - Added arbitrary non-convex polygon support (only non-self intersecting) with `ex.PolygonCollider(...).triangulate()` which builds a new `ex.CompositeCollider` composed of triangles.
666
+ - Added faster `ex.BoundingBox.transform(...)` implementation.
667
+ - Added faster `ex.BoundingBox.overlap(...)` implementation.
668
+ - Added `ex.Vector.min(...)` and `ex.Vector.max(...)` to find the min/max of each vector component between 2 vectors.
669
+ - Added `ex.TransformComponent.zIndexChange$` observable to watch when z index changes.
670
+ - Added new display mode `ex.DisplayMode.FitContainerAndFill`.
671
+ - Added new display mode `ex.DisplayMode.FitScreenAndFill`.
672
+ - Added new display mode `ex.DisplayMode.FitContainerAndZoom`.
673
+ - Added new display mode `ex.DisplayMode.FitScreenAndZoom`.
674
+ ### Fixed
675
+
676
+ - Fixed unreleased issue where fixed update interpolation was incorrect with child actors
677
+ - Fixed unreleased bug where CompositeCollider components would not collide appropriately because contacts did not have unique ids
678
+ - Fixed issue where CompositeColliders treat separate constituents as separate collisionstart/collisionend which is unexpected
679
+ - Fixed issue where resources that failed to load would silently fail making debugging challenging
680
+ - Fixed issue where large pieces of Text were rendered as black rectangles on mobile, excalibur now internally breaks these into smaller chunks in order to render them.
681
+ - Fixed issue #2263 where keyboard input `wasPressed` was not working in the `onPostUpdate` lifecycle
682
+ - Fixed issue #2263 where there were some keys missing from the `ex.Input.Keys` enum, including `Enter`
683
+ - Fixed issue where Rectangle line renderer did not respect z order
684
+
685
+ ### Updates
686
+
687
+ - Performance improvement to the `ex.Loader` screen keeping frame rates higher by only updating the backing `ex.Canvas` when there are changes
688
+ - Improved collision broadphase by swapping to a more efficient `ex.BoundingBox.overlaps` check
689
+ - Improved collision narrowphase by improving `ex.PolygonCollider` calculations for localBounds, bounds, and transformed point geometry
690
+ - Improved Text/Font performance by internally caching expensive native `measureText()` calls
691
+ - Performance improvement to GraphicsSystem
692
+ - Performance improvement to the transform capture of the previous frame transform and motion
693
+
694
+ ### Changed
695
+
696
+ - Split offscreen detection into a separate system
697
+ - Renamed `ex.Matrix.multv()` and `ex.Matrix.multm()` to `ex.Matrix.multiply()` which matches our naming conventions
698
+
699
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
700
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
701
+ <!--------------------------------- DO NOT EDIT BELOW THIS LINE --------------------------------->
702
+
703
+ ## [0.25.3] - 2022-02-05
704
+
705
+ ## Breaking Changes
706
+
707
+ - Small breaking change to `engine.screenshot()` you must now use `await engine.screenshot()`. This avoids copy buffer performance impact of `preserveDrawingBuffer: true` by capturing a screen shot request on the next frame when the buffer has not yet been cleared.
708
+
709
+ ### Deprecated
710
+
711
+ -
712
+
713
+ ### Added
714
+
715
+ -
716
+
717
+ ### Fixed
718
+
719
+ - Fixed issue where collision normals are inaccurate on polygon colliders that offset from their origin
720
+ - Fixed issue where only Pixel 6 devices crash when using their MAX_TEXTURE_IMAGE_UNITS, artificially cap Excalibur to 125 textures max
721
+ - Fixed issue [#2224] where pointer events sometimes didn't work in mobile platforms due to `touch-action` not being set to `none`
722
+ - Fixed issue [#2203] where `engine.screenshot()` did not work in the WebGL implementation
723
+ - Fixed issue [#1528] where screenshots didn't match the displayed game's size in HiDPI displays, images are now consistent with the game. If you want the full scaled image pass `engine.screenshot(true)` to preserve HiDPI Resolution.
724
+ - Fixed issue [#2206] error and warning logs for large images to help developers identify error situations in the webgl implementation
725
+
726
+ ### Updates
727
+
728
+ -
729
+
730
+ ### Changed
731
+
732
+ -
733
+
734
+ ## [0.25.2] - 2022-01-21
735
+
736
+ ### Breaking Changes
737
+
738
+ - `ex.Util.extend()` is removed, modern js spread operator `{...someobject, ...someotherobject}` handles this better.
739
+ - Excalibur post processing is now moved to the `engine.graphicsContext.addPostProcessor()`
740
+ - Breaking change to `ex.PostProcessor`, all post processors must now now implement this interface
741
+ ```typescript
742
+ export interface PostProcessor {
743
+ intialize(gl: WebGLRenderingContext): void;
744
+ getShader(): Shader;
745
+ }
746
+ ```
747
+ ### Deprecated
748
+
749
+ - The static `Engine.createMainLoop` is now marked deprecated and will be removed in v0.26.0, it is replaced by the `Clock` api
750
+ - Mark legacy draw routines in `ex.Engine`, `ex.Scene`, and `ex.Actor` deprecated
751
+
752
+ ### Added
753
+
754
+ - Added ability to build custom renderer plugins that are accessible to the `ex.ExcaliburGraphicsContext.draw<TCustomRenderer>(...)` after registering them `ex.ExcaliburGraphicsContext.register(new LineRenderer())`
755
+ - Added ability to draw circles and rectangles with outlines! `ex.ExcaliburGraphicsContext.drawCircle(...)` and `ex.ExcaliburGraphicsContext.drawRectangle(...)`
756
+ - Added `ex.CoordPlane` can be set in the `new ex.Actor({coordPlane: CoordPlane.Screen})` constructor
757
+ - Added convenience feature, setting the color, sets the color on default graphic if applicable
758
+ - Added a `DebugGraphicsComponent` for doing direct debug draw in the `DebugSystem`
759
+ - Added back TileMap debug draw
760
+ - Added `ex.Scene.timers` to expose the list of timers
761
+ - Added support for different webgl texture blending modes as `ex.ImageFiltering` :
762
+ * `ex.ImageFiltering.Blended` - Blended is useful when you have high resolution artwork and would like it blended and smoothed
763
+ * `ex.ImageFiltering.Pixel` - Pixel is useful when you do not want smoothing aka antialiasing applied to your graphics.
764
+ - Excalibur will set a "default" blend mode based on the `ex.EngineOption` antialiasing property, but can be overridden per graphic
765
+ - `antialiasing: true`, then the blend mode defaults to `ex.ImageFiltering.Blended`
766
+ - `antialiasing: false`, then the blend mode defaults to `ex.ImageFiltering.Pixel`
767
+ - `ex.Text/ex.Font` defaults to blended which improves the default look of text rendering dramatically!
768
+ - `ex.Circle` and `ex.Polygon` also default to blended which improves the default look dramatically!
769
+ - `ex.ImageSource` can now specify a blend mode before the Image is loaded, otherwise
770
+ - Added new `measureText` method to the `ex.SpriteFont` and `ex.Font` to return the bounds of any particular text
771
+ - Added new `Clock` api to manage the core main loop. Clocks hide the implementation detail of how the mainloop runs, users just knows that it ticks somehow. Clocks additionally encapsulate any related browser timing, like `performance.now()`
772
+ 1. `StandardClock` encapsulates the existing `requestAnimationFrame` api logic
773
+ 2. `TestClock` allows a user to manually step the mainloop, this can be useful for frame by frame debugging #1170
774
+ 3. The base abstract clock implements the specifics of elapsed time
775
+
776
+ - Added a new feature to Engine options to set a maximum fps `new ex.Engine({...options, maxFps: 30})`. This can be useful when needing to deliver a consistent experience across devices.
777
+ - Pointers can now be configured to use the collider or the graphics bounds as the target for pointers with the `ex.PointerComponent`
778
+ - `useColliderShape` - (default true) uses the collider component geometry for pointer events
779
+ - `useGraphicsBounds` - (default false) uses the graphics bounds for pointer events
780
+
781
+
782
+ ### Fixed
783
+
784
+ - Fixed issue [#2192] where Actor.center was not correct in child actors
785
+ - Fixed issue where `ex.CircleCollider`s did not respect rotation/scale when offset
786
+ - Fixed issue [#2157] when compiling in TS strict mode complaining about `ex.Poolable`
787
+ - Fixed issue where scaled graphics were not calculating the correct bounds
788
+ - Fixed unreleased issue where clock implementation was not updating frame id
789
+ - Fixed alpha pre-multiply math in multiple shaders
790
+ - Fixed label initialization of fonts, passing a font in the constructor work
791
+ - Fixed bug in sprite bounds calculations not taking scale into account
792
+ - Fixed bug with pointer api where clicking on screen coordinate actors didn't work
793
+ - Fixed [#1815] issue where Camera would jitter when using a strategies based off of actors in the previous frame.
794
+ - Fixed issue where TileMaps would sometimes have a geometry seam that may not fall on an actual screen pixel causing a visible gap between tiles and the background
795
+ -- ![image](https://user-images.githubusercontent.com/612071/144700377-ac4585ba-3f4c-44b8-95db-ad36c5fc9a32.png)
796
+ - Fixed unreleased issue where SpriteFonts log every frame they detect a misconfigured font.
797
+ - Fixed unreleased issue where clock when constraining fps would pass larger than expected elapsed times to the simulation causing things to "speed up" bizarrely
798
+ - Fixed unreleased issue where games with no resources would crash
799
+ - Fixed issue [#2152] where shared state in `ex.Font` and `ex.SpriteFont` prevented text from aligning properly when re-used
800
+ - Fixed issue where fast moving `CompositeCollider`s were erroneously generating pairs for their constituent parts
801
+ - Fixed Safari 13.1 crash when booting Excalibur because of they odd MediaQuery API in older Safari
802
+ - Fixed issue where pointers did not work because of missing types
803
+ - Fixed issue with `ArcadeSolver` where stacked/overlapped tiles would double solve the position of the collider for the same overlap
804
+ - Fixed issue where changing the `ex.Sprite.width` or `ex.Sprite.height` did not resize the graphic.
805
+ - Fixed issue where initial Actor anchors set in the constructor were not being set in the graphics component
806
+ - EventDispatcher
807
+ - `EventDispatcher` - doesn't require the target object. The context of `this` is not tampered anymore.
808
+ - Pointers
809
+ - `PointerAbstraction` - is fixed to maintain reference
810
+ -
811
+
812
+ ### Updates
813
+
814
+ - The following Engine's pieces: `Collision` `Graphics` `Resources` `Trigger` are updated to reflect the new EventDispatcher behavior.
815
+ - Refactor camera/screen interaction to utilize transforms instead of bespoke coordinate conversion
816
+ ### Changed
817
+
818
+ - Updated Graphics to improve general performance
819
+ - Updated the webgl primitives to make building `ex.Shader`s, `ex.VertexBuffer`s, and `ex.VertexLayout`s much easier
820
+ - Broke up the internal monolithic shader into separate internal renderer plugins
821
+ - Changed the debug system to separate displaying the debug position point (`game.debug.transform.showPosition = true`) and debug position label (`game.debug.transform.showPositionLabel = true`)
822
+ - `ex.ColorBlindCorrector` is renamed to `ex.ColorBlindnessPostProcessor`, and `ex.ColorBlindness` is renamed to `ex.ColorBlindnessMode`
823
+ - Color blindness can still be corrected or simulated:
824
+ * `game.debug.colorBlindMode.correct(ex.ColorBlindnessMode.Deuteranope)`
825
+ * `game.debug.colorBlindMode.simulate(ex.ColorBlindnessMode.Deuteranope)`
826
+ - Excalibur now uses pre-multiplied alpha automatically, images will be unpacked into memory using `gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true)`
827
+ - Excalibur FPS is now sampled over 100ms blocks, this gives a more usable fps in the stats. The sampler is available off of the engine clock `engine.clock.fpsSampler.fps`
828
+ - Pointer Events:
829
+ * Event types (up, down, move, etc) now all exist in 2 types `ex.Input.PointerEvent` and `ex.Input.WheelEvent`
830
+ * The `stopPropagation()` method used to cancel further dispatches has been renamed to `cancel()` to match other events API.
831
+ * Events no longer have a reference to the `pointer` but now have all of the same information that was availabe on the pointer `worldPos`, `screenPos`, `pagePos`
832
+
833
+
834
+ ## [0.25.1] - 2021-11-05
835
+
836
+ ### Added
837
+
838
+ - *Experimental:* Native ES module bundle distribution in package `esm/excalibur.js` entrypoint ([#2064](https://github.com/excaliburjs/Excalibur/pull/2064))
839
+ - `withEngine` utils support an aditional options parameter to override the Engine default options.
840
+ - Story to show a play / pause implementation.
841
+ - `ex.Animation` now support `totalDuration` that will calculate automatically each frame duration based on how many frames have.
842
+ - `ex.Animation` now supports `.reverse()` to reverse the direction of play in an animation, use the `ex.Animation.direction` to inspect if the animation is playing in the `ex.AnimationDirection.Forward` direction or the `ex.AnimationDirection.Backward` direction.
843
+ ### Changed
844
+
845
+ - Pointer system refactored into 2 parts:
846
+ * First is an ECS style system `ex.PointerSystem` that dispatches events to Entities/Actors
847
+ * Second is an event receiver `ex.PointerEventReceiver` which is responsible for collecting the native browser events
848
+ * The API is mostly backwards compatible breaking changes are listed in the breaking change section, event types have been simplified, and `stopPropagation()` and been renamed to `cancel()`
849
+ - Internal Actions implementation converted to ECS system and component, this is a backwards compatible change with v0.25.0
850
+ - `ex.ActionsSystem` and `ex.ActionsComponent` now wrap the existing `ex.ActionContext`
851
+ - Actions can be shared with all entities now!
852
+ - Dispatch the `hidePlayButton` on the Button Event to prevent that keep on the screen on some situations [#1431].
853
+ - Revert VSCode Workbench Colors
854
+
855
+ ### Deprecated
856
+
857
+ - Actions `asPromise()` renamed to `toPromise()`
858
+
859
+ ### Fixed
860
+
861
+ - Fixed loader button position on window resize
862
+ - Fixed issue with setting `ex.TileMap.z` to a value
863
+ - Fixed crash in debug system if there is no collider geometry
864
+ - Fixed ImageSource loading error message [#2049]
865
+
866
+ ## [0.25.0] - 2021-10-03
867
+
868
+ ### Breaking Changes
869
+
870
+ - Actor Drawing: `ex.Actor.addDrawing`, `ex.Actor.setDrawing`, `onPostDraw()`, and `onPreDraw()` are no longer on by default and will be removed in v0.26.0, they are available behind a flag `ex.Flags.useLegacyDrawing()`
871
+ - For custom drawing use the `ex.Canvas`
872
+ - `ex.Actor.rx` has been renamed to `ex.Actor.angularVelocity`
873
+ - Rename `ex.Edge` to `ex.EdgeCollider` and `ex.ConvexPolygon` to `ex.PolygonCollider` to avoid confusion and maintian consistency
874
+ - `ex.Label` constructor now only takes the option bag constructor and the font properties have been replaced with `ex.Font`
875
+ ```typescript
876
+ const label = new ex.Label({
877
+ text: 'My Text',
878
+ x: 100,
879
+ y: 100,
880
+ font: new ex.Font({
881
+ family: 'Consolas',
882
+ size: 32
883
+ })
884
+ });
885
+ ```
886
+ - `ex.Physics.debug` properties for Debug drawing are now moved to `engine.debug.physics`, `engine.debug.collider`, and `engine.debug.body`.
887
+ - Old `debugDraw(ctx: CanvasRenderingContext2D)` methods are removed.
888
+ - Collision `Pair`'s are now between Collider's and not bodies
889
+ - `PerlinNoise` has been removed from the core repo will now be offered as a [plugin](https://github.com/excaliburjs/excalibur-perlin)
890
+ - Legacy drawing implementations are moved behind `ex.LegacyDrawing` new Graphics implemenations of `Sprite`, `SpriteSheet`, `Animation` are now the default import.
891
+ - To use any of the `ex.LegacyDrawing.*` implementations you must opt-in with the `ex.Flags.useLegacyDrawing()` note: new graphics do not work in this egacy mode
892
+ - Renames `CollisionResolutionStrategy.Box` collision resolution strategy to `Arcade`
893
+ - Renames `CollisionResolutionStrategy.RigidBody` collision resolution strategy to `Realistic`
894
+ - `Collider` is now a first class type and encapsulates what `Shape` used to be. `Collider` is no longer a member of the `Body`
895
+ - `CollisionType` and `CollisionGroup` are now a member of the `Body` component, the reasoning is they define how the simulated physics body will behave in simulation.
896
+ - `Timer`'s no longer automatically start when added to a `Scene`, this `Timer.start()` must be called. ([#1865](ttps://github.com/excaliburjs/Excalibur/issues/1865))
897
+ - `Timer.complete` is now read-only to prevent odd bugs, use `reset()`, `stop()`, and `start()` to manipulate timers.
898
+ - `Actor.actions.repeat()` and `Actor.actions.repeatForever()` now require a handler that specifies the actions to repeat. This is more clear and helps prevent bugs like #1891
899
+
900
+ ```typescript
901
+ const actor = new ex.Actor();
902
+
903
+ actor.actions
904
+ // Move up in a zig-zag by repeating 5 times
905
+ .repeat((ctx) => {
906
+ ctx.moveBy(10, 0, 10);
907
+ ctx.moveBy(0, 10, 10);
908
+ }, 5)
909
+ .callMethod(() => {
910
+ console.log('Done repeating!');
911
+ });
912
+ ```
913
+
914
+ - Removes `Entity.components` as a way to access, add, and remove components
915
+ - `ex.Camera.z` has been renamed to property `ex.Camera.zoom` which is the zoom factor
916
+ - `ex.Camera.zoom(...)` has been renamed to function `ex.Camera.zoomOverTime()`
917
+ - TileMap no longer needs registered SpriteSheets, `Sprite`'s can be added directly to `Cell`'s with `addGraphic`
918
+ - The confusing `TileSprite` type is removed (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
919
+ - Directly changing debug drawing by `engine.isDebug = value` has been replaced by `engine.showDebug(value)` and `engine.toggleDebug()` ([#1655](https://github.com/excaliburjs/Excalibur/issues/1655))
920
+ - `UIActor` Class instances need to be replaced to `ScreenElement` (This Class it's marked as Obsolete) ([#1656](https://github.com/excaliburjs/Excalibur/issues/1656))
921
+ - Switch to browser based promise, the Excalibur implementation `ex.Promise` is marked deprecated ([#994](https://github.com/excaliburjs/Excalibur/issues/994))
922
+ - `DisplayMode`'s have changed ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733)) & ([#1928](https://github.com/excaliburjs/Excalibur/issues/1928)):
923
+
924
+ - `DisplayMode.FitContainer` fits the screen to the available width/height in the canvas parent element, while maintaining aspect ratio and resolution
925
+ - `DisplayMode.FillContainer` update the resolution and viewport dyanmically to fill the available space in the canvas parent element, DOES NOT preserve `aspectRatio`
926
+ - `DisplayMode.FitScreen` fits the screen to the available browser window space, while maintaining aspect ratio and resolution
927
+ - `DisplayMode.FillScreen` now does what `DisplayMode.FullScreen` used to do, the resolution and viewport dynamically adjust to fill the available space in the window, DOES NOT preserve `aspectRatio` ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
928
+ - `DisplayMode.FullScreen` is now removed, use `Screen.goFullScreen()`.
929
+
930
+ - `SpriteSheet` now is immutable after creation to reduce chance of bugs if you modified a public field. The following properties are read-only: `columns`, `rows`, `spWidth`, `spHeight`, `image`, `sprites` and `spacing`.
931
+ - `Engine.pointerScope` now defaults to a more expected `ex.Input.PointerScope.Canvas` instead of `ex.Input.PointerScope.Document` which can cause frustrating bugs if building an HTML app with Excalibur
932
+
933
+ ### Added
934
+
935
+ - New property `center` to `Screen` to encapsulate screen center coordinates calculation considering zoom and device pixel ratio
936
+ - New `ex.Shape.Capsule(width, height)` helper for defining capsule colliders, these are useful for ramps or jagged floor colliders.
937
+ - New collision group constructor argument added to Actor`new Actor({collisionGroup: collisionGroup})`
938
+ - `SpriteSheet.getSprite(x, y)` can retrieve a sprite from the SpriteSheet by x and y coordinate. For example, `getSprite(0, 0)` returns the top left sprite in the sheet.
939
+ - `SpriteSheet`'s now have dimensionality with `rows` and `columns` optionally specified, if not there is always 1 row, and `sprites.length` columns
940
+ - `new Actor({radius: 10})` can now take a radius parameter to help create circular actors
941
+ - The `ExcaliburGraphicsContext` now supports drawing debug text
942
+ - `Entity` may also now optionally have a `name`, this is useful for finding entities by name or when displaying in debug mode.
943
+ - New `DebugSystem` ECS system will show debug drawing output for things toggled on/off in the `engine.debug` section, this allows for a less cluttered debug experience.
944
+ - Each debug section now has a configurable color.
945
+ - Turn on WebGL support with `ex.Flags.useWebGL()`
946
+ - Added new helpers to `CollisionGroup` to define groups that collide with specified groups `CollisionGroup.collidesWith([groupA, groupB])`
947
+ - Combine groups with `const groupAandB = CollisionGroup.combine([groupA, groupB])`
948
+ - Invert a group instance `const everthingButGroupA = groupA.invert()`
949
+ - Improved Collision Simulation
950
+ - New ECS based `CollisionSystem` and `MotionSystem`
951
+ - Rigid body's can now sleep for improved performance
952
+ - Multiple contacts now supported which improves stability
953
+ - Iterative solver for improved stability
954
+ - Added `ColliderComponent` to hold individual `Collider` implementations like `Circle`, `Box`, or `CompositeCollider`
955
+ - `Actor.collider.get()` will get the current collider
956
+ - `Actor.collider.set(someCollider)` allows you to set a specific collider
957
+ - New `CompositeCollider` type to combine multiple colliders together into one for an entity
958
+ - Composite colliders flatten into their individual colliders in the collision system
959
+ - Composite collider keeps it's internal colliders in a DynamicTree for fast `.collide` checks
960
+ - New `TransformComponent` to encapsulate Entity transform, that is to say position, rotation, and scale
961
+ - New `MotionComponent` to encapsulate Entity transform values changing over time like velocity and acceleration
962
+ - Added multi-line support to `Text` graphics ([#1866](https://github.com/excaliburjs/Excalibur/issues/1866))
963
+ - Added `TileMap` arbitrary graphics support with `.addGraphic()` ([#1862](https://github.com/excaliburjs/Excalibur/issues/1862))
964
+ - Added `TileMap` row and column accessors `getRows()` and `getColumns()` ([#1859](https://github.com/excaliburjs/Excalibur/issues/1859))
965
+ - Added the ability to store arbitrary data in `TileMap` cells with `Cell.data.set('key', 'value')` and `Cell.data.get('key')` ([#1861](https://github.com/excaliburjs/Excalibur/issues/1861))
966
+ - Actions `moveTo()`, `moveBy()`, `easeTo()`, `scaleTo()`, and `scaleBy()` now have vector overloads
967
+ - `Animation.fromSpriteSheet` will now log a warning if an index into the `SpriteSheet` is invalid ([#1856](https://github.com/excaliburjs/Excalibur/issues/1856))
968
+ - `new ImageSource()` will now log a warning if an image type isn't fully supported. ([#1855](https://github.com/excaliburjs/Excalibur/issues/1855))
969
+ - `Timer.start()` to explicitly start timers, and `Timer.stop()` to stop timers and "rewind" them.
970
+ - `Timer.timeToNextAction` will return the milliseconds until the next action callback
971
+ - `Timer.timeElapsedTowardNextAction` will return the milliseconds counted towards the next action callback
972
+ - `BoundingBox` now has a method for detecting zero dimensions in width or height `hasZeroDimensions()`
973
+ - `BoundingBox`'s can now by `transform`'d by a `Matrix`
974
+ - Added `new Entity(components: Component[])` constructor overload to create entities with components quickly.
975
+ - Added `Entity.get(type: ComponentType)` to get strongly typed components if they exist on the entity.
976
+ - Added `Entity.has(type: ComponentType)` overload to check if an entity has a component of that type.
977
+ - Added `Entity.hasTag(tag: string)`, `Entity.addTag(tag: string)`, and `Entity.removeTag(tag: string, force: boolean)`.
978
+ - Tag `offscreen` is now added to entities that are offscreen
979
+ - Added `Entity.componentAdded$` and `Entity.componentRemoved$` for observing component changes on an entity.
980
+ - For child/parent entities:
981
+ - Added `Entity.addChild(entity: Entity)`, `Entity.removeChild(entity: Entity)`, `Entity.removeAllChildren()` for managing child entities
982
+ - Added `Entity.addTemplate(templateEntity: Entity)` for adding template entities or "prefab".
983
+ - Added `Entity.parent` readonly accessor to the parent (if exists), and `Entity.unparent()` to unparent an entity.
984
+ - Added `Entity.getAncestors()` is a sorted list of parents starting with the topmost parent.
985
+ - Added `Entity.children` readonly accessor to the list of children.
986
+ - Add the ability to press enter to start the game after loaded
987
+ - Add Excalibur Feature Flag implementation for releasing experimental or preview features ([#1673](https://github.com/excaliburjs/Excalibur/issues/1673))
988
+ - Color now can parse RGB/A string using Color.fromRGBString('rgb(255, 255, 255)') or Color.fromRGBString('rgb(255, 255, 255, 1)')
989
+ - `DisplayMode.FitScreen` will now scale the game to fit the available space, preserving the `aspectRatio`. ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
990
+ - `SpriteSheet.spacing` now accepts a structure `{ top: number, left: number, margin: number }` for custom spacing dimensions ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
991
+ - `SpriteSheet.ctor` now has an overload that accepts `spacing` for consistency although the object constructor is recommended ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
992
+ - Add `SpriteSheet.getSpacingDimensions()` method to retrieve calculated spacing dimensions ([#1788](https://github.com/excaliburjs/Excalibur/issues/1778))
993
+ - Add `KeyEvent.value?: string` which is the key value (or "typed" value) that the browser detected. For example, holding Shift and pressing 9 will have a value of `(` which is the typed character.
994
+ - Add `KeyEvent.originalEvent?: KeyboardEvent` which exposes the raw keyboard event handled from the browser.
995
+ - Added a new getter to GraphicsComponent.ts called currentKeys that will return the names of the graphics shown in all layers
996
+ - Added a new getter to GraphicsLayer called currentKeys that will the names of the graphics shown in this layer
997
+
998
+ ### Changed
999
+
1000
+ - `Gif` now supports new graphics component
1001
+ - `Algebra.ts` refactored into separate files in `Math/`
1002
+ - Engine/Scene refactored to make use of the new ECS world which simplifies their logic
1003
+ - `TileMap` now uses the built in `Collider` component instead of custom collision code.
1004
+ - Updates the Excalibur ECS implementation for ease of use and Excalibur draw system integration
1005
+ - Adds "ex." namespace to built in component types like "ex.transform"
1006
+ - Adds `ex.World` to encapsulate all things ECS
1007
+ - Adds `ex.CanvasDrawSystem` to handle all HTML Canvas 2D drawing via ECS
1008
+ - Updates `ex.Actor` to use new `ex.TransformComponent` and `ex.CanvasDrawComponent`
1009
+
1010
+ ### Deprecated
1011
+
1012
+ - `Timer.unpause()` has be deprecated in favor of `Timer.resume()` ([#1864](https://github.com/excaliburjs/Excalibur/issues/1864))
1013
+ - Removed UIActor Stub in favor of ScreenElement ([#1656](https://github.com/excaliburjs/Excalibur/issues/1656))
1014
+ - `ex.SortedList` as deprecated
1015
+ - `ex.Promise` is marked deprecated ([#994](https://github.com/excaliburjs/Excalibur/issues/994))
1016
+ - `ex.DisplayMode.Position` CSS can accomplish this task better than Excalibur ([#1733](https://github.com/excaliburjs/Excalibur/issues/1733))
1017
+
1018
+ ### Fixed
1019
+
1020
+ - Fixed allow `ex.ColliderComponent` to not have a collider
1021
+ - Fixed issue where collision events were not being forwarded from individual colliders in a `ex.CompositeCollider`
1022
+ - Fixed issue where `ex.CompositeCollider`'s individual colliders were erroneously generating pairs
1023
+ - Fixed issue where `GraphicsOptions` `width/height` could not be used to define a `ex.Sprite` with equivalent `sourceView` and `destSize` ([#1863](https://github.com/excaliburjs/Excalibur/issues/1863))
1024
+ - Fixed issue where `ex.Scene.onActivate/onDeactivate` were called with the wrong arguments ([#1850](https://github.com/excaliburjs/Excalibur/issues/1850))
1025
+ - Fixed issue where no width/height argmunents to engine throws an error
1026
+ - Fixed issue where zero dimension image draws on the ExcaliburGraphicsContext throw an error
1027
+ - Fixed issue where the first scene onInitialize fires at Engine contructor time and before the "play button" clicked ([#1900](https://github.com/excaliburjs/Excalibur/issues/1900))
1028
+ - Fixed issue where the "play button" click was being interpreted as an input event excalibur needed to handle ([#1854](https://github.com/excaliburjs/Excalibur/issues/1854))
1029
+ - Fixed issue where pointer events were not firing at the ex.Engine.input.pointers level ([#1439](https://github.com/excaliburjs/Excalibur/issues/1439))
1030
+ - Fixed issue where pointer events propagate in an unexpected order, now they go from high z-index to low z-index ([#1922](https://github.com/excaliburjs/Excalibur/issues/1922))
1031
+ - Fixed issue with Raster padding which caused images to grow over time ([#1897](https://github.com/excaliburjs/Excalibur/issues/1897))
1032
+ - Fixed N+1 repeat/repeatForever bug ([#1891](https://github.com/excaliburjs/Excalibur/issues/1891))
1033
+ - Fixed repeat/repeatForever issue with `rotateTo` ([#635](https://github.com/excaliburjs/Excalibur/issues/635))
1034
+ - Entity update lifecycle is now called correctly
1035
+ - Fixed GraphicsSystem `enterviewport` and `exitviewport` event
1036
+ - Fixed DOM element leak when restarting games, play button elements piled up in the DOM.
1037
+ - Fixed issues with `ex.Sprite` not rotating/scaling correctly around the anchor (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
1038
+ - Optionally specify whether to draw around the anchor or not `drawAroundAnchor`
1039
+ - Fixed in the browser "FullScreen" api, coordinates are now correctly mapped from page space to world space ([#1734](https://github.com/excaliburjs/Excalibur/issues/1734))
1040
+ - Fix audio decoding bug introduced in https://github.com/excaliburjs/Excalibur/pull/1707
1041
+ - Fixed issue with promise resolve on double resource load ([#1434](https://github.com/excaliburjs/Excalibur/issues/1434))
1042
+ - Fixed Firefox bug where scaled graphics with anti-aliasing turned off are not pixelated ([#1676](https://github.com/excaliburjs/Excalibur/issues/1676))
1043
+ - Fixed z-index regression where actors did not respect z-index ([#1678](https://github.com/excaliburjs/Excalibur/issues/1678))
1044
+ - Fixed Animation flicker bug when switching to an animation ([#1636](https://github.com/excaliburjs/Excalibur/issues/1636))
1045
+ - Fixed `ex.Actor.easeTo` actions, they now use velocity to move Actors ([#1638](https://github.com/excaliburjs/Excalibur/issues/1638))
1046
+ - Fixed `Scene` constructor signature to make the `Engine` argument optional ([#1363](https://github.com/excaliburjs/Excalibur/issues/1363))
1047
+ - Fixed `anchor` properly of single shape `Actor` [#1535](https://github.com/excaliburjs/Excalibur/issues/1535)
1048
+ - Fixed Safari bug where `Sound` resources would fail to load ([#1848](https://github.com/excaliburjs/Excalibur/issues/1848))
1049
+
1050
+ <!----------------------------------------------------------------------------------------------->
1051
+
1052
+ ## [0.24.5] - 2020-09-07
1053
+
1054
+ ### Breaking Changes
1055
+
1056
+ - [#1361] Makes use of proxies, Excalibur longer supports IE11 :boom: ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)
1057
+
1058
+ ### Added
1059
+
1060
+ - Adds new ECS Foundations API, which allows excalibur core behavior to be manipulated with ECS style code ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)
1061
+ - Adds new `ex.Entity` & `ex.EntityManager` which represent anything that can do something in a Scene and are containers for Components
1062
+ - Adds new `ex.Component` type which allows encapsulation of state on entities
1063
+ - Adds new `ex.Query` & `ex.QueryManager` which allows queries over entities that match a component list
1064
+ - Adds new `ex.System` type which operates on matching Entities to do some behavior in Excalibur.
1065
+ - Adds new `ex.Observable` a small observable implementation for observing Entity component changes over time
1066
+
1067
+ ### Fixed
1068
+
1069
+ - Fixed Animation flicker bug on the first frame when using animations with scale, anchors, or rotation. ([#1636](https://github.com/excaliburjs/Excalibur/issues/1636))
1070
+
1071
+ <!----------------------------------------------------------------------------------------------->
1072
+
1073
+ ## [0.24.4] - 2020-09-02
1074
+
1075
+ ### Added
1076
+
1077
+ - Add new `ex.Screen` abstraction to manage viewport size and resolution independently and all other screen related logic. ([#1617](https://github.com/excaliburjs/Excalibur/issues/1617))
1078
+ - New support for the browser fullscreen API
1079
+ - Add color blind mode simulation and correction in debug object.
1080
+ ([#390](https://github.com/excaliburjs/Excalibur/issues/390))
1081
+ - Add `LimitCameraBoundsStrategy`, which always keeps the camera locked to within the given bounds. ([#1498](https://github.com/excaliburjs/Excalibur/issues/1498))
1082
+ - Add mechanisms to manipulate the `Loader` screen. ([#1417](https://github.com/excaliburjs/Excalibur/issues/1417))
1083
+ - Logo position `Loader.logoPosition`
1084
+ - Play button position `Loader.playButtonPosition`
1085
+ - Loading bar position `Loader.loadingBarPosition`
1086
+ - Loading bar color `Loader.loadingBarColor` by default is white, but can be any excalibur `ex.Color`
1087
+
1088
+ ### Changed
1089
+
1090
+ - Remove usage of `mock.engine` from the tests. Use real engine instead.
1091
+ - Upgrade Excalibur to TypeScript 3.9.2
1092
+ - Upgrade Excalibur to Node 12 LTS
1093
+
1094
+ ### Fixed
1095
+
1096
+ - Fixed Loader play button markup and styles are now cleaned up after clicked ([#1431](https://github.com/excaliburjs/Excalibur/issues/1431))
1097
+ - Fixed Excalibur crashing when embedded within a cross-origin IFrame ([#1151](https://github.com/excaliburjs/Excalibur/issues/1151))
1098
+ - Fixed performance issue where uneccessary effect processing was occurring for opacity changes ([#1549](https://github.com/excaliburjs/Excalibur/issues/1549))
1099
+ - Fixed issue when loading images from a base64 strings that would crash the loader ([#1543](https://github.com/excaliburjs/Excalibur/issues/1543))
1100
+ - Fixed issue where actors that were not in scene still received pointer events ([#1555](https://github.com/excaliburjs/Excalibur/issues/1555))
1101
+ - Fixed Scene initialization order when using the lifecycle overrides ([#1553](https://github.com/excaliburjs/Excalibur/issues/1553))
1102
+
1103
+ <!----------------------------------------------------------------------------------------------->
1104
+
1105
+ ## [0.24.0] - 2020-04-23
1106
+
1107
+ ### Breaking Changes
1108
+
1109
+ - Remove obsolete `.extend()` semantics in Class.ts as as well as related test cases.
1110
+
1111
+ ### Added
1112
+
1113
+ - Added new option for constructing bounding boxes. You can now construct with an options
1114
+ object rather than only individual coordinate parameters. ([#1151](https://github.com/excaliburjs/Excalibur/issues/1151))
1115
+ - Added new interface for specifying the type of the options object passed to the
1116
+ bounding box constructor.
1117
+ - Added the `ex.vec(x, y)` shorthand for creating vectors.
1118
+ ([#1340](https://github.com/excaliburjs/Excalibur/issues/1340))
1119
+ - Added new event `processed` to `Sound` that passes processed `string | AudioBuffer` data. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1120
+ - Added new property `duration` to `Sound` and `AudioInstance` that exposes the track's duration in seconds when Web Audio API is used. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1121
+
1122
+ ### Changed
1123
+
1124
+ - Animation no longer mutate underlying sprites, instead they draw the sprite using the animations parameters. This allows more robust flipping at runtime. ([#1258](https://github.com/excaliburjs/Excalibur/issues/1258))
1125
+ - Changed obsolete decorator to only log the same message 5 times. ([#1281](https://github.com/excaliburjs/Excalibur/issues/1281))
1126
+ - Switched to core-js based polyfills instead of custom written ones ([#1214](https://github.com/excaliburjs/Excalibur/issues/1214))
1127
+ - Updated to TypeScript@3.6.4 and node 10 LTS build
1128
+ - `Sound.stop()` now always rewinds the track, even when the sound is paused. ([#1474](https://github.com/excaliburjs/Excalibur/pull/1474))
1129
+
1130
+ ### Deprecated
1131
+
1132
+ - `ex.Vector.magnitude()` will be removed in `v0.25.0`, use `ex.Vector.size()`. ([#1277](https://github.com/excaliburjs/Excalibur/issues/1277))
1133
+
1134
+ ### Fixed
1135
+
1136
+ - Fixed Excalibur crashing when displaying both a tilemap and a zero-size actor ([#1418](https://github.com/excaliburjs/Excalibur/issues/1418))
1137
+ - Fixed animation flipping behavior ([#1172](https://github.com/excaliburjs/Excalibur/issues/1172))
1138
+ - Fixed actors being drawn when their opacity is 0 ([#875](https://github.com/excaliburjs/Excalibur/issues/875))
1139
+ - Fixed iframe event handling, excalibur will respond to keyboard events from the top window ([#1294](https://github.com/excaliburjs/Excalibur/issues/1294))
1140
+ - Fixed camera to be vector backed so `ex.Camera.x = ?` and `ex.Camera.pos.setTo(...)` both work as expected([#1299](https://github.com/excaliburjs/Excalibur/issues/1299))
1141
+ - Fixed missing on/once/off signatures on `ex.Pointer` ([#1345](https://github.com/excaliburjs/Excalibur/issues/1345))
1142
+ - Fixed sounds not being stopped when `Engine.stop()` is called. ([#1476](https://github.com/excaliburjs/Excalibur/pull/1476))
1143
+
1144
+ <!----------------------------------------------------------------------------------------------->
1145
+
1146
+ ## [0.23.0] - 2019-06-08
1147
+
1148
+ ### Breaking Changes
1149
+
1150
+ - `ex.Actor.scale`, `ex.Actor.sx/sy`, `ex.Actor.actions.scaleTo/scaleBy` will not work as expected with new collider implementation, set width and height directly. These features will be completely removed in v0.24.0.
1151
+
1152
+ ### Added
1153
+
1154
+ - New collision group implementation ([#1091](https://github.com/excaliburjs/Excalibur/issues/1091), [#862](https://github.com/excaliburjs/Excalibur/issues/862))
1155
+ - New `ex.Collider` type which is the container for all collision related behavior and state. Actor is now extracted from collision.
1156
+ - New interface `Clonable<T>` to indicate if an object contains a clone method
1157
+ - New interface `Eventable<T>` to indicated if an object can emit and receive events
1158
+ - `ex.Vector.scale` now also works with vector input
1159
+ - `ex.BoundingBox.fromDimension(width: number, height: number)` can generate a bounding box from a width and height
1160
+ - `ex.BoundingBox.translate(pos: Vector)` will create a new bounding box shifted by `pos`
1161
+ - `ex.BoundingBox.scale(scale: Vector)` will create a new bounding box scaled by `scale`
1162
+ - Added `isActor()` and `isCollider()` type guards
1163
+ - Added `ex.CollisionShape.draw` collision shapes can now be drawn, actor's will use these shapes if no other drawing is specified
1164
+ - Added a `getClosestLineBetween` method to `CollisionShape`'s for returning the closest line between 2 shapes ([#1071](https://github.com/excaliburjs/Excalibur/issues/1071))
1165
+
1166
+ ### Changed
1167
+
1168
+ - Change `ex.Actor.within` to use surface of object geometry instead of the center to make judgements ([#1071](https://github.com/excaliburjs/Excalibur/issues/1071))
1169
+ - Changed `moveBy`, `rotateBy`, and `scaleBy` to operate relative to the current actor position at a speed, instead of moving to an absolute by a certain time.
1170
+ - Changed event handlers in excalibur to expect non-null event objects, before `hander: (event?: GameEvent) => void` implied that event could be null. This change addresses ([#1147](https://github.com/excaliburjs/Excalibur/issues/1147)) making strict null/function checks compatible with new TypeScript.
1171
+ - Changed collision system to remove actor coupling, in addition `ex.Collider` is a new type that encapsulates all collision behavior. Use `ex.Actor.body.collider` to interact with collisions in Excalibur ([#1119](https://github.com/excaliburjs/Excalibur/issues/1119))
1172
+ - Add new `ex.Collider` type that is the housing for all collision related code
1173
+ - The source of truth for `ex.CollisionType` is now on collider, with a convenience getter on actor
1174
+ - The collision system now operates on `ex.Collider`'s not `ex.Actor`'s
1175
+ - `ex.CollisionType` has been moved to a separate file outside of `Actor`
1176
+ - CollisionType is switched to a string enum, style guide also updated
1177
+ - `ex.CollisionPair` now operates on a pair of `ex.Colliders`'s instead of `ex.Actors`'s
1178
+ - `ex.CollisionContact` now operates on a pair of `ex.Collider`'s instead of `ex.Actors`'s
1179
+ - `ex.Body` has been modified to house all the physical position/transform information
1180
+ - Integration has been moved from actor to `Body` as a physical concern
1181
+ - `useBoxCollision` has been renamed to `useBoxCollider`
1182
+ - `useCircleCollision` has been renamed to `useCircleCollider`
1183
+ - `usePolygonCollision` has been renamed to `usePolygonCollider`
1184
+ - `useEdgeCollision` has been renamed to `useEdgeCollider`
1185
+ - Renamed `ex.CollisionArea` to `ex.CollisionShape`
1186
+ - `ex.CircleArea` has been renamed to `ex.Circle`
1187
+ - `ex.PolygonArea` has been renamed to `ex.ConvexPolygon`
1188
+ - `ex.EdgeArea` has been renamed to `ex.Edge`
1189
+ - Renamed `getWidth()` & `setWidth()` to property `width`
1190
+ - Actor and BoundingBox are affected
1191
+ - Renamed `getHeight()` & `setHeight()` to property `height`
1192
+ - Actor and BoundingBox are affected
1193
+ - Renamed `getCenter()` to the property `center`
1194
+ - Actor, BoundingBox, and Cell are affected
1195
+ - Renamed `getBounds()` to the property `bounds`
1196
+ - Actor, Collider, and Shapes are affected
1197
+ - Renamed `getRelativeBounds()` to the property `localBounds`
1198
+ - Actor, Collider, and Shapes are affected
1199
+ - Renamed `moi()` to the property `inertia` (moment of inertia)
1200
+ - Renamed `restitution` to the property `bounciness`
1201
+ - Moved `collisionType` to `Actor.body.collider.type`
1202
+ - Moved `Actor.integrate` to `Actor.body.integrate`
1203
+
1204
+ ### Deprecated
1205
+
1206
+ - Legacy groups `ex.Group` will be removed in v0.24.0, use collision groups as a replacement [#1091](https://github.com/excaliburjs/Excalibur/issues/1091)
1207
+ - Legacy collision groups off `Actor` will be removed in v0.24.0, use `Actor.body.collider.collisionGroup` [#1091](https://github.com/excaliburjs/Excalibur/issues/1091)
1208
+ - Removed `NaiveCollisionBroadphase` as it was no longer used
1209
+ - Renamed methods and properties will be available until `v0.24.0`
1210
+ - Deprecated collision attributes on actor, use `Actor.body.collider`
1211
+ - `Actor.x` & `Actor.y` will be removed in `v0.24.0` use `Actor.pos.x` & `Actor.pos.y`
1212
+ - `Actor.collisionArea` will be removed in `v0.24.0` use `Actor.body.collider.shape`
1213
+ - `Actor.getLeft()`, `Actor.getRight()`, `Actor.getTop()`, and `Actor.getBottom` are deprecated
1214
+ - Use `Actor.body.collider.bounds.(left|right|top|bottom)`
1215
+ - `Actor.getGeometry()` and `Actor.getRelativeGeometry()` are removed, use `Collider`
1216
+ - Collision related properties on Actor moved to `Collider`, use `Actor.body.collider`
1217
+ - `Actor.torque`
1218
+ - `Actor.mass`
1219
+ - `Actor.moi`
1220
+ - `Actor.friction`
1221
+ - `Actor.restitution`
1222
+ - Collision related methods on Actor moved to `Collider`, use `Actor.body.collider` or `Actor.body.collider.bounds`
1223
+ - `Actor.getSideFromIntersect(intersect)` -> `BoundingBox.sideFromIntersection`
1224
+ - `Actor.collidesWithSide(actor)` -> `Actor.body.collider.bounds.intersectWithSide`
1225
+ - `Actor.collides(actor)` -> `Actor.body.collider.bounds.intersect`
1226
+
1227
+ ### Fixed
1228
+
1229
+ - Fixed issue where leaking window/document handlers was possible when calling `ex.Engine.stop()` and `ex.Engine.start()` ([#1063](https://github.com/excaliburjs/Excalibur/issues/1120))
1230
+ - Fixed wrong `Camera` and `Loader` scaling on HiDPI screens when option `suppressHiDPIScaling` is set. ([#1120](https://github.com/excaliburjs/Excalibur/issues/1120))
1231
+ - Fixed polyfill application by exporting a `polyfill()` function that can be called. ([#1132](https://github.com/excaliburjs/Excalibur/issues/1132))
1232
+ - Fixed `Color.lighten()` ([#1084](https://github.com/excaliburjs/Excalibur/issues/1084))
1233
+
1234
+ <!----------------------------------------------------------------------------------------------->
1235
+
1236
+ ## [0.22.0] - 2019-04-06
1237
+
1238
+ ### Breaking Changes
1239
+
1240
+ - `ex.BaseCamera` replaced with `Camera` ([#1087](https://github.com/excaliburjs/Excalibur/issues/1087))
1241
+
1242
+ ### Added
1243
+
1244
+ - Added `enableCanvasTransparency` property that can enable/disable canvas transparency ([#1096](https://github.com/excaliburjs/Excalibur/issues/1096))
1245
+
1246
+ ### Changed
1247
+
1248
+ - Upgraded Excalibur to TypeScript 3.3.3333 ([#1052](https://github.com/excaliburjs/Excalibur/issues/1052))
1249
+ - Added exceptions on `SpriteSheetImpl` constructor to check if the source texture dimensions are valid ([#1108](https://github.com/excaliburjs/Excalibur/issues/1108))
1250
+
1251
+ <!----------------------------------------------------------------------------------------------->
1252
+
1253
+ ## [0.21.0] - 2019-02-02
1254
+
1255
+ ### Added
1256
+
1257
+ - Added ability to automatically convert .gif files to SpriteSheet, Animations, and Sprites ([#153](https://github.com/excaliburjs/Excalibur/issues/153))
1258
+ - New `viewport` property on camera to return a world space bounding box of the current visible area ([#1078](https://github.com/excaliburjs/Excalibur/issues/1078))
1259
+
1260
+ ### Changed
1261
+
1262
+ - Updated `ex.Color` and `ex.Vector` constants to be static getters that return new instances each time, eliminating a common source of bugs ([#1085](https://github.com/excaliburjs/Excalibur/issues/1085))
1263
+ - Remove optionality of engine in constructor of Scene and \_engine private with an underscore prefix ([#1067](https://github.com/excaliburjs/Excalibur/issues/1067))
1264
+
1265
+ ### Deprecated
1266
+
1267
+ - Rename `ex.BaseCamera` to `Camera`, `ex.BaseCamera` will be removed in `v0.22.0` ([#1087](https://github.com/excaliburjs/Excalibur/issues/1087))
1268
+
1269
+ ### Fixed
1270
+
1271
+ - Fixed issue of early offscreen culling related to zooming in and out ([#1078](https://github.com/excaliburjs/Excalibur/issues/1078))
1272
+ - Fixed issue where setting `suppressPlayButton: true` blocks load in certain browsers ([#1079](https://github.com/excaliburjs/Excalibur/issues/1079))
1273
+ - Fixed issue where the absence of a pointer button caused an error in the console([#1153](https://github.com/excaliburjs/Excalibur/issues/1153))
1274
+
1275
+ <!----------------------------------------------------------------------------------------------->
1276
+
1277
+ ## [0.20.0] - 2018-12-10
1278
+
1279
+ ### Breaking Changes
1280
+
1281
+ - `ex.PauseAfterLoader` removed, use `ex.Loader` instead ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1282
+
1283
+ ### Added
1284
+
1285
+ - Added strongly-typed `EventTypes` enum to Events.ts to avoid magic strings ([#1066](https://github.com/excaliburjs/Excalibur/issues/1066))
1286
+
1287
+ ### Changed
1288
+
1289
+ - Added parameter on SpriteSheet constructor so you can define how many pixels of space are between sprites ([#1058](https://github.com/excaliburjs/Excalibur/issues/1058))
1290
+
1291
+ <!----------------------------------------------------------------------------------------------->
1292
+
1293
+ ## [0.19.1] - 2018-10-22
1294
+
1295
+ ### Fixed
1296
+
1297
+ - Fixed issue where there were missing files in the dist (Loader.css, Loader.logo.png) ([#1057](https://github.com/excaliburjs/Excalibur/issues/1057))
1298
+
1299
+ ## [0.19.0] - 2018-10-13
1300
+
1301
+ ### Changed
1302
+
1303
+ - Excalibur user documentation has now moved to [excaliburjs.com/docs](https://excaliburjs.com/docs)
1304
+ - Excalibur will now prompt for user input before starting the game to be inline with the new webaudio requirements from chrome/mobile browsers ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1305
+
1306
+ ### Deprecated
1307
+
1308
+ - `PauseAfterLoader` for iOS in favor of new click-to-play functionality built into the default `Loader` ([#1031](https://github.com/excaliburjs/Excalibur/issues/1031))
1309
+
1310
+ ### Fixed
1311
+
1312
+ - Fixed issue where Edge web audio playback was breaking ([#1047](https://github.com/excaliburjs/Excalibur/issues/1047))
1313
+ - Fixed issue where pointer events do not work in mobile ([#1044](https://github.com/excaliburjs/Excalibur/issues/1044))
1314
+ - Fixed issue where iOS was not loading by including the right polyfills ([#1043](https://github.com/excaliburjs/Excalibur/issues/1043))
1315
+ - Fixed issue where sprites do not work in Firefox ([#980](https://github.com/excaliburjs/Excalibur/issues/978))
1316
+ - Fixed issue where collision pairs could sometimes be incorrect ([#975](https://github.com/excaliburjs/Excalibur/issues/975))
1317
+ - Fixed box collision velocity resolution so that objects resting on a surface do not accumulate velocity ([#986](https://github.com/excaliburjs/Excalibur/pull/1034))
1318
+
1319
+ <!----------------------------------------------------------------------------------------------->
1320
+
1321
+ ## [0.18.0] - 2018-08-04
1322
+
1323
+ ### Breaking Changes
1324
+
1325
+ - `Sound.setVolume()` replaced with `Sound.volume`
1326
+ - `Sound.setLoop()` replaced with `Sound.loop`
1327
+
1328
+ ### Added
1329
+
1330
+ - Add `Scene.isActorInDrawTree` method to determine if an actor is in the scene's draw tree.
1331
+
1332
+ ### Fixed
1333
+
1334
+ - Fixed missing `exitviewport/enterviewport` events on Actors.on/once/off signatures ([#978](https://github.com/excaliburjs/Excalibur/issues/978))
1335
+ - Fix issue where Actors would not be properly added to a scene if they were removed from that scene during the same frame ([#979](https://github.com/excaliburjs/Excalibur/issues/979))
1336
+
1337
+ <!----------------------------------------------------------------------------------------------->
1338
+
1339
+ ## [0.17.0] - 2018-06-04
1340
+
1341
+ ### Breaking Changes
1342
+
1343
+ - Property scope `Pointer.actorsUnderPointer` changed to private
1344
+ - `Sprite.sx` replaced with `Sprite.x`
1345
+ - `Sprite.sy` replaced with `Sprite.y`
1346
+ - `Sprite.swidth` replaced with `Sprite.width`
1347
+ - `Sprite.sheight` replaced with `Sprite.height`
1348
+
1349
+ ### Added
1350
+
1351
+ - Allow timers to limit repeats to a finite number of times ([#957](https://github.com/excaliburjs/Excalibur/pull/974))
1352
+ - Convenience method on Scene to determine whether it is the current scene. Scene.isCurrentScene() ([#982](https://github.com/excaliburjs/Excalibur/issues/982))
1353
+ - New `PointerEvent.stopPropagation()` method added. Works the same way as (`https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation`)
1354
+ ([#912](https://github.com/excaliburjs/Excalibur/issues/912))
1355
+ - New `Actor.getAncestors()` method, which retrieves full array of current Actor ancestors
1356
+ - Static `Actor.defaults` prop, which implements `IActorDefaults`.
1357
+ - Native sound events now exposed
1358
+ - `volumechange` - on playing sound volume change;
1359
+ - `pause` - on playback pause;
1360
+ - `stop` - on playback stop;
1361
+ - `emptied` - on data cleanup(f.e. when setting new data);
1362
+ - `resume` - on playback resume;
1363
+ - `playbackstart` - on playback start;
1364
+ - `playbackend` - on playback end;
1365
+ - Added `Sound.instances` getter, which returns active tracks. Playing or paused
1366
+ - Added `Sound.getTrackId(track: [[AudioInstance]])` method. Which returns id of track provided,
1367
+ if it is in list of active tracks.
1368
+
1369
+ ### Changed
1370
+
1371
+ - Refactored Easing functions to be reversable ([#944](https://github.com/excaliburjs/Excalibur/pull/944))
1372
+ - Now at creation every `Actor.anchor` prop is set to default `Actor.defaults.anchor`.
1373
+ - Scene.remove(Actor) now starts the Actor.Kill event cycle ([#981](https://github.com/excaliburjs/Excalibur/issues/981))
1374
+
1375
+ ### Deprecated
1376
+
1377
+ - `CapturePointer.update()` method now doesn't propagate event to actor, just verifies pointer events for actor.
1378
+ - Added `Sound.volume` & `Sound.loop` properties as a replacement for `Sound.setVolume()` and `Sound.setLoop()`. The methods `setVolume` and `setLoop` have been marked obsolete.
1379
+
1380
+ ### Fixed
1381
+
1382
+ - Added missing variable assignments to TileMapImpl constructor ([#957](https://github.com/excaliburjs/Excalibur/pull/957))
1383
+ - Correct setting audio volume level from `value` to `setValueAtTime` to comply with deprecation warning in Chrome 59 ([#953](https://github.com/excaliburjs/Excalibur/pull/953))
1384
+ - Force HiDPI scaling to always be at least 1 to prevent visual artifacts in some browsers
1385
+ - Recalculate physics geometry when width/height change on Actor ([#948](https://github.com/excaliburjs/Excalibur/pull/948))
1386
+ - Fix camera move chaining ([#944](https://github.com/excaliburjs/Excalibur/pull/944))
1387
+ - Fix `pickSet(allowDuplicates: true)` now returns the proper length array with correct elements ([#977](https://github.com/excaliburjs/Excalibur/issues/977))
1388
+ - `Index` export order to prevent `almond.js` from creation of corrupted modules loading order.
1389
+ - `Sound.pause()` now saves correct timings.
1390
+ - Fix `ex.Vector.isValid` edgecase at `Infinity` ([#1006](https://github.com/excaliburjs/Excalibur/issues/1006))
1391
+
1392
+ <!----------------------------------------------------------------------------------------------->
1393
+
1394
+ ## [0.16.0] - 2018-03-31
1395
+
1396
+ ### Added
1397
+
1398
+ - New typesafe and override safe event lifecycle overriding, all `onEventName` handlers will no longer be dangerous to override ([#582](https://github.com/excaliburjs/Excalibur/issues/582))
1399
+ - New lifecycle event `onPreKill` and `onPostKill`
1400
+ - SpriteSheets can now produce animations from custom sprite coordinates `SpriteSheet.getAnimationByCoords(engine, coords[], speed)` ([#918](https://github.com/excaliburjs/Excalibur/issues/918))
1401
+ - Added drag and drop support for Actors ([#134](https://github.com/excaliburjs/Excalibur/issues/134))
1402
+ - New Event `enter`
1403
+ - New Event `leave`
1404
+ - New Event `pointerenter`
1405
+ - New Event `pointerleave`
1406
+ - New Event `pointerdragstart`
1407
+ - New Event `pointerdragend`
1408
+ - New Event `pointerdragmove`
1409
+ - New Event `pointerdragenter`
1410
+ - New Event `pointerdragleave`
1411
+ - New Class `PointerDragEvent` which extends `PointerEvent`
1412
+ - New Class `GlobalCoordinates` that contains Vectors for the world, the page, and the screen.
1413
+ - Added property `ICapturePointerConfig.captureDragEvents` which controls whether to emit drag events to the actor
1414
+ - Added property `PointerEvent.pointer` which equals the original pointer object
1415
+
1416
+ ### Deprecated
1417
+
1418
+ - `Sprite.sx`, `Sprite.sy`, `Sprite.swidth`, `Sprite.sheight` have been deprecated in favor of `Sprite.x`, `Sprite.y`, `Sprite.width`, `Sprite.height` ([#918](https://github.com/excaliburjs/Excalibur/issues/918))
1419
+
1420
+ ### Fixed
1421
+
1422
+ - Added missing lifecycle event handlers on Actors, Triggers, Scenes, Engine, and Camera ([#582](https://github.com/excaliburjs/Excalibur/issues/582))
1423
+ - Tile Maps now correctly render negative x-axis coordinates ([#904](https://github.com/excaliburjs/Excalibur/issues/904))
1424
+ - Offscreen culling in HiDPI mode ([#949](https://github.com/excaliburjs/Excalibur/issues/949))
1425
+ - Correct bounds check to check drawWidth/drawHeight for HiDPI
1426
+ - suppressHiDPIScaling now also suppresses pixel ratio based scaling
1427
+ - Extract and separate Sprite width/height from drawWidth/drawHeight to prevent context corruption ([#951](https://github.com/excaliburjs/Excalibur/pull/951))
1428
+
1429
+ <!----------------------------------------------------------------------------------------------->
1430
+
1431
+ ## [0.15.0] - 2018-02-16
1432
+
1433
+ ### Breaking Changes
1434
+
1435
+ - `LockedCamera` replaced with `BaseCamera.strategy.lockToActor`
1436
+ - `SideCamera` replaced with `BaseCamera.strategy.lockToActorAxis`
1437
+ - `Body.wasTouching` replaced with event type `CollisionEnd`
1438
+
1439
+ ### Added
1440
+
1441
+ - Option bag constructors have been added for commonly-used classes (see [Constructors.md](https://github.com/excaliburjs/Excalibur/blob/main/src/engine/Docs/Constructors.md)) ([#410](https://github.com/excaliburjs/Excalibur/issues/410))
1442
+
1443
+ <!----------------------------------------------------------------------------------------------->
1444
+
1445
+ ## [0.14.0] - 2017-12-02
1446
+
1447
+ ### Breaking Changes
1448
+
1449
+ - Triggers now have a new option bag constructor using the `ITriggerOptions` interface. ([#863](https://github.com/excaliburjs/Excalibur/issues/863)).
1450
+ - `update` event replaced with `postupdate` event
1451
+ - `CollisionEvent` replaced by `PreCollisionEvent`
1452
+ - `getDrawWidth()` and `getDrawHeight()` replaced with the getters `drawWidth` and `drawHeight`
1453
+ - `PointerEvent.x` and `PointerEvent.y` replaced with `PointerEvent.pos`
1454
+
1455
+ ### Added
1456
+
1457
+ - Automatic HiDPI screen detection and scaling in excalibur internals to correct blurry bitmap rendering on HiDPI screens. This feature can optionally be suppressed with `IEngineOptions.suppressHiDPIScaling`.
1458
+ - Added new line utility `Line.normal()` and `Line.distanceToPoint` ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1459
+ - Added new PolygonArea utility `PolygonArea.getClosestFace(point)` ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1460
+ - Triggers now fire an `EnterTriggerEvent` when an actor enters the trigger, and an `ExitTriggerEvent` when an actor exits the trigger. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1461
+ - Actors have a new events `CollisionStart` which when 2 actors first start colliding and `CollisionEnd` when 2 actors are no longer colliding. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1462
+ - New camera strategies implementation for following targets in a scene. Allows for custom strategies to be implemented on top of some prebuilt
1463
+ - `LockCameraToActorStrategy` which behaves like `LockedCamera` and can be switched on with `Camera.strategy.lockToActor(actor)`.
1464
+ - `LockCameraToActorAxisStrategy` which behaves like `SideCamera` and can be switched on with `Camera.strategy.lockToActorAxis(actor, ex.Axis.X)`
1465
+ - `ElasticToActorStrategy` which is a new strategy that elastically moves the camera to an actor and can be switched on with `Camera.strategy.elasticToActor(actor, cameraElasticity, cameraFriction)`
1466
+ - `CircleAroundActorStrategy` which is a new strategy that will follow an actor when a certain radius from the camera focus and can be switched on with `Camera.strategy.circleAroundActor(actor)`
1467
+
1468
+ ### Changed
1469
+
1470
+ - `Trigger` has been rebuilt to provide a better experience
1471
+ - The trigger `action` only fires when an actor enters the designated area instead of every frame of collision. ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1472
+ - Triggers can now draw like other Actors, but are still not visible by default ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1473
+
1474
+ ### Deprecated
1475
+
1476
+ - `Body.wasTouching` has been deprecated in favor of a new event type `CollisionEnd` ([#863](https://github.com/excaliburjs/Excalibur/issues/863))
1477
+ - `SideCamera` and `LockedCamera` are deprecated in favor of camera strategies
1478
+
1479
+ ### Fixed
1480
+
1481
+ - Fixed odd jumping behavior when polygons collided with the end of an edge ([#703](https://github.com/excaliburjs/Excalibur/issues/703))
1482
+
1483
+ <!----------------------------------------------------------------------------------------------->
1484
+
1485
+ ## [0.13.0] - 2017-10-07
1486
+
1487
+ ### Breaking Changes
1488
+
1489
+ - `Scene.children` replaced with `Scene.actors`
1490
+
1491
+ ### Added
1492
+
1493
+ - Convenience getters implemented `halfDrawWidth`, `halfDrawHeight`, `halfCanvasWidth`, `halfCanvasHeight`, `canvasWidth`, and `canvasHeight`.
1494
+ - New pause/unpause feature for timers to help with more robust pausing ([#885](https://github.com/excaliburjs/Excalibur/issues/885))
1495
+ - New event listening feature to listen to events only `.once(...)` then unsubscribe automatically ([#745](https://github.com/excaliburjs/Excalibur/issues/745))
1496
+ - New collision event `postcollision` to indicate if collision resolution occured ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1497
+
1498
+ ### Deprecated
1499
+
1500
+ - `PointerEvent.x` and `PointerEvent.y`, in favor of `PointerEvent.pos` ([#612](https://github.com/excaliburjs/Excalibur/issues/612))
1501
+ - `CollisionEvent` has been deprecated in favor of the more clear `PreCollisionEvent` ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1502
+ - `getDrawWidth()` and `getDrawHeight()` have been marked obsolete and changed into the getters `drawWidth` and `drawHeight` respectively in order to progressively make getters/setters consistent ([#861](https://github.com/excaliburjs/Excalibur/issues/612))
1503
+
1504
+ ### Fixed
1505
+
1506
+ - Fixed same instance of color potentially being shared, and thus mutated, between instance actors ([#840](https://github.com/excaliburjs/Excalibur/issues/840))
1507
+ - Fixed bug where active and passive type collisions would resolve when they shouldn't in rigid body physics mode ([#880](https://github.com/excaliburjs/Excalibur/issues/880))
1508
+
1509
+ <!----------------------------------------------------------------------------------------------->
1510
+
1511
+ ## [0.12.0] 2017-08-12
1512
+
1513
+ ### Breaking Changes
1514
+
1515
+ - `CollisionType.Elastic` has been removed
1516
+ - `Promises.wrap` has been replaced with `Promise.resolve`
1517
+
1518
+ ### Added
1519
+
1520
+ - Added new hsl and hex format options in Color.toString(format). rgb is the default to maintain backwards compatibility ([#852](https://github.com/excaliburjs/Excalibur/issues/852))
1521
+
1522
+ ### Changed
1523
+
1524
+ - `Animation.loop` property now to set to `true` by default ([#583](https://github.com/excaliburjs/Excalibur/issues/583))
1525
+ - Added backgroundColor to engine options as part of Engine constructor ([#846](https://github.com/excaliburjs/Excalibur/issues/846))
1526
+
1527
+ ### Deprecated
1528
+
1529
+ - `ex.Scene.children` is now `ex.Scene.actors` ([#796](https://github.com/excaliburjs/Excalibur/issues/796))
1530
+
1531
+ <!----------------------------------------------------------------------------------------------->
1532
+
1533
+ ## [0.11.0] 2017-06-10
1534
+
1535
+ ### Breaking Changes
1536
+
1537
+ - Renamed `Utils.removeItemToArray()` to `Utils.removeItemFromArray()` ([#798](https://github.com/excaliburjs/Excalibur/issues/798/))
1538
+
1539
+ ### Added
1540
+
1541
+ - Added optional volume argument to `Sound.play(volume?: number)`, which will play the Audio file at anywhere from mute (`volume` is 0.0) to full volume (`volume` is 1.0). ([#801](https://github.com/excaliburjs/Excalibur/issues/801))
1542
+ - Added another DisplayMode option: `DisplayMode.Position`. When this is selected as the displayMode type, the user must specify a new `position` option ([#781](https://github.com/excaliburjs/Excalibur/issues/781))
1543
+ - Added a static method `distance` to the `Vector` class ([#517](https://github.com/excaliburjs/Excalibur/issues/517))
1544
+ - Added `WheelEvent` event type for the `wheel` browser event, Excalibur now supports scroll wheel ([#808](https://github.com/excaliburjs/Excalibur/issues/808/))
1545
+
1546
+ ### Changed
1547
+
1548
+ - Camera zoom over time now returns a promise that resolves on completion ([#800](https://github.com/excaliburjs/Excalibur/issues/800))
1549
+ - Edge builds have more descriptive versions now containing build number and Git commit hash (e.g. `0.10.0-alpha.105#commit`) ([#777](https://github.com/excaliburjs/Excalibur/issues/777))
1550
+
1551
+ ### Fixed
1552
+
1553
+ - Fixed camera zoom over time, before it did not work at all ([#800](https://github.com/excaliburjs/Excalibur/issues/800))
1554
+ - Fixed semi-colon key not being detected on Firefox and Opera. ([#789](https://github.com/excaliburjs/Excalibur/issues/789))
1555
+
1556
+ <!----------------------------------------------------------------------------------------------->
1557
+
1558
+ ## [0.10.0] 2017-04-07
1559
+
1560
+ ### Breaking Changes
1561
+
1562
+ - Rename `Engine.width` and `Engine.height` to be `Engine.canvasWidth` and `Engine.canvasHeight` ([#591](https://github.com/excaliburjs/Excalibur/issues/591))
1563
+ - Rename `Engine.getWidth` and `Engine.getHeight` to be `Engine.getDrawWidth` and `Engine.getDrawHeight` ([#591](https://github.com/excaliburjs/Excalibur/issues/591))
1564
+ - Changed `GameEvent` to be a generic type for TypeScript, allowing strongly typing the `target` property. ([#724](https://github.com/excaliburjs/Excalibur/issue/724))
1565
+ - Removed `Body.useEdgeCollision()` parameter `center` ([#724](https://github.com/excaliburjs/Excalibur/issue/724))
1566
+
1567
+ ### Added
1568
+
1569
+ - Added `Engine.isPaused` to retrieve the running status of Engine ([#750](https://github.com/excaliburjs/Excalibur/issues/750))
1570
+ - Added `Engine.getWorldBounds` to provide a quick way to get the top left corner and bottom right corner of the screen ([#729](https://github.com/excaliburjs/Excalibur/issues/729))
1571
+ - Added predraw and postdraw events to `Engine` class. These events happen when prior to and after a draw ([#744](https://github.com/excaliburjs/Excalibur/issues/744))
1572
+ - Added Perlin noise generation helper `ex.PerlinGenerator` for 1d, 2d, and 3d noise, along with drawing utilities ([#491](https://github.com/excaliburjs/Excalibur/issues/491))
1573
+ - Added font styles support for normal, italic, and oblique in addition to bold text support ([#563](https://github.com/excaliburjs/Excalibur/issues/563))
1574
+
1575
+ ### Changed
1576
+
1577
+ - Update project to use TypeScript 2.2.2 ([#762](https://github.com/excaliburjs/Excalibur/issues/762))
1578
+ - Changed `Util.extend` to include `Object.assign` functionality ([#763](https://github.com/excaliburjs/Excalibur/issues/763))
1579
+
1580
+ ### Fixed
1581
+
1582
+ - Update the order of the affine transformations to fix bug when scaling and rotating Actors ([#770](https://github.com/excaliburjs/Excalibur/issues/770))
1583
+
1584
+ <!----------------------------------------------------------------------------------------------->
1585
+
1586
+ ## [0.9.0] 2017-02-09
1587
+
1588
+ ### Added
1589
+
1590
+ - Added `preupdate`, `postupdate`, `predraw`, `postdraw` events to TileMap
1591
+ - Added `ex.Random` with seed support via Mersenne Twister algorithm ([#538](https://github.com/excaliburjs/Excalibur/issues/538))
1592
+ - Added extended feature detection and reporting to `ex.Detector` ([#707](https://github.com/excaliburjs/Excalibur/issues/707))
1593
+ - `ex.Detector.getBrowserFeatures()` to retrieve the support matrix of the current browser
1594
+ - `ex.Detector.logBrowserFeatures()` to log the support matrix to the console (runs at startup when in Debug mode)
1595
+ - Added `@obsolete` decorator to help give greater visibility to deprecated methods ([#684](https://github.com/excaliburjs/Excalibur/issues/684))
1596
+ - Added better support for module loaders and TypeScript importing. See [Installation](https://excaliburjs.com/docs/installation) docs for more info. ([#606](https://github.com/excaliburjs/Excalibur/issues/606))
1597
+ - Added new Excalibur example project templates ([#706](https://github.com/excaliburjs/Excalibur/issues/706), [#733](https://github.com/excaliburjs/Excalibur/issues/733)):
1598
+ - [Browserify](https://github.com/excaliburjs/example-ts-browserify)
1599
+ - [Webpack](https://github.com/excaliburjs/example-ts-webpack)
1600
+ - [Angular2](https://github.com/excaliburjs/example-ts-angular2)
1601
+ - [Universal Windows Platform (UWP)](https://github.com/excaliburjs/example-uwp)
1602
+ - [Apache Cordova](https://github.com/excaliburjs/example-cordova)
1603
+ - [Xamarin Forms](https://github.com/excaliburjs/example-xamarin)
1604
+ - [Electron](https://github.com/excaliburjs/example-electron)
1605
+ - Added `Pointer.lastPagePos`, `Pointer.lastScreenPos` and `Pointer.lastWorldPos` that store the last pointer move coordinates ([#509](https://github.com/excaliburjs/Excalibur/issues/509))
1606
+
1607
+ ### Changed
1608
+
1609
+ - Changed `Util.clamp` to use math libraries ([#536](https://github.com/excaliburjs/Excalibur/issues/536))
1610
+ - Upgraded to TypeScript 2.1.4 ([#726](https://github.com/excaliburjs/Excalibur/issues/726))
1611
+
1612
+ ### Fixed
1613
+
1614
+ - Fixed Scene/Actor activation and initialization order, actors were not being initialized before scene activation causing bugs ([#661](https://github.com/excaliburjs/Excalibur/issues/661))
1615
+ - Fixed bug where the engine would not load if a loader was provided without any resources ([#565](https://github.com/excaliburjs/Excalibur/issues/565))
1616
+ - Fixed bug where an Actor/UIActor/TileMap added during a Timer callback would not initialize before running `draw` loop. ([#584](https://github.com/excaliburjs/Excalibur/issues/584))
1617
+ - Fixed bug where on slower systems a Sprite may not be drawn on the first `draw` frame ([#748](https://github.com/excaliburjs/Excalibur/issues/748))
1618
+
1619
+ <!----------------------------------------------------------------------------------------------->
1620
+
1621
+ ## [0.8.0] 2016-12-04
1622
+
1623
+ ### Added
1624
+
1625
+ - `ex.Vector.magnitude` alias that calls `ex.Vector.distance()` to get magnitude of Vector ([#663](https://github.com/excaliburjs/Excalibur/issues/663))
1626
+ - Added new `ex.Line` utilities ([#662](https://github.com/excaliburjs/Excalibur/issues/662)):
1627
+ - `ex.Line.slope` for the raw slope (m) value
1628
+ - `ex.Line.intercept` for the Y intercept (b) value
1629
+ - `ex.Line.findPoint(x?, y?)` to find a point given an X or a Y value
1630
+ - `ex.Line.hasPoint(x, y, threshold)` to determine if given point lies on the line
1631
+ - Added `Vector.One` and `Vector.Half` constants ([#649](https://github.com/excaliburjs/Excalibur/issues/649))
1632
+ - Added `Vector.isValid` to check for null, undefined, Infinity, or NaN vectors method as part of ([#665](https://github.com/excaliburjs/Excalibur/issues/665))
1633
+ - Added `ex.Promise.resolve` and `ex.Promise.reject` static methods ([#501](https://github.com/excaliburjs/Excalibur/issues/501))
1634
+ - PhantomJS based testing infrastructure to accurately test browser features such as image diffs on canvas drawing ([#521](https://github.com/excaliburjs/Excalibur/issues/521))
1635
+ - Added some basic debug stat collection to Excalibur ([#97](https://github.com/excaliburjs/Excalibur/issues/97)):
1636
+ - Added `ex.Engine.stats` to hold frame statistic information
1637
+ - Added `ex.Engine.debug` to hold debug flags and current frame stats
1638
+ - Added `preframe` and `postframe` events to `Engine` as hooks
1639
+ - Added ex.Physics statistics to the Excalibur statistics collection
1640
+ - Added new fast body collision detection to Excalibur to prevent fast moving objects from tunneling through other objects ([#665](https://github.com/excaliburjs/Excalibur/issues/665))
1641
+ - Added DynamicTree raycast to query the scene for bounds that intersect a ray
1642
+ - Added fast BoundingBox raycast test
1643
+
1644
+ ### Changed
1645
+
1646
+ - Internal physics names refactored to be more readable and to use names more in line with game engine terminology (explicit broadphase and narrowphase called out)
1647
+
1648
+ ### Deprecated
1649
+
1650
+ - `ex.Promise.wrap` ([#501](https://github.com/excaliburjs/Excalibur/issues/501))
1651
+
1652
+ ### Fixed
1653
+
1654
+ - Fix `Actor.oldPos` and `Actor.oldVel` values on update ([#666](https://github.com/excaliburjs/Excalibur/issues/666))
1655
+ - Fix `Label.getTextWidth` returns incorrect result ([#679](https://github.com/excaliburjs/Excalibur/issues/679))
1656
+ - Fix semi-transparent PNGs appear garbled ([#687](https://github.com/excaliburjs/Excalibur/issues/687))
1657
+ - Fix incorrect code coverage metrics, previously our test process was reporting higher than actual code coverage ([#521](https://github.com/excaliburjs/Excalibur/issues/521))
1658
+ - Fix `Actor.getBounds()` and `Actor.getRelativeBounds()` to return accurate bounding boxes based on the scale and rotation of actors. ([#692](https://github.com/excaliburjs/Excalibur/issues/692))
1659
+
1660
+ <!----------------------------------------------------------------------------------------------->
1661
+
1662
+ ## [0.7.1] - 2016-10-03
1663
+
1664
+ ### Breaking Changes
1665
+
1666
+ - Refactored and modified Sound API ([#644](https://github.com/excaliburjs/Excalibur/issues/644))
1667
+ - `Sound.setData` now returns a Promise which differs from previous API
1668
+ - Removed internal `FallbackAudio` and `Sound` classes and replaced with single `Sound` class
1669
+ - Added `AudioTagInstance` and `WebAudioInstance` internal classes
1670
+
1671
+ ### Added
1672
+
1673
+ - `ex.Promise.join(Promise[])` support (in addition to `...promises` support) ([#642](https://github.com/excaliburjs/Excalibur/issues/642))
1674
+ - Moved build artifacts to separate [excalibur-dist](https://github.com/excaliburjs/excalibur-dist) repository ([#648](https://github.com/excaliburjs/Excalibur/issues/648))
1675
+ - `ex.Events` namespace and typed event handler `.on(...)` overloads for default events on core excalibur objects ([#639](https://github.com/excaliburjs/Excalibur/issues/639))
1676
+ - `Engine.timescale` property (default: 1.0) to add time-scaling to the engine for time-based movements ([#543](https://github.com/excaliburjs/Excalibur/issues/543))
1677
+ - Two new parameters to `ex.Util.DrawUtil.line` that accept a line thickness and end-cap style ([#658](https://github.com/excaliburjs/Excalibur/issues/658))
1678
+
1679
+ ### Fixed
1680
+
1681
+ - `Actor.actions.fade` properly supporting fading between 0 and 1 and vice versa ([#640](https://github.com/excaliburjs/Excalibur/issues/640))
1682
+ - Fix issues with audio offset tracking and muting while game is invisible ([#644](https://github.com/excaliburjs/Excalibur/issues/644))
1683
+ - `Actor.getHeight()` and `Actor.getWidth()` now take into account parent scaling ([#645](https://github.com/excaliburjs/Excalibur/issues/645))
1684
+ - `Actor.debugDraw` now works properly for child actors ([#505](https://github.com/excaliburjs/Excalibur/issues/505), [#645](https://github.com/excaliburjs/Excalibur/issues/645))
1685
+ - Sprite culling was double scaling calculations ([#646](https://github.com/excaliburjs/Excalibur/issues/646))
1686
+ - Fix negative zoom sprite culling ([#539](https://github.com/excaliburjs/Excalibur/issues/539))
1687
+ - Fix Actor updates happening more than once per frame, causing multiple pointer events to trigger ([#643](https://github.com/excaliburjs/Excalibur/issues/643))
1688
+ - Fix `Actor.on('pointerup')` capturePointer events opt-in on event handler. The opt-in was triggering correctly for handlers on 'pointerdown' and 'pointermove', but not 'pointerup'.
1689
+
1690
+ <!----------------------------------------------------------------------------------------------->
1691
+
1692
+ ## [0.7.0] - 2016-08-29
1693
+
1694
+ ### Breaking Changes
1695
+
1696
+ - Code marked 'Obsolete' has been removed ([#625](https://github.com/excaliburjs/Excalibur/issues/625), [#603](https://github.com/excaliburjs/Excalibur/issues/603))
1697
+ - `Actor`
1698
+ - `addEventListener`
1699
+ - `getWorldX`, `getWorldY`
1700
+ - `clearActions`, `easeTo`, `moveTo`, `moveBy`, `rotateTo`, `rotateBy`, `scaleTo`, `scaleBy`, `blink`, `fade`, `delay`, `die`, `callMethod`, `asPromise`, `repeat`, `repeatForever`, `follow`, `meet`
1701
+ - `Class`
1702
+ - `addEventListener`, `removeEventListener`
1703
+ - `Engine`
1704
+ - parameterized constructor
1705
+ - `addChild`, `removeChild`
1706
+ - `UpdateEvent` removed
1707
+ - `Scene.addChild` and `Scene.removeChild` are now protected
1708
+ - Removed ex.Template and ex.Binding ([#627](https://github.com/excaliburjs/Excalibur/issues/627))
1709
+
1710
+ ### Added
1711
+
1712
+ - New physics system, physical properties for Actors ([#557](https://github.com/excaliburjs/Excalibur/issues/557), [#472](https://github.com/excaliburjs/Excalibur/issues/472))
1713
+ - Read The Docs support for documentation ([#558](https://github.com/excaliburjs/Excalibur/issues/558))
1714
+ - Continuous integration builds unstable packages and publishes them ([#567](https://github.com/excaliburjs/Excalibur/issues/567))
1715
+ - Sound and Texture resources can now process data ([#574](https://github.com/excaliburjs/Excalibur/issues/574))
1716
+ - Actors now throw an event when they are killed ([#585](https://github.com/excaliburjs/Excalibur/issues/585))
1717
+ - "Tap to Play" button for iOS to fulfill platform audio requirements ([#262](https://github.com/excaliburjs/Excalibur/issues/262))
1718
+ - Generic lerp/easing functions ([#320](https://github.com/excaliburjs/Excalibur/issues/320))
1719
+ - Whitespace checking for conditional statements ([#634](https://github.com/excaliburjs/Excalibur/issues/634))
1720
+ - Initial support for [Yeoman generator](https://github.com/excaliburjs/generator-excalibur) ([#578](https://github.com/excaliburjs/Excalibur/issues/578))
1721
+
1722
+ ### Changed
1723
+
1724
+ - Upgraded Jasmine testing framework to version 2.4 ([#126](https://github.com/excaliburjs/Excalibur/issues/126))
1725
+ - Updated TypeScript to 1.8 ([#596](https://github.com/excaliburjs/Excalibur/issues/596))
1726
+ - Improved contributing document ([#560](https://github.com/excaliburjs/Excalibur/issues/560))
1727
+ - Improved local and global coordinate tracking for Actors ([#60](https://github.com/excaliburjs/Excalibur/issues/60))
1728
+ - Updated loader image to match new logo and theme ([#615](https://github.com/excaliburjs/Excalibur/issues/615))
1729
+ - Ignored additional files for Bower publishing ([#614](https://github.com/excaliburjs/Excalibur/issues/614))
1730
+
1731
+ ### Fixed
1732
+
1733
+ - Actions on the action context threw an error ([#564](https://github.com/excaliburjs/Excalibur/issues/564))
1734
+ - Actor `getLeft()`, `getTop()`, `getBottom()` and `getRight()` did not respect anchors ([#568](https://github.com/excaliburjs/Excalibur/issues/568))
1735
+ - Actor.actions.rotateTo and rotateBy were missing RotationType ([#575](https://github.com/excaliburjs/Excalibur/issues/575))
1736
+ - Actors didn't behave correctly when killed and re-added to game ([#586](https://github.com/excaliburjs/Excalibur/issues/586))
1737
+ - Default fontFamily for Label didn't work with custom FontSize or FontUnit ([#471](https://github.com/excaliburjs/Excalibur/issues/471))
1738
+ - Fixed issues with testing sandbox ([#609](https://github.com/excaliburjs/Excalibur/issues/609))
1739
+ - Issue with camera lerp ([#555](https://github.com/excaliburjs/Excalibur/issues/555))
1740
+ - Issue setting initial opacity on Actors ([#511](https://github.com/excaliburjs/Excalibur/issues/511))
1741
+ - Children were not being updated by their parent Actors ([#616](https://github.com/excaliburjs/Excalibur/issues/616))
1742
+ - Center-anchored Actors were not drawn at the correct canvas coordinates when scaled ([#618](https://github.com/excaliburjs/Excalibur/issues/618))
1743
+
1744
+ <!----------------------------------------------------------------------------------------------->
1745
+
1746
+ ## [0.6.0] - 2016-01-19
1747
+
1748
+ ### Added
1749
+
1750
+ - GamePads now have a connection event ([#473](https://github.com/excaliburjs/Excalibur/issues/473))
1751
+ - Unit circle drawing for debug mode ([#467](https://github.com/excaliburjs/Excalibur/issues/467))
1752
+ - Engine now fails gracefully in unsupported browsers ([#386](https://github.com/excaliburjs/Excalibur/issues/386))
1753
+ - Global fatal error catching ([#381](https://github.com/excaliburjs/Excalibur/issues/381))
1754
+ - MockEngine for testing ([#360](https://github.com/excaliburjs/Excalibur/issues/360))
1755
+ - Code coverage reports via Coveralls ([#169](https://github.com/excaliburjs/Excalibur/issues/169))
1756
+ - SpriteFonts now support different target colors ([#148](https://github.com/excaliburjs/Excalibur/issues/148))
1757
+ - Cameras now have position, velocity, and acceleration properties ([#490](https://github.com/excaliburjs/Excalibur/issues/490))
1758
+
1759
+ ### Changed
1760
+
1761
+ - `Actor.addChild()` changed to `Actor.add()` ([#519](https://github.com/excaliburjs/Excalibur/issues/519))
1762
+ - `Actor.removeChild()` changed to `Actor.remove()` ([#519](https://github.com/excaliburjs/Excalibur/issues/519))
1763
+ - Documentation is only deployed on changes to the main git branch ([#483](https://github.com/excaliburjs/Excalibur/issues/483))
1764
+ - A warning message is now displayed if no supported audio format is provided for a browser ([#476](https://github.com/excaliburjs/Excalibur/issues/476))
1765
+ - Updated TSLint directory scanning ([#442](https://github.com/excaliburjs/Excalibur/issues/442), [#443](https://github.com/excaliburjs/Excalibur/issues/443), [#447](https://github.com/excaliburjs/Excalibur/issues/447))
1766
+ - Deprecated older methods ([#399](https://github.com/excaliburjs/Excalibur/issues/399))
1767
+ - Changed API for Key events ([#502](https://github.com/excaliburjs/Excalibur/issues/502))
1768
+
1769
+ ### Fixed
1770
+
1771
+ - Actors now properly collide with TileMaps ([#541](https://github.com/excaliburjs/Excalibur/issues/541))
1772
+ - Gamepad detection is fixed ([#460](https://github.com/excaliburjs/Excalibur/issues/460), [#518](https://github.com/excaliburjs/Excalibur/issues/518))
1773
+ - Actor scale now correctly occurs after translation ([#514](https://github.com/excaliburjs/Excalibur/issues/514))
1774
+ - Actors now respect the `visible` property of their children ([#513](https://github.com/excaliburjs/Excalibur/issues/513))
1775
+ - Fixed centered sprite drawing on Actors ([#507](https://github.com/excaliburjs/Excalibur/issues/507))
1776
+ - Animation `freezeframe` is now properly set to last Animation frame by default ([#506](https://github.com/excaliburjs/Excalibur/issues/506))
1777
+ - It is no longer possible to add the same Actor to a scene multiple times ([#504](https://github.com/excaliburjs/Excalibur/issues/504))
1778
+ - Text alignment on SpriteFonts with Labels is fixed ([#484](https://github.com/excaliburjs/Excalibur/issues/484))
1779
+ - Engine pointer events properly fire when a camera is zoomed ([#480](https://github.com/excaliburjs/Excalibur/issues/480))
1780
+ - Fixed a small bug in rotateTo ([#469](https://github.com/excaliburjs/Excalibur/issues/469))
1781
+ - Setting Label colors now works ([#468](https://github.com/excaliburjs/Excalibur/issues/468))
1782
+ - Labels now respect set font ([#372](https://github.com/excaliburjs/Excalibur/issues/372))
1783
+ - UIActor now respects visibility ([#368](https://github.com/excaliburjs/Excalibur/issues/368))
1784
+ - Solid color Actors now respect opacity ([#364](https://github.com/excaliburjs/Excalibur/issues/364))
1785
+ - TileMap culling uses proper width and height values ([#293](https://github.com/excaliburjs/Excalibur/issues/293))
1786
+ - Font API changed while fixing font size issue
1787
+
1788
+ <!----------------------------------------------------------------------------------------------->
1789
+
1790
+ ## [0.5.1] - 2015-06-26
1791
+
1792
+ ### Added
1793
+
1794
+ - Actors can now recursively check the containment of their children ([#453](https://github.com/excaliburjs/Excalibur/issues/453))
1795
+ - `RotateTo` and `RotateBy` now support ShortestPath, LongestPath, Clockwise, and Counterclockwise rotation ([#461](https://github.com/excaliburjs/Excalibur/issues/461))
1796
+
1797
+ ### Fixed
1798
+
1799
+ - `Actor.contains()` did not work for child actors ([#147](https://github.com/excaliburjs/Excalibur/issues/147))
1800
+ - Unexpected placement occasionally occurred for Actors with certain collision types ([#319](https://github.com/excaliburjs/Excalibur/issues/319))
1801
+ - Velocity wasn’t updating properly when fixed and active Actors collided ([#454](https://github.com/excaliburjs/Excalibur/issues/454))
1802
+ - Actors removed with actor.kill() were not being removed from the draw tree ([#458](https://github.com/excaliburjs/Excalibur/issues/458))
1803
+ - `RotateTo` and `RotateBy` weren’t using the shortest angle by default ([#282](https://github.com/excaliburjs/Excalibur/issues/282))
1804
+ - Sprite width and height didn’t take scaling into account ([#437](https://github.com/excaliburjs/Excalibur/issues/437))
1805
+ - Fixed error message when calling `Actor.setDrawing()` on a non-existent key ([#456](https://github.com/excaliburjs/Excalibur/issues/456))
1806
+
1807
+ <!----------------------------------------------------------------------------------------------->
1808
+
1809
+ ## [0.5.0] - 2015-06-03
1810
+
1811
+ ### Added
1812
+
1813
+ - resource cache busting ([#280](https://github.com/excaliburjs/Excalibur/issues/280))
1814
+ - HTML5 Gamepad API support ([#15](https://github.com/excaliburjs/Excalibur/issues/15))
1815
+ - Browserify support ([#312](https://github.com/excaliburjs/Excalibur/issues/312))
1816
+ - ‘blur’ and ‘visible’ events to detect when the browser window a game is in has focus ([#385](https://github.com/excaliburjs/Excalibur/issues/385))
1817
+ - Z-index support for Actors, allowing for specific ordered drawing ([#356](https://github.com/excaliburjs/Excalibur/issues/356))
1818
+ - unlocked drawing for UI elements ([#354](https://github.com/excaliburjs/Excalibur/issues/354))
1819
+ - `Promise.join()` to return a new promise when promises passed to it have been resolved ([#341](https://github.com/excaliburjs/Excalibur/issues/341), [#340](https://github.com/excaliburjs/Excalibur/issues/340))
1820
+ - ability to skip a frame in an animation ([#313](https://github.com/excaliburjs/Excalibur/issues/313))
1821
+ - You can now remove effects from `IDrawable` objects ([#303](https://github.com/excaliburjs/Excalibur/issues/303))
1822
+ - generic `Resource` type to allow for XHR loading ([#297](https://github.com/excaliburjs/Excalibur/issues/297))
1823
+ - gray `Color` constants ([#209](https://github.com/excaliburjs/Excalibur/issues/209))
1824
+
1825
+ ### Changed
1826
+
1827
+ - Renamed `engine.addChild()` to `engine.add()` ([#288](https://github.com/excaliburjs/Excalibur/issues/288))
1828
+ - Renamed `setSpriteTransformationPoint()` to `setAnchor()` ([#269](https://github.com/excaliburjs/Excalibur/issues/269))
1829
+ - Renamed `TopCamera` to `LockedCamera` ([#184](https://github.com/excaliburjs/Excalibur/issues/184))
1830
+ - Renamed `Actor.pipeline` to `Actor.traits` ([#351](https://github.com/excaliburjs/Excalibur/issues/351))
1831
+ - Actor anchoring now uses center origin by default ([#299](https://github.com/excaliburjs/Excalibur/issues/299))
1832
+ - Actor updates (movement, collision, etc.) now use a pipeline ([#330](https://github.com/excaliburjs/Excalibur/issues/330))
1833
+ - Organized classes, files, and project structure ([#182](https://github.com/excaliburjs/Excalibur/issues/182), [#347](https://github.com/excaliburjs/Excalibur/issues/347))
1834
+ - Improvements to collision detection ([#345](https://github.com/excaliburjs/Excalibur/issues/345), [#332](https://github.com/excaliburjs/Excalibur/issues/332))
1835
+ - Loop optimizations for performance improvements ([#296](https://github.com/excaliburjs/Excalibur/issues/296))
1836
+ - Updated to TypeScript 1.4 ([#393](https://github.com/excaliburjs/Excalibur/issues/393))
1837
+ - Improved pointer event handling so touch and mouse events can be captured together ([#334](https://github.com/excaliburjs/Excalibur/issues/334))
1838
+ - Improved `Point` and `Vector` methods and rotation ([#323](https://github.com/excaliburjs/Excalibur/issues/323), [#302](https://github.com/excaliburjs/Excalibur/issues/302))
1839
+ - `Color` is now treated as a vector to allow for changes ([#298](https://github.com/excaliburjs/Excalibur/issues/298))
1840
+ - Cleaned up event type consistency ([#273](https://github.com/excaliburjs/Excalibur/issues/273))
1841
+ - There is now a default instance of a `Camera` ([#270](https://github.com/excaliburjs/Excalibur/issues/270))
1842
+ - TSLint now used to enforce code quality
1843
+
1844
+ ### Fixed
1845
+
1846
+ - A Sprite’s dimensions weren’t validated against the size of its texture ([#318](https://github.com/excaliburjs/Excalibur/issues/318))
1847
+ - Improved sprite drawing performance issues ([#316](https://github.com/excaliburjs/Excalibur/issues/316))
1848
+ - Actors were sometimes throwing duplicate collision events ([#284](https://github.com/excaliburjs/Excalibur/issues/284))
1849
+ - Actors were not setting their initial opacity correctly ([#307](https://github.com/excaliburjs/Excalibur/issues/307))
1850
+ - Particle emitters couldn’t emit less than 60 particles per second ([#301](https://github.com/excaliburjs/Excalibur/issues/301))
1851
+ - Fixed issue with TileMap collisions ([#286](https://github.com/excaliburjs/Excalibur/issues/286))
1852
+ - Animations with duplicate frames weren’t being created correctly ([#283](https://github.com/excaliburjs/Excalibur/issues/283))
1853
+ - Separated drawing and collision logic for CollisionMaps (now TileMap) ([#285](https://github.com/excaliburjs/Excalibur/issues/285))
1854
+ - Errors in promises were being swallowed if no error callback was supplied ([#337](https://github.com/excaliburjs/Excalibur/issues/337))
1855
+ - A null promise was being returned if no loader was given to `Engine.start()` ([#335](https://github.com/excaliburjs/Excalibur/issues/335))
1856
+ - Changed default collisionType to ‘PreventCollision’ ([#324](https://github.com/excaliburjs/Excalibur/issues/324))
1857
+ - Color didn’t handle alpha = 0 correctly ([#257](https://github.com/excaliburjs/Excalibur/issues/257))
1858
+ - Blink action usage was confusing ([#279](https://github.com/excaliburjs/Excalibur/issues/279))
1859
+ - Couldn’t use the `width` and `height` properties of a Texture after it loaded ([#355](https://github.com/excaliburjs/Excalibur/issues/355))
1860
+ - Using `on(‘pointerdown’)` would not automatically enable pointer capturing ([#398](https://github.com/excaliburjs/Excalibur/issues/398))
1861
+ - Unsubscribing from an event sometimes removed other event handlers ([#366](https://github.com/excaliburjs/Excalibur/issues/366))
1862
+ - `Actor.setCenterDrawing()` was hard-coded to true ([#375](https://github.com/excaliburjs/Excalibur/issues/375))
1863
+ - Console was undefined in IE9. ([#378](https://github.com/excaliburjs/Excalibur/issues/378))
1864
+ - Pointers were not handling mobile Safari touch events ([#382](https://github.com/excaliburjs/Excalibur/issues/382))
1865
+ - Fixed debug mode drawing ([#274](https://github.com/excaliburjs/Excalibur/issues/274))
1866
+ - Flipping a sprite didn’t factor in scaling ([#401](https://github.com/excaliburjs/Excalibur/issues/401))
1867
+ - Sound continued to play when the game was paused ([#383](https://github.com/excaliburjs/Excalibur/issues/383))
1868
+ - `UIActor.kill()` didn’t remove the actor ([#373](https://github.com/excaliburjs/Excalibur/issues/373))
1869
+ - Passing an empty array to `ex.Promise.join` resulted in unresolved promises ([#365](https://github.com/excaliburjs/Excalibur/issues/365))
1870
+ - MouseUp / TouchEnd events weren’t capture correctly if outside of canvas ([#374](https://github.com/excaliburjs/Excalibur/issues/374))
1871
+ - Clearing actions from an empty action queue caused problems ([#409](https://github.com/excaliburjs/Excalibur/issues/409))
1872
+ - `Scene.onActivate()` was being called before Scene.onInitialize() ([#418](https://github.com/excaliburjs/Excalibur/issues/418))
1873
+ - New z-indexing wasn’t cleaning up after itself ([#433](https://github.com/excaliburjs/Excalibur/issues/433))
1874
+ - Fixed issue with world / screen coordinates in UIActors ([#371](https://github.com/excaliburjs/Excalibur/issues/371))
1875
+ - Fade action didn’t work for text ([#261](https://github.com/excaliburjs/Excalibur/issues/261))
1876
+ - Fade action didn’t work for plain-color actors ([#256](https://github.com/excaliburjs/Excalibur/issues/256))
1877
+ - Collision events weren’t being published for both collision participants ([#254](https://github.com/excaliburjs/Excalibur/issues/254))
1878
+ - The loading bar was misrepresenting the time taken to decode audio files ([#106](https://github.com/excaliburjs/Excalibur/issues/106))
1879
+ - `actor.getCenter()` wasn’t returning the correct value ([#438](https://github.com/excaliburjs/Excalibur/issues/438))
1880
+ - Cameras were on the engine instead of the scene, resulting in scene transition problems ([#277](https://github.com/excaliburjs/Excalibur/issues/277))
1881
+ - Actors with sprites larger than the actor would disappear prematurely from the screen ([#287](https://github.com/excaliburjs/Excalibur/issues/287))
1882
+ - Derived classes can now use offscreen culling ([#294](https://github.com/excaliburjs/Excalibur/issues/294))
1883
+ - Fixed issue with TileMap culling ([#444](https://github.com/excaliburjs/Excalibur/issues/444))
1884
+
1885
+ <!----------------------------------------------------------------------------------------------->
1886
+
1887
+ ## [0.2.2] - 2014-04-15
1888
+
1889
+ ### Fixed
1890
+
1891
+ - Removed extra declarations file from package that was causing visual studio build problems
1892
+
1893
+ <!----------------------------------------------------------------------------------------------->
1894
+
1895
+ ## [0.2.0] - 2014-04-09
1896
+
1897
+ ### Added
1898
+
1899
+ - Visual Studio 2013 template support ([#139](https://github.com/excaliburjs/Excalibur/issues/139))
1900
+ - Collision Map for building large static collidable levels ([#33](https://github.com/excaliburjs/Excalibur/issues/33))
1901
+ - Redundant fallback sound sources for cross browser support ([#125](https://github.com/excaliburjs/Excalibur/issues/125))
1902
+ - Particle Emitter implementation ([#52](https://github.com/excaliburjs/Excalibur/issues/52))
1903
+ - Trigger implementation ([#91](https://github.com/excaliburjs/Excalibur/issues/91))
1904
+ - Timer implementation ([#76](https://github.com/excaliburjs/Excalibur/issues/76))
1905
+ - Camera Effects: zoom, shake ([#55](https://github.com/excaliburjs/Excalibur/issues/55))
1906
+ - Polygon IDrawable ([#93](https://github.com/excaliburjs/Excalibur/issues/93))
1907
+ - Alias 'on' and 'off' for 'addEventListener' and 'removeEventListener' ([#229](https://github.com/excaliburjs/Excalibur/issues/229))
1908
+ - Optimized draw so only on screen elements are drawn ([#239](https://github.com/excaliburjs/Excalibur/issues/239))
1909
+ - Support Scale in the x and y directions for actors ([#118](https://github.com/excaliburjs/Excalibur/issues/118))
1910
+ - Added notion of collision grouping ([#100](https://github.com/excaliburjs/Excalibur/issues/100))
1911
+ - New Events like 'enterviewport', 'exitviewport', and 'initialize' ([#215](https://github.com/excaliburjs/Excalibur/issues/215), [#224](https://github.com/excaliburjs/Excalibur/issues/224))
1912
+ - Textures allow direct pixel manipulation ([#155](https://github.com/excaliburjs/Excalibur/issues/155))
1913
+ - Static Logger improvements with '.debug()', '.info()', '.warn()' and '.error()' ([#81](https://github.com/excaliburjs/Excalibur/issues/81))
1914
+ - Added callMethod() action to actor ([#244](https://github.com/excaliburjs/Excalibur/issues/244))
1915
+ - Added fade() action to actor ([#104](https://github.com/excaliburjs/Excalibur/issues/104))
1916
+ - Added follow() and meet() action to actor ([#77](https://github.com/excaliburjs/Excalibur/issues/77))
1917
+
1918
+ ### Changed
1919
+
1920
+ - 'engine.goToScene()' replaces push and pop ([#168](https://github.com/excaliburjs/Excalibur/issues/168))
1921
+ - More intuitive starting workflow ([#149](https://github.com/excaliburjs/Excalibur/issues/149))
1922
+ - Collisions are now more concrete on actors with CollisionType ([#241](https://github.com/excaliburjs/Excalibur/issues/241))
1923
+ - Namespace all types with 'ex' to prevent Excalibur from polluting the global ([#87](https://github.com/excaliburjs/Excalibur/issues/87))
1924
+ - Refactor SceneNode to Scene ([#135](https://github.com/excaliburjs/Excalibur/issues/135))
1925
+ - Refactor keys ([#115](https://github.com/excaliburjs/Excalibur/issues/115))
1926
+ - Build system with Grunt ([#92](https://github.com/excaliburjs/Excalibur/issues/92))
1927
+
1928
+ ### Fixed
1929
+
1930
+ - Collision event was firing after other actor has been killed ([#228](https://github.com/excaliburjs/Excalibur/issues/228))
1931
+ - Additional actor was killed when actor.kill() is called ([#226](https://github.com/excaliburjs/Excalibur/issues/226))
1932
+ - Fixed loading bar ([#195](https://github.com/excaliburjs/Excalibur/issues/195))
1933
+ - ex.Color.Yellow constant was wrong ([#122](https://github.com/excaliburjs/Excalibur/issues/122))
1934
+ - removeEventListener did not exist off of engine ([#175](https://github.com/excaliburjs/Excalibur/issues/175))
1935
+ - Excalibur promises should not swallow exceptions in promise callbacks ([#176](https://github.com/excaliburjs/Excalibur/issues/176))
1936
+ - Actor.extend did not work on actor subclasses ([#103](https://github.com/excaliburjs/Excalibur/issues/103))
1937
+
1938
+ <!----------------------------------------------------------------------------------------------->
1939
+
1940
+ ## [0.1.1] - 2013-12-19
1941
+
1942
+ ### Changed
1943
+
1944
+ - Refactored Keys to be less confusing ([#115](https://github.com/excaliburjs/Excalibur/issues/115))
1945
+ - Refactored ActorEvent to be less confusing ([#113](https://github.com/excaliburjs/Excalibur/issues/113))
1946
+
1947
+ ### Fixed
1948
+
1949
+ - 'update' event on the Engine now fires correctly ([#105](https://github.com/excaliburjs/Excalibur/issues/105))
1950
+ - Actor.extend works on subclasses now ([#103](https://github.com/excaliburjs/Excalibur/issues/103))
1951
+
1952
+ <!----------------------------------------------------------------------------------------------->
1953
+
1954
+ ## 0.1.0 - 2013-12-11
1955
+
1956
+ ### Added
1957
+
1958
+ - Actor based paradigm for managing game objects
1959
+ - Built-in scripting for actors, allowing objects to move, rotate, blink, scale, and repeat actions
1960
+ - Entity-entity collision detection
1961
+ - Event support to react to events happening in the game
1962
+ - Camera abstraction to easily think about the view port
1963
+ - Multiple display modes including fixed size, full screen, and dynamic container
1964
+ - Scene stack support to create multiple game levels
1965
+ - Sprite sheet and animation support
1966
+ - Simple sound library for game audio, supporting the Web Audio API and the HTML Audio API
1967
+ - Promise implementation for managing asynchronous behavior
1968
+ - Resource loading with optional custom progress bars
1969
+
1970
+ <!----------------------------------------------------------------------------------------------->
1971
+
1972
+ [unreleased]: https://github.com/excaliburjs/Excalibur/compare/v0.25.1...HEAD
1973
+ [0.25.1]: https://github.com/excaliburjs/Excalibur/compare/v0.25.0...v0.25.1
1974
+ [0.25.0]: https://github.com/excaliburjs/Excalibur/compare/v0.24.5...v0.25.0
1975
+ [0.24.5]: https://github.com/excaliburjs/Excalibur/compare/v0.24.4...v0.24.5
1976
+ [0.24.4]: https://github.com/excaliburjs/Excalibur/compare/v0.24.0...v0.24.4
1977
+ [0.24.0]: https://github.com/excaliburjs/Excalibur/compare/v0.23.0...v0.24.0
1978
+ [0.23.0]: https://github.com/excaliburjs/Excalibur/compare/v0.22.0...v0.23.0
1979
+ [0.22.0]: https://github.com/excaliburjs/Excalibur/compare/v0.21.0...v0.22.0
1980
+ [0.21.0]: https://github.com/excaliburjs/Excalibur/compare/v0.20.0...v0.21.0
1981
+ [0.20.0]: https://github.com/excaliburjs/Excalibur/compare/v0.19.1...v0.20.0
1982
+ [0.19.1]: https://github.com/excaliburjs/Excalibur/compare/v0.19.0...v0.19.1
1983
+ [0.19.0]: https://github.com/excaliburjs/Excalibur/compare/v0.18.0...v0.19.0
1984
+ [0.18.0]: https://github.com/excaliburjs/Excalibur/compare/v0.17.0...v0.18.0
1985
+ [0.17.0]: https://github.com/excaliburjs/Excalibur/compare/v0.16.0...v0.17.0
1986
+ [0.16.0]: https://github.com/excaliburjs/Excalibur/compare/v0.15.0...v0.16.0
1987
+ [0.15.0]: https://github.com/excaliburjs/Excalibur/compare/v0.14.0...v0.15.0
1988
+ [0.14.0]: https://github.com/excaliburjs/Excalibur/compare/v0.13.0...v0.14.0
1989
+ [0.13.0]: https://github.com/excaliburjs/Excalibur/compare/v0.12.0...v0.13.0
1990
+ [0.12.0]: https://github.com/excaliburjs/Excalibur/compare/v0.11.0...v0.12.0
1991
+ [0.11.0]: https://github.com/excaliburjs/Excalibur/compare/v0.10.0...v0.11.0
1992
+ [0.10.0]: https://github.com/excaliburjs/Excalibur/compare/v0.9.0...v0.10.0
1993
+ [0.9.0]: https://github.com/excaliburjs/Excalibur/compare/v0.8.0...v0.9.0
1994
+ [0.8.0]: https://github.com/excaliburjs/Excalibur/compare/v0.7.1...v0.8.0
1995
+ [0.7.1]: https://github.com/excaliburjs/Excalibur/compare/v0.7.0...v0.7.1
1996
+ [0.7.0]: https://github.com/excaliburjs/Excalibur/compare/v0.6.0...v0.7.0
1997
+ [0.6.0]: https://github.com/excaliburjs/Excalibur/compare/v0.5.1...v0.6.0
1998
+ [0.5.1]: https://github.com/excaliburjs/Excalibur/compare/v0.5.0...v0.5.1
1999
+ [0.5.0]: https://github.com/excaliburjs/Excalibur/compare/v0.2.2...v0.5.0
2000
+ [0.2.2]: https://github.com/excaliburjs/Excalibur/compare/v0.2.0...v0.2.2
2001
+ [0.2.0]: https://github.com/excaliburjs/Excalibur/compare/v0.1.1...v0.2.0
2002
+ [0.1.1]: https://github.com/excaliburjs/Excalibur/compare/v0.1...v0.1.1
2003
+ [//]: # 'https://github.com/olivierlacan/keep-a-changelog'