What's Changed
See migration guide for v0.25.x -> v0.25.2
Plugin Updates!
- Excalibur Dev Tools for game debugging!
- Lots of quality of life improvements in the Tiled plugin
- Tiled data is added to corresponding Entities via
TiledObjectComponent
andTiledLayerComponent
- Tiled name's become excalibur Entity names
- Layers and object use Tiled Z-indexing by default
- Tiled data is added to corresponding Entities via
Added Features
- feat: [#577] [#1170] Implement new Clock API by @eonarheim in #2122
- 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, likeperformance.now()
StandardClock
encapsulates the existingrequestAnimationFrame
api logicTestClock
allows a user to manually step the mainloop, this can be useful for frame by frame debugging #1170- The base abstract clock implements the specifics of elapsed time
- Added new
- 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. - feat: Post Processing Improvements + Pre-multiplied alpha by @eonarheim in #2142
- New
ex.ScreenShader
helper for building custom shader based post processors, read docs for more info
- New
- feat: Support image filtering modes on ImageSource & Raster Graphics by @eonarheim in #2168
- feat: Fixes and updates to support
@excaliburjs/dev-tools
by @eonarheim in #2169 - feat+refactor: Renderer simplification and Render plugins by @eonarheim in #2185
- Added ability to build custom renderer plugins that are accessible to the
ex.ExcaliburGraphicsContext.draw<TCustomRenderer>(...)
after registering themex.ExcaliburGraphicsContext.register(new LineRenderer())
- Added ability to draw circles and rectangles with outlines!
ex.ExcaliburGraphicsContext.drawCircle(...)
andex.ExcaliburGraphicsContext.drawRectangle(...)
- Added ability to build custom renderer plugins that are accessible to the
- Added
ex.CoordPlane
can be set in thenew ex.Actor({coordPlane: CoordPlane.Screen})
constructor - Added convenience feature, setting the color, sets the color on default graphic if applicable
- Added support for different webgl texture blending modes as
ex.ImageFiltering
:ex.ImageSource
can now specify a blend mode before the image is loadedex.ImageFiltering.Blended
- Blended is useful when you have high resolution artwork and would like it blended and smoothedex.ImageFiltering.Pixel
- Pixel is useful when you do not want smoothing aka antialiasing applied to your graphics.
- Excalibur will set a "default" blend mode based on the
ex.EngineOption
antialiasing property, but can be overridden per graphicantialiasing: true
, then the blend mode defaults toex.ImageFiltering.Blended
antialiasing: false
, then the blend mode defaults toex.ImageFiltering.Pixel
- Pointers can now be configured to use the collider or the graphics bounds as the target for pointers with the
ex.PointerComponent
useColliderShape
- (default true) uses the collider component geometry for pointer eventsuseGraphicsBounds
- (default false) uses the graphics bounds for pointer events
- Added new
measureText
method to theex.SpriteFont
andex.Font
to return the bounds of any particular text
Breaking Changes
ex.Util.extend()
is removed, modern js spread operator{...someobject, ...someotherobject}
handles this better.- Excalibur post processing is now moved to the
engine.graphicsContext.addPostProcessor()
- Breaking change to
ex.PostProcessor
, all post processors must now now implement this interfaceexport interface PostProcessor { intialize(gl: WebGLRenderingContext): void; getShader(): Shader; getLayout(): VertexLayout; }
- Excalibur
ex.EventEmitter
on longer overrides thethis
parameter in callbacks// change this type of code this.on('precollision', this.onPreCollision); // to this this.on('precollision', (evt) => this.onPreCollision(evt));
Deprecated
- The static
Engine.createMainLoop
is now marked deprecated and will be removed in v0.26.0, it is replaced by theClock
api - Mark legacy draw routines in
ex.Engine
,ex.Scene
, andex.Actor
deprecated
Bug Fixes
- fix: Performance improvements avoid expensive calculations by @eonarheim in #2197
- fix: Arcade Solver Jitter on stacked/overlapped tiles by @eonarheim in #2104
- fix: [#2106] Safari 13.1 Does not boot + Safari Pointers by @eonarheim in #2107
- fix: Prevent pair generation for composite colliders by @eonarheim in #2131
- fix: Clock runs game simulation too fast sometimes when limiting fps by @eonarheim in #2162
- fix: Prevent SpriteFonts from logging excessive warnings by @eonarheim in #2163
- fix: [#2152] SpriteFont and Font alignment by @eonarheim in #2153
- fix(tsconfig): restrict types array by @kamranayub in #2160
- fix: [#1815] TileMap tiling artifact by @eonarheim in #2146
- fix: CircleCollider now handles transforms properly by @eonarheim in #2191
- fix: [#2192] Actor.center returns global position by @eonarheim in #2193
Changed/Refactor
- refactor: Pointer System by @eonarheim in #2071
- refactor: Remove .call() in EventDispatcher by @nidble in #2103
- refactor: Move math utils, deprecate old import site by @eonarheim in #2177
Docs
- chore: Update changelog for 0.25.1 release by @jedeen in #2099
- docs: Clarify contribution requirements by @jedeen in #2101
- docs: Remove TravisCI badge by @jedeen in #2108
- docs: Fix semantic headings by @jedeen in #2161
- chore(renovate): do not automerge typedoc by @kamranayub in #2143
- chore(deps): revert "Update dependency typedoc to v0.22.10" by @kamranayub in #2144
- chore(ci): optimize build jobs by @kamranayub in #2145
Build Dependencies Updated
- chore: Update dependency typescript to v4.5.2 by @renovate in #2110
- chore: Update jasmine monorepo by @renovate in #2117
- chore: Update dependency @types/node to v14.17.34 by @renovate in #2112
- chore: Update dependency @types/jasmine to v3.10.2 by @renovate in #2111
- chore: Update dependency webpack to v5.64.1 by @renovate in #2116
- chore: Update dependency core-js to v3.19.1 by @renovate in #2113
- chore: Update dependency karma to v6.3.9 by @renovate in #2115
- chore: Update dependency css-loader to v6.5.1 by @renovate in #2114
- chore: Update dependency webpack to v5.64.4 by @renovate in #2125
- chore: Update typescript-eslint monorepo to v4.33.0 by @renovate in #2123
- chore: Update dependency source-map-support to v0.5.21 by @renovate in #2124
- chore: Update dependency copy-webpack-plugin to v9.1.0 by @renovate in #2126
- chore: Update dependency copy-webpack-plugin to v10 by @renovate in #2118
- chore(deps): bump handlebars from 4.7.6 to 4.7.7 by @dependabot in #2098
- chore: Update dependency serve to v13 by @renovate in #2129
- chore: Update typescript-eslint monorepo to v5 (major) by @renovate in #2130
- chore: Update dependency eslint to v8 by @renovate in #2127
- chore: Update dependency eslint-plugin-jsdoc to v37 by @renovate in #2128
- chore: Update dependency json-schema to 0.4.0 [SECURITY] by @renovate in #2133
- chore: Update dependency core-js to v3.19.2 by @renovate in #2135
- chore: Update typescript-eslint monorepo to v5.5.0 by @renovate in #2134
- chore: Update dependency typedoc to v0.22.10 by @renovate in #2137
- chore: Update dependency eslint-plugin-jsdoc to v37.1.0 by @renovate in #2140
- chore: Update storybook monorepo to v6.4.3 by @renovate in #2138
- chore: Update dependency karma-coverage to v2.1.0 by @renovate in #2141
- chore: Update Node.js to v14.18.2 by @renovate in #2136
- chore: Update dependency core-js to v3.19.3 by @renovate in #2154
- chore: Update dependency typescript to v4.5.4 by @renovate in #2155
- chore: Update Node.js to v16 by @renovate in #2139
- chore: Update dependency typedoc to v0.22.10 by @renovate in #2164
- chore: Update dependency copy-webpack-plugin to v10.2.0 by @renovate in #2167
- chore: Update dependency core-js to v3.20.0 by @renovate in #2166
- chore: Update dependency @types/node to v16.11.17 by @renovate in #2165
- chore: Update typescript-eslint monorepo to v5.8.1 by @renovate in #2174
- chore: Update dependency eslint-plugin-jsdoc to v37.5.0 by @renovate in #2173
- chore: Update dependency eslint to v8.5.0 by @renovate in #2172
- chore: Update storybook monorepo to v6.4.9 by @renovate in #2179
- chore: Update jasmine monorepo to v3.99.0 by @renovate in #2182
- chore: Update dependency core-js to v3.20.2 by @renovate in #2171
- chore: Update dependency eslint to v8.6.0 by @renovate in #2180
- chore: Update dependency @babel/core to v7.16.7 by @renovate in #2178
- chore: Update dependency eslint-plugin-jsdoc to v37.6.1 by @renovate in #2190
- chore: Update typescript-eslint monorepo to v5.9.0 by @renovate in #2187
- chore: Update dependency karma to v6.3.10 by @renovate in #2186
- chore: Update dependency @types/node to v16.11.19 by @renovate in #2189
- chore: Update dependency karma to v6.3.11 by @renovate in #2195
- chore: Update dependency @types/jasmine to v3.10.3 by @renovate in #2188
- chore: Update jasmine monorepo (major) by @renovate in #2183
- chore: Update Node.js to v16.13.2 by @renovate in #2194
Contributors
Big thanks to all the people who have helped out this iteration!
@ivasilov
@luttje
@tsanyqudsi
@lampewebdev
@joshuadoan
@berkayyildiz
@simon-jaeger
@YJDoc2
@JumpLink
Full Changelog: v0.25.1...v0.25.2