Releases: excaliburjs/Excalibur
Excalibur v0.28.4 Release
Another small release! A few bug fixes and some enhancements to materials!
water-material.mp4
Materials
2 new uniforms
u_screen_texture
- This is the texture of the screen right before the material draw callu_time_ms
- This is the milliseconds since page navigation (performance.now()
under the hood)
2 new attribute/varyings
a_screenuv
- The vertex attribute corresponding to the screen uv relative to the current graphicv_screenuv
- The fragment varying corresponding to the screen uv relative to the current graphic
Finally there is a new convenience api for updating shader values in materials. .update(shader => {...})
game.input.pointers.primary.on('move', evt => {
heartActor.pos = evt.worldPos;
swirlMaterial.update(shader => {
shader.trySetUniformFloatVector('iMouse', evt.worldPos);
});
});
What's Changed
- feat: Materials can now use the screen texture by @eonarheim in #2849
- fix: Adjust font cache to prevent downward spiral on mobile by @eonarheim in #2850
- fix: #2848 Sprite tint respected in constructor by @eonarheim in #2852
- fix: TileMap packing + TileMap debug draw configurable by @eonarheim in #2851
Full Changelog: v0.28.3...v0.28.4
Excalibur v0.28.3 Release
Small release, fixed a couple bugs!
- Materials were crashing Excalibur if you tried to render different ones at once
- Raycasting against collision groups wasn't working as expected!
What's Changed
- chore: Update dependency eslint to v8.55.0 by @renovate in #2838
- fix: Issue with raycasting complex collision groups by @eonarheim in #2842
- fix: Multiple materials at once by @eonarheim in #2845
Full Changelog: v0.28.2...v0.28.3
Excalibur v0.28.2 Release
This was mostly a bug fix release, lots of small fixes! No breaking changes. Notably there are some performance improvements to TileMap by utilizing a QuadTree to help offscreen culling.
Fixes & Features
- fix: TileMap: Draw all tiles if screen coordinate plane is used by @JumpLink in #2764
- fix: [#2762] wasPressed in input mapper by @eonarheim in #2766
- fix: [#2773] Line bounds are now correct by @eonarheim in #2774
- fix: [#2763] TileMap Improve perf and draw tiles using QuadTree by @eonarheim in #2771
- fix: allow entity names to be set at any time by @eonarheim in #2775
- fix: bug where incorrect track was removed when stop/start in rapid succession by @eonarheim in #2805
- fix: clear implementations by @eonarheim in #2806
- fix: typo in animation 'end' event signature by @eonarheim in #2807
- fix: Trigger event signature type was incorrect by @eonarheim in #2811
- fix: Switch fallback default + fix bugs in Canvas2D fallback by @eonarheim in #2812
- feat: Add
ex.Engine.version
to report the current excalibur version build string by @eonarheim in #2822 - fix/feat: Screen resizing artifacts + expose screen events! by @eonarheim in #2826
- fix: Remove multiple handlers if they are registered by @eonarheim in #2835
Dependencies
Dependency
- chore: Update dependency @babel/core to v7.22.11 by @renovate in #2746
- chore: Update dependency @fortawesome/fontawesome-free to v6.4.2 by @renovate in #2747
- chore: Update dependency jasmine-core to v5.1.1 by @renovate in #2749
- chore: Update dependency serve to v14.2.1 by @renovate in #2751
- chore: Update dependency node to v18.17.1 by @renovate in #2750
- chore: Update dependency core-js to v3.32.1 by @renovate in #2748
- chore: Update dependency eslint to v8.48.0 by @renovate in #2752
- chore: Update dependency @types/node to v18.17.13 by @renovate in #2760
- chore: Update dependency eslint-config-prettier to v8.10.0 by @renovate in #2753
- chore: Update dependency eslint-plugin-jsdoc to v46.5.1 by @renovate in #2754
- chore: Update coverallsapp/github-action action to v2.2.3 by @renovate in #2777
- chore: Update dependency @types/jasmine to v4.3.6 by @renovate in #2778
- chore: Update dependency @types/react-color to v3.0.7 by @renovate in #2779
- chore: Update dependency @types/webpack-env to v1.18.2 by @renovate in #2780
- chore: Update dependency core-js to v3.32.2 by @renovate in #2781
- chore: Update dependency @babel/core to v7.23.0 by @renovate in #2782
- chore: Update dependency eslint to v8.50.0 by @renovate in #2783
- chore: Update dependency core-js to v3.33.0 by @renovate in #2786
- chore: Update dependency eslint-plugin-jsdoc to v46.8.2 by @renovate in #2784
- chore: Update dependency node to v18.18.0 by @renovate in #2785
- [chore] Upgrade typescript by @eonarheim in #2798
- chore: Update dependency @types/webpack-env to v1.18.4 by @renovate in #2797
- chore: Update dependency @babel/core to v7.23.3 by @renovate in #2795
- chore: Update dependency @types/react-color to v3.0.10 by @renovate in #2796
- chore: Update dependency @babel/core to v7.23.5 by @renovate in #2813
- chore: Update dependency core-js to v3.33.3 by @renovate in #2814
- chore: Update dependency @types/jasmine to v4.6.4 by @renovate in #2817
- chore: Update dependency @fortawesome/fontawesome-free to v6.5.1 by @renovate in #2816
- chore: Update dependency ts-loader to v9.5.1 by @renovate in #2821
- chore: Update dependency node to v18.19.0 by @renovate in #2820
- chore: Update dependency eslint to v8.54.0 by @renovate in #2818
- chore: Update dependency eslint-plugin-jsdoc to v46.9.0 by @renovate in #2819
- chore: Update dependency rimraf to v5 by @renovate in #2757
- chore(deps-dev): bump browserify-sign from 4.2.1 to 4.2.2 by @dependabot in #2794
- chore: Update dependency typescript to v5.3.2 by @renovate in #2823
- chore: Update dependency eslint-config-prettier to v9 by @renovate in #2755
- chore: Update dependency replace-in-file to v7 by @renovate in #2724
- chore: Update dependency webpack to v5.89.0 by @renovate in #2824
- chore: Update actions/checkout action to v4 by @renovate in #2828
- chore: Update typescript-eslint monorepo to v6.13.1 by @renovate in #2827
- chore: Update actions/setup-node action to v4 by @renovate in #2829
- chore: Update dependency @types/jasmine to v5 by @renovate in #2830
- chore: Update dependency webpack-cli to v5 by @renovate in #2832
- chore: Update dependency @types/node to v18.19.1 by @renovate in #2833
New Contributors
Full Changelog: v0.28.0...v0.28.2
Excalibur v0.28.0 Release
This was a big release! We have a ton of new features and a lot of bugfixes that came out of the community!
Added Features!
- feat: [#2460] add support for wasButtonPressed and wasButtonReleased by @mattjennings in #2461
- feat: [#2468] add clone() method to ex.SpriteSheet by @mattjennings in #2469
- feat: [#2401] Implement arbitrary raycasting by @eonarheim in #2410
- Support wrapping ex.Text graphics by @RyanGrieb in #2472
- feat: Animation improvements fromSpriteSheetCoordinates + EventEmitter by @eonarheim in #2666
- feat: [#2416] Add Postprocessor hooks and default some uniforms by @eonarheim in #2667
- feat: Custom Material/Shader per Actor Support by @eonarheim in #2670
- feat: [#2688] Add actor level graphics flipping as a QOL improvement by @eonarheim in #2694
- feat: QOL Update import site for ex.Input by @eonarheim in #2697
- refactor: [#1145] Strong types EventEmitter refactor by @eonarheim in #2702
- refact(engine/EventEmitter): minor refact by @tonivj5 in #2707
- feat: Implement InputMapper by @eonarheim in #2705
Plugin Updates!
- Tiled Plugin - Object layers are included by default, bug fixes, Tile properties, and Tile by point/coord
- Aseprite Plugin - Native .aseprite file support!
New Samples
- https://github.com/excaliburjs/sample-tiled-webpack
- https://github.com/excaliburjs/sample-matterjs
Fixes
- fix: [#2409] engine 'visible' event not firing by @mattjennings in #2412
- fix: [#2411] Prevent font corruption with separate state container by @eonarheim in #2413
- fix: [#2418] falsey event values being converted to GameEvent by @mattjennings in #2422
- fix: [#2419] child entities inherit parent's scene by @eonarheim in #2430
- fix: [#2424] crash when using many ex.Text instances by @eonarheim in #2429
- fix: [#2425] incorrect event type in
ex.Actor.on('postupdate')
by @eonarheim in #2431 - fix: [#2421] Match Screenshot AA with Screen by @eonarheim in #2428
- fix: Update entity not in scene warning by @eonarheim in #2432
- fix: [#2450] Sound looping regression by @eonarheim in #2451
- fix: [#2440] Multiply current gfx ctx opacity by @eonarheim in #2449
- fix: [#2437] Respect particle emitter parenting by @eonarheim in #2438
- fix: [#2435] Graphics are consistently drawn around the
contentArea
regardless of resolution by @eonarheim in #2439 - fix: [#2455][#2456] Entity removing children bugs by @eonarheim in #2454
- Fix x-axis bug in
actions.scaleTo
by @reissbaker in #2471 - fix: [#2473] ignore 0 sized precollisions by @eonarheim in #2474
- fix: [#2407] Repair
ex.Actor.clone()
by @eonarheim in #2414 - [#2575] fix actor clone by @eonarheim in #2576
- fix: [#2579] Add tests confirming parent/child scene fix by @eonarheim in #2580
- fix: [#2599] Update Sound canPlayFile to handle querystrings by @eonarheim in #2600
- fix: [#2597] Add defense to ScreenElement ctor for zero width/height by @eonarheim in #2602
- fix: [#2622] Add multi engine support by @eonarheim in #2635
- fix: [#2636] Screen element collider & graphics anchor by @eonarheim in #2637
- fix: [#2619] Camera rotation around the focus by @eonarheim in #2620
- fix: [#1512] Grab window focus by default for x-origin iframes by @eonarheim in #2660
- fix: [#2608] macos meta key issue by @eonarheim in #2661
- fix: [#2490] Circle lineWidth now factored by @eonarheim in #2662
- fix: [#2535] Update to default false on cache busting by @eonarheim in #2663
- fix: [#2668] ScreenElement pointer capture configured properly by @eonarheim in #2669
- fix: Overriding existing components by @eonarheim in #2686
- fix: [#2687] Add scene transfer method by @eonarheim in #2691
- fix: [#2699] Respect scale transform in TileMaps by @eonarheim in #2700
- fix: [#2726] Entity manager memory leak by @eonarheim in #2727
- fix: [#2732] TileMap collider consolidation by @eonarheim in #2733
New Contributors
- @reissbaker made their first contribution in #2471
- @RyanGrieb made their first contribution in #2472
- @tonivj5 made their first contribution in #2707
Contributors (Sorry if I missed you! Send me a note and I'll fix it)
We cannot stress how pleased and grateful we are for all the assistance in the issues, PRs, discussion, samples, templates, plugins, and everything else! Y'all are the nicest bunch on the internet!
- @mattjennings
- @chrisk-7777
- @drewconley
- @tenpaMk2
- @reissbaker
- @RyanGrieb
- @JumpLink
- @ryaino
- @tonivj5
- @facondiaGames
- @djcsdy
- @jalyna
- @cemalgnlts
- @davobutt
- @Lzrs111
- @chrispytoes
- @justinfernald
- @benixmaxedis
- @cirossmonteiro
- @tfkfan
- @kgish
- @bpikaar
- @sparkok
- @KrzyZyb
- @AWaselnuk
- @EduardoHidalgo
- @nemo-omen
- @DaVince
- @kennyfully88
- @ewal
- @robly18
- @ivanjermakov
- @the-man-with-a-golden-mind
- @ikiselev1989
- @CTLaChance
- @sl45sms
- @sparkok
- @BinarySpike
- @Ziphil
- @max-vogler
- @depsypher
- @thefakeplace
- @ufukbakan
- @JumpLink
- @VakaiserGH
- @TouwaStar
- @KokoDoko
- @TouwaStar
Dependencies
Dependency updates
- chore(deps): bump terser from 4.8.0 to 4.8.1 by @dependabot in #2426
- chore: Update dependency @babel/core to v7.18.9 by @renovate in #2441
- chore: Update dependency eslint-plugin-jsdoc to v39.3.4 by @renovate in #2442
- chore: Update dependency serve to v13.0.4 by @renovate in #2443
- chore: Update dependency @babel/core to v7.18.10 by @renovate in #2447
- chore: Update Node.js to v16.16.0 by @renovate in #2444
- chore: Update dependency eslint to v8.21.0 by @renovate in #2446
- chore: Update dependency core-js to v3.24.1 by @renovate in #2445
- chore: Update dependency puppeteer to v15.5.0 by @renovate in #2448
- chore: Update actions/stale action to v8 by @renovate in #2652
- chore: Update dependency @babel/core to v7.22.9 by @renovate in #2709
- chore: Update dependency eslint-plugin-jsdoc to v46.4.5 by @renovate in #2711
- chore: Update dependency semver to v7.5.4 by @renovate in #2712
- chore: Update dependency babel-loader to v9.1.3 by @renovate in #2710
- chore: Update dependency core-js to v3.32.0 by @renovate in #2713
- chore: Update dependency eslint-config-prettier to v8.9.0 by @renovate in #2717
- chore: Update dependency eslint to v8.46.0 by @renovate in #2714
- chore: Update dependency jasmine-core to v5.1.0 by @renovate in #2718
- chore: Update dependency webpack to v5.88.2 by @renovate in #2720
- chore: Update dependency node to v18.17.0 by @renovate in #2719
- chore: Update typescript-eslint monorepo to v5.62.0 by @renovate in #2721
- chore(deps): bump socket.io-parser and socket.io by @dependabot in https://...
Excalibur v0.27.0 Release
This was a big release! We have a ton of new features and a lot of bugfixes that came out of the community!
See migration guide for v0.26.x -> v0.27.0
Added Features!
- feat: [#1548] pass data to scene activation from goToScene by @mattjennings in #2381
- feat: [#2324] Add FullScreen Target Element Id by @eonarheim in #2325
- feat: [#242] Implement Parallel Actions by @eonarheim in #2322
- feat: [#2335] Add current playback time & playback rate by @eonarheim in #2336
- feat: Implement Sprite Tint by @eonarheim in #2326
- feat: Add missing Sound features
.seek()
,.duration
, &getTotalPlaybackDuration()
by @eonarheim in #2340 - feat: [#396] Add random Timer intervals by @malitherl in #2317
- feat: Implement Fixed timestep for physics simulation stability by @eonarheim in #2339
- feat: Render from bottom of TileMap tile by default by @eonarheim in #2364
New Samples
- New Grid based movement sample https://github.com/excaliburjs/sample-grid
Template/Plugin Updates
- feat: Tiled Plugin update to support tilesets that are a collection of images excaliburjs/excalibur-tiled#383
- fix: Tiled Plugin update to support Tiled 1.9 breaking change excaliburjs/excalibur-tiled#385
- fix: Tiled Plugin TiledMapResource#getSpriteForGid with multiple external tilesets excaliburjs/excalibur-tiled#380
- fix: Tiled Plugin custom properties parsing fix excaliburjs/excalibur-tiled#378
- Updated Electron template to latest versions https://github.com/excaliburjs/template-electron
Performance Improvements
- perf: Adjust TileMap to avoid perf hit on big maps
- perf: Refactor Transform & AffineMatrix + related perf improvements by @eonarheim in #2346
- perf: Improve collision system performance by @eonarheim in #2351
Fixes
- fix: [#2368] elastic collisions & degree of freedom by @eonarheim in #2369
- fix: [#2403] Allow ex.Canvas and ex.Raster to have NPOT dimensions by @eonarheim in #2404
- fix: Oscillation issue with pixel snapping + pixelToSnap default false #2348
- fix: Tweak performance fallback options to be optional #2396
- fix: Add warning if ImageSource not loaded #2371
- fix: [#2379] Deferred goto preserves wrong scene by @eonarheim #2380
- fix: [#2344] [#2343] Arcade Solver sorts contacts by distance and ignores diverging contacts by @eonarheim in #2345
- fix: [#2347] EventDispatcher concurrent update issue and removal bug by @eonarheim in #2350
- fix: [#2353] EdgeColliders in Composite calculate offsets by @eonarheim in #2354
- fix: [#2359] work around image decode limits in chromium by @eonarheim in #2361
- fix: Fixed update interpolation incorrect with child actors by @eonarheim in #2397
- chore: [#2376] update eslint config in vscode settings by @mattjennings in #2377
Dependency updates
- chore: [#2376] update eslint config in vscode settings by @mattjennins in #2377
- chore: Update TypeScript 4.7.4 by @eonarheim in #2355
- chore: Update Node.js to v16.15.1 by @renovate in #2331
- chore: Update dependency karma-summary-reporter to v3.1.1 by @renovate in #2334
- chore: Update dependency core-js to v3.23.1 by @renovate in #2328
- chore: Update dependency replace-in-file to v6.3.5 by @renovate in #2329
- chore: Update dependency eslint to v8.18.0 by @renovate in #2332
- chore: Update dependency karma to v6.4.0 by @renovate in #2387
- chore: Update dependency puppeteer to v15.3.0 by @renovate in #2395
- chore: Update dependency ts-loader to v9.3.1 by @renovate in #2389
- chore: Update dependency webpack to v5.73.0 by @renovate in #2391
- chore: Update dependency webpack-cli to v4.10.0 by @renovate in #2392
- chore: Update jasmine monorepo by @renovate in #2394
- chore: Update dependency @types/node to v16.11.42 by @renovate in #2383
- chore: Update dependency core-js to v3.23.3 by @renovate in #2385
- chore: Update dependency terser-webpack-plugin to v5.3.3 by @renovate in #2386
- chore: Update dependency @babel/core to v7.18.6 by @renovate in #2382
Contributors
- @malitherl - Congratulations on their first code contribution in #2317
- @mattjennings - Congratulations on their first contribution in #2377
- @ewal - Thank you for posting about basic patterns in discussions and really digging into the mysterious tsserver issue!
- @salsa2k - Thank you for actor moving, pathfinding, and image loading discussions
- @SimponGoril - Thank you for sharing the Crab based puzzle game! #2360
- @pdrhlik - Thank you for helping with a tile collider issue with edges in the discussions
- @Joshua-Beatty - Thank you for creating a new Capacitorjs plugin for safe area awareness on mobile! #2349
- @KokoDoko - Thank you for the issue for physics bounciness/degrees of freedom & the discussion around esm and type information
- @mattjennings - So many contributions!
- Thank you for creating a new meta-framework called Merlin that works with Vite and Excalibur to remove resource loading friction! #2342
- Thank you for the cool scene transition samples
- Thank you for the opening the Arcade physics issues #2344 #2343
- Thank you for ray casting discussion!
- Thank you for the vscode eslint fix
- Thank you for spotting the docs linking issue
- Thanks for the contributions to Scene activation
- @HxShard - Many thanks!
- Thank you for opening the Image.decode() issue that affected chrome!
- Thank you for the fix for Tiled custom properties
- Thank you for the fix for Tiled TiledMapResource#getSpriteForGid inconsitency
- @ilnicki - Thank you for opening the issue around the event dispatcher!
- @EzraMoore65 - Thank you for the issue around sound playback!
- @chrisk-7777 - Many valuable updates to the docs, dev-tool dynamic scene issue, and a great parallel actions discussion!
- @lecoqjacob - Grid based movement discussion
- @ttay24 - Great discussion about fullscreen, html based UI, and Tiled plugin contribution
- @kgish - Great discussion about Excalibur's future and tragectory
- @ivanjermakov - Thank you for the CollisionType issue around the docs being incorrect and spotting another issue when physics is disabled
- @YunlongYang - Thank you for debugging the webpack template with us
- @tenpaMk2 - Thank you for more examples!
- Cool dino game! https://tenpamk2-blog.netlify.app/apps/excalibur-dino-runner/
- Love the snake game example! https://github.com/tenpaMk2/excalibur-examples/tree/main/examples/snake
- Thank you for the tiled + parcel2 template https://github.com/tenpaMk2/excalibur-tiled-parcel2-template
- @divinitas-art - Thank you for the cool shadows post, ex.Canvas discussion, and bug find!
- If I missed your name for anything let me know and I'll ammend the release notes!
Full Changelog: v0.26.0...v0.27.0
Excalibur v0.26.0 Release
This was a big release! We have a ton of new features and a lot of improvements to performance especially around Firefox
See migration guide for v0.25.x -> v0.26.0
Added Features!
-
feat: Add arbitrary non-convex polygon support by @eonarheim in #2239
-
feat: Fast BoundingBox overlap and transform by @eonarheim in #2241
-
perf: Add
zIndexChanged$
+ Improve pointer system perf by @eonarheim in #2242 -
feat: Implement IsometricMap & refactor TileMap with some perf boosts by @eonarheim in #2254
-
ex.TileMap
now supports per Tile custom colliders!const tileMap = new ex.TileMap(...); const tile = tileMap.getTile(0, 0); tile.solid = true; tile.addCollider(...); // add your custom collider!
-
New
ex.IsometricMap
for drawing isometric grids! (They also support custom colliders via the same mechanism asex.TileMap
)new ex.IsometricMap({ pos: ex.vec(250, 10), tileWidth: 32, tileHeight: 16, columns: 15, rows: 15 });
ex.IsometricTile
now come with aex.IsometricEntityComponent
which can be applied to any entity that needs to be correctly sorted to preserve the isometric illusionex.IsometricEntitySystem
generates a new z-index based on theelevation
and y position of an entity withex.IsometricEntityComponent
-
-
feat: Add pixelRatio override for Text rendering by @eonarheim in #2294
-
perf(motion): Improve capture transform perf by @eonarheim in #2278
-
perf(graphics): Implement sorted draw calls by @eonarheim in #2277
- 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.
- Added draw call sorting
-
feat(graphics): [#2288] Implement SpriteSheet builder with custom sourceViews by @eonarheim in #2302
- Added feature to build
SpriteSheet
s from a list of different sized source views usingex.SpriteSheet.fromImageSourceWithSourceViews(...)
const ss = ex.SpriteSheet.fromImageSourceWithSourceViews({ image, sourceViews: [ {x: 0, y: 0, width: 20, height: 30}, {x: 20, y: 0, width: 40, height: 50}, ] });
- Added feature to build
-
feat: FitScreenAndFill and FitContainerAndFill Display Modes by @Joshua-Beatty in #2272
-
feat: [#2272] Add Fit Screen/Container and Zoom by @eonarheim in #2312
-
feat: [#2313] Add New Line Graphics Object by @eonarheim in #2314
const lineActor = new ex.Actor({ pos: ex.vec(100, 0) }); lineActor.graphics.anchor = ex.Vector.Zero; lineActor.graphics.use(new ex.Line({ start: ex.vec(0, 0), end: ex.vec(200, 200), color: ex.Color.Green, thickness: 10 })); game.add(lineActor);
-
feat: Add Raster quality + lineCap by @eonarheim in #2315
- 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.
- Added new parameter to
-
feat(graphics): Add canvas 2d fallback mechanism by @eonarheim in #2310
- Added new performance fallback configuration to
ex.Engine
for developers to help players experiencing poor performance in non-standard browser configurations- 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.
- 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.
var game = new ex.Engine({ ... configurePerformanceCanvas2DFallback: { allow: true, // opt-out of the fallback showPlayerMessage: true, // opt-in to a player pop-up message threshold: { fps: 20, numberOfFrames: 100 } // configure the threshold to trigger the fallback } });
- Added new performance fallback configuration to
-
feat: Implement parallax motion component and system by @eonarheim in #2303
-
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.const actor = new ex.Actor(); // The actor will be drawn shifted based on the camera position scaled by the parallax factor actor.addComponent(new ParallaxComponent(ex.vec(0.5, 0.5)));
-
-
perf: Various performance improvements by @eonarheim in #2309
-
Added
ex.Vector.min(...)
andex.Vector.max(...)
to find the min/max of each vector component between 2 vectors. -
Added
ex.TransformComponent.zIndexChange$
observable to watch when z index changes.
Fixes
- refactor: Rename multv/multm to multiply by @eonarheim in #2240
- fix: #2263 keyboard
wasPressed
works inonPostUpdate
lifecycle by @eonarheim in #2270 - chore: Updates to improve test flakiness by @eonarheim in #2246
- fix: [#2109] Replace the features link by @SulthanNK in #2299
- fix: [#2300] CompositeColliders count as a whole for collisionstart/collisionend events by @eonarheim in #2301
- fix(graphics): Large Text segments render properly by breaking them into smaller pieces by @eonarheim in #2295
- fix: Tilemap incorrectly offscreen and update parallax to use Tiled formula by @eonarheim in #2316
- fix: Tweak browser params to fix flaky test runner disconnect by @eonarheim in #2311
What's Changed
- chore: Update dependency karma to 6.3.14 [SECURITY] by @renovate in #2237
- chore(deps): bump follow-redirects from 1.14.5 to 1.14.8 by @dependabot in #2238
- chore(deps): bump engine.io from 6.1.0 to 6.1.2 by @dependabot in #2245
- chore: Update dependency marked to 4.0.10 [SECURITY] by @renovate in #2234
- chore: Update puppeteer by @eonarheim in #2247
- chore: Update dependency karma-coverage to v2.2.0 by @renovate in #2252
- chore: Update dependency karma to v6.3.16 by @renovate in #2248
- chore: Update dependency eslint-plugin-jsdoc to v37.9.1 by @renovate in #2251
- chore: Update dependency eslint to v8.9.0 by @renovate in #2250
- chore: Update dependency puppeteer to v13.3.2 by @renovate in #2181
- chore: Update typescript-eslint monorepo to v5.12.0 by @renovate in #2253
- chore: Update Node.js to v16.14.0 by @renovate in #2249
- chore: Update dependency @babel/core to v7.17.5 by @renovate in #2265
- chore: Update dependency eslint-plugin-jsdoc to v37.9.6 by @renovate in #2258
- chore: Update dependency css-loader to v6.7.1 by @renovate in #2276
- chore: Update dependency ts-loader to v9.2.8 by @renovate in #2275
- chore: Update dependency karma-chrome-launcher to v3.1.1 by @renovate in #2274
- chore: Update dependency eslint to v8.12.0 by @renovate in https://github....
Excalibur v0.25.3 Release
What's Changed
This is a maintenance release with some key bug fixes, notably some quality of life log messages to avoid loading images that are too large, and a fix for Pixel 6 devices to prevent crashing.
Bug Fixes
- fix: [#2206] Add warnings/errors for large images in webgl that wont render by @eonarheim in #2207
- fix: [#2203][#1528] Screenshots work in webgl and return the right HiDPI size by @eonarheim in #2208
- fix: [#2224] Disable touch action on pointer target for mobile platforms by @eonarheim in #2225
- fix: Pixel 6 devices crash when MAX_TEXTURE_IMAGE_UNITS used by @eonarheim in #2226
- fix: polygon colliders have inaccurate collision normals when offset by @eonarheim in #2227
Build Dependencies Updated
- chore: Update dependency typescript to v4.5.5 by @renovate in #2200
- chore(deps): bump log4js from 6.3.0 to 6.4.1 by @dependabot in #2209
- chore(deps): bump nanoid from 3.1.30 to 3.2.0 by @dependabot in #2210
- chore: Update dependency webpack to v5.68.0 by @renovate in #2196
- chore: Update dependency @babel/core to v7.16.12 by @renovate in #2211
- chore: Update dependency @types/node to v16.11.21 by @renovate in #2212
- chore: Update typescript-eslint monorepo to v5.10.2 by @renovate in #2218
- chore: Update storybook monorepo to v6.4.17 by @renovate in #2221
- chore: Update dependency eslint-plugin-jsdoc to v37.7.0 by @renovate in #2217
- chore: Update dependency eslint to v8.8.0 by @renovate in #2216
- chore: Update dependency webpack-cli to v4.9.2 by @renovate in #2220
- chore: Update dependency karma to v6.3.13 by @renovate in #2215
- chore: Update dependency core-js to v3.21.0 by @renovate in #2214
- chore: Update release automation by @eonarheim in #2230
- chore: Update dependency terser-webpack-plugin to v5.3.1 by @renovate in #2223
- chore: Update dependency css-loader to v6.6.0 by @renovate in #2229
- chore: Update dependency eslint-plugin-jsdoc to v37.7.1 by @renovate in #2228
- chore: Update dependency @types/node to v16.11.22 by @renovate in #2222
- chore: Update dependency copy-webpack-plugin to v10.2.4 by @renovate in #2213
Full Changelog: v0.25.2...v0.25.3
Excalibur v0.25.2 Release
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 https://github.com/excaliburjs/Excal...
Excalibur v0.25.1 Release
What's Changed
Deprecated
- Actions
asPromise()
renamed totoPromise()
, will be removed in v0.26.0
Added Features
- feat: [#1892] Animations should allow you to specify the total duration by @catrielmuller in #2065
ex.Animation
now supporttotalDuration
that will calculate automatically each frame duration based on how many frames have.withEngine
utils support an aditional options parameter to override the Engine default options.- Story to show a play / pause implementation.
- chore(webpack): add experimental esm bundle output by @kamranayub in #2064
- Experimental: Native ES module bundle distribution in package
esm/excalibur.js
entrypoint
- Experimental: Native ES module bundle distribution in package
- feat: [#2069] Add easy reverse support to Animations by @eonarheim in #2070
ex.Animation
now supports.reverse()
to reverse the direction of play in an animation, use theex.Animation.direction
to inspect if the animation is playing in theex.AnimationDirection.Forward
direction or theex.AnimationDirection.Backward
direction.
- feat: [#2044] Add Current Graphics Keys to GraphicsComponent by @ignoreintuition in #2072
Bug Fixes
- fix: loader button position on window resize
- fix: issue with setting
ex.TileMap.z
to a value - fix: crash in debug system if there is no collider geometry
- fix: [#2049]: ImageSource loading error message by @nidble in #2052
- fix: [#1431] Dispatch the hidePlayButton on the Button Event to prevent that keep on the screen on some situations [#1431] by @catrielmuller in #2066
- fix: [#2076] Defer initialization until after final resolution calculated by @eonarheim in #2093
- fix: [#1731] Replace TSC build constant + Simplify version generation by @eonarheim in #2053
- revert: VSCode Workbench Colors configurations by @catrielmuller in #2067
Updates
Docs
- docs: Fix typos by @jedeen in #2055
- chore(storybook): fix Storybook by @kamranayub in #1986
Changed/Refactor
- feat: Refactor Actions to ECS System and Component by @eonarheim in #2061
- Internal Actions implementation converted to ECS system and component, this is a backwards compatible change with v0.25.0
ex.ActionsSystem
andex.ActionsComponent
now wrap the existingex.ActionContext
- Actions can be shared with all entities now!
- Dispatch the
hidePlayButton
on the Button Event to prevent that keep on the screen on some situations [#1431]. - Revert VSCode Workbench Colors
Build Dependencies Updates
- chore: Update dependency webpack to v5.56.1 by @renovate in #2054
- chore: Pin dependencies by @renovate in #2074
- chore: Update Node.js to v14.18.1 by @renovate in #2075
- chore: Update dependency @types/react-color to v3.0.6 by @renovate in #2077
- chore: Update dependency @types/webpack-env to v1.16.3 by @renovate in #2078
- chore: Update dependency eslint-plugin-jsdoc to v36.1.1 by @renovate in #2079
- chore: Update dependency karma to v6.3.6 by @renovate in #2080
- chore: Update dependency typescript to v4.4.4 by @renovate in #2081
- chore: Update storybook monorepo by @renovate in #2082
- chore: Update babel monorepo by @renovate in #2083
- chore: Update dependency karma to v6.3.7 by @renovate in #2091
- chore: Update dependency @octokit/rest to v18.12.0 by @renovate in #2084
- chore: Update dependency @types/jasmine to v3.10.1 by @renovate in #2085
- chore: Update dependency core-js to v3.19.0 by @renovate in #2086
- chore: Update dependency css-loader to v6.5.0 by @renovate in #2087
- chore: Update dependency replace-in-file to v6.3.2 by @renovate in #2088
- chore: Update dependency typedoc to v0.22.7 by @renovate in #2089
- chore: Update dependency webpack to v5.61.0 by @renovate in #2090
- chore: Update dependency webpack-cli to v4.9.1 by @renovate in #2092
Contributors
- @nidble made their first contribution in #2052
- @ignoreintuition made their first contribution in #2072
- @Evgenii190
- @floAr
- @tarsupin
- @nilskj
- @0xEAB
Full Changelog: v0.25.0...v0.25.1
Excalibur v0.25.0 Release
See migration guide for v0.24.5 -> v0.25.0
We've had tons of community contributions since the last release. Heartfelt thanks to everyone in the discussions, issues and PRs!
Contributors:
- @jedeen
- @kamranayub
- @alanag13
- @DaVince
- @DrSensor
- @djcsdy
- @catrielmuller
- @AndrewCraswell
- @miqh
- @rledford
- @SirPedr
- @helloausrine
- @dpayne5
- @herobank110
- @didii
- @Charkui
- @muirch
- @rumansaleem
- @mogoh
- @kala2
- @MrBartusek
- @josh
- @LokiMidgard
- @romaintailhurat
- @EduardoHidalgo
- @jaredegan
Breaking Changes
-
Actor Drawing:
ex.Actor.addDrawing
,ex.Actor.setDrawing
,onPostDraw()
, andonPreDraw()
are no longer on by default and will be removed in v0.26.0, they are available behind a flagex.Flags.useLegacyDrawing()
- For custom drawing use the
ex.Canvas
- For custom drawing use the
-
ex.Actor.rx
has been renamed toex.Actor.angularVelocity
-
Rename
ex.Edge
toex.EdgeCollider
andex.ConvexPolygon
toex.PolygonCollider
to avoid confusion and maintian consistency -
ex.Label
constructor now only takes the option bag constructor and the font properties have been replaced withex.Font
const label = new ex.Label({ text: 'My Text', x: 100, y: 100, font: new ex.Font({ family: 'Consolas', size: 32 }) });
-
ex.Physics.debug
properties for Debug drawing are now moved toengine.debug.physics
,engine.debug.collider
, andengine.debug.body
.- Old
debugDraw(ctx: CanvasRenderingContext2D)
methods are removed.
- Old
-
Collision
Pair
's are now between Collider's and not bodies -
PerlinNoise
has been removed from the core repo will now be offered as a plugin -
Legacy drawing implementations are moved behind
ex.LegacyDrawing
new Graphics implemenations ofSprite
,SpriteSheet
,Animation
are now the default import.- To use any of the
ex.LegacyDrawing.*
implementations you must opt-in with theex.Flags.useLegacyDrawing()
note: new graphics do not work in this egacy mode
- To use any of the
-
Renames
CollisionResolutionStrategy.Box
collision resolution strategy toArcade
-
Renames
CollisionResolutionStrategy.RigidBody
collision resolution strategy toRealistic
-
Collider
is now a first class type and encapsulates whatShape
used to be.Collider
is no longer a member of theBody
-
CollisionType
andCollisionGroup
are now a member of theBody
component, the reasoning is they define how the simulated physics body will behave in simulation. -
Timer
's no longer automatically start when added to aScene
, thisTimer.start()
must be called. (#1865) -
Timer.complete
is now read-only to prevent odd bugs, usereset()
,stop()
, andstart()
to manipulate timers. -
Actor.actions.repeat()
andActor.actions.repeatForever()
now require a handler that specifies the actions to repeat. This is more clear and helps prevent bugs like #1891const actor = new ex.Actor(); actor.actions // Move up in a zig-zag by repeating 5 times .repeat((ctx) => { ctx.moveBy(10, 0, 10); ctx.moveBy(0, 10, 10); }, 5) .callMethod(() => { console.log('Done repeating!'); });
-
Removes
Entity.components
as a way to access, add, and remove components -
ex.Camera.z
has been renamed to propertyex.Camera.zoom
which is the zoom factor -
ex.Camera.zoom(...)
has been renamed to functionex.Camera.zoomOverTime()
-
TileMap no longer needs registered SpriteSheets,
Sprite
's can be added directly toCell
's withaddGraphic
- The confusing
TileSprite
type is removed (Related to TileMap plugin updates excaliburjs/excalibur-tiled#4, excaliburjs/excalibur-tiled#23, excaliburjs/excalibur-tiled#108)
- The confusing
-
Directly changing debug drawing by
engine.isDebug = value
has been replaced byengine.showDebug(value)
andengine.toggleDebug()
(#1655) -
UIActor
Class instances need to be replaced toScreenElement
(This Class it's marked as Obsolete) (#1656) -
Switch to browser based promise, the Excalibur implementation
ex.Promise
is marked deprecated (#994) -
DisplayMode
's have changed (#1733) & (#1928):DisplayMode.FitContainer
fits the screen to the available width/height in the canvas parent element, while maintaining aspect ratio and resolutionDisplayMode.FillContainer
update the resolution and viewport dyanmically to fill the available space in the canvas parent element, DOES NOT preserveaspectRatio
DisplayMode.FitScreen
fits the screen to the available browser window space, while maintaining aspect ratio and resolutionDisplayMode.FillScreen
now does whatDisplayMode.FullScreen
used to do, the resolution and viewport dynamically adjust to fill the available space in the window, DOES NOT preserveaspectRatio
(#1733)DisplayMode.FullScreen
is now removed, useScreen.goFullScreen()
.
-
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
andspacing
. -
Engine.pointerScope
now defaults to a more expectedex.Input.PointerScope.Canvas
instead ofex.Input.PointerScope.Document
which can cause frustrating bugs if building an HTML app with Excalibur
Added
- New property
center
toScreen
to encapsulate screen center coordinates calculation considering zoom and device pixel ratio - New
ex.Shape.Capsule(width, height)
helper for defining capsule colliders, these are useful for ramps or jagged floor colliders. - New collision group constructor argument added to Actor
new Actor({collisionGroup: collisionGroup})
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.SpriteSheet
's now have dimensionality withrows
andcolumns
optionally specified, if not there is always 1 row, andsprites.length
columns
new Actor({radius: 10})
can now take a radius parameter to help create circular actors- The
ExcaliburGraphicsContext
now supports drawing debug text Entity
may also now optionally have aname
, this is useful for finding entities by name or when displaying in debug mode.- New
DebugSystem
ECS system will show debug drawing output for things toggled on/off in theengine.debug
section, this allows for a less cluttered debug experience.- Each debug section now has a configurable color.
- Turn on WebGL support with
ex.Flags.useWebGL()
- Added new helpers to
CollisionGroup
to define groups that collide with specified groupsCollisionGroup.collidesWith([groupA, groupB])
- Combine groups with
const groupAandB = CollisionGroup.combine([groupA, groupB])
- Invert a group instance
const everthingButGroupA = groupA.invert()
- Combine groups with
- Improved Collision Simulation
- New ECS based
CollisionSystem
andMotionSystem
- Rigid body's can now sleep for improved performance
- Multiple contacts now supported which improves stability
- Iterative solver for improved stability
- New ECS based
- Added
ColliderComponent
to hold individualCollider
implementations likeCircle
,Box
, orCompositeCollider
Actor.collider.get()
will get the current colliderActor.collider.set(someCollider)
allows you to set a specific collider
- New
CompositeCollider
type to combine multiple colliders together into one for an entity- Composite colliders flatten into their individual colliders in the collision system
- Composite collider keeps it's internal colliders in a DynamicTree for fast
.collide
checks
- New
TransformComponent
to encapsulate Entity transform, that is to say position, rotation, and scale - New
MotionComponent
to encapsulate Entity transform values changing over time like velocity and acceleration - Added multi-line support to
Text
graphics (#1866) - Added
TileMap
arbitrary graphics support with.addGraphic()
(#1862) - Added
TileMap
row and column accessorsgetRows()
andgetColumns()
(#1859) - Added the ability to store arbitrary data in
TileMap
cells withCell.data.set('key', 'value')
andCell.data.get('key')
(#1861) - Actions
moveTo()
,moveBy()
,easeTo()
,scaleTo()
, andscaleBy()
now have vector overloads Animation.fromSpriteSheet
will now log a warning if an index into theSpriteSheet
is invalid (#1856)new ImageSource()
will now log a warning if an image type isn't fully supported. (#1855)Timer.start()
to explicitly start timers, andTimer.stop()
to stop timers and "rewind" them.Timer.timeToNextAction
will return the milliseconds until the next action callbackTimer.timeElapsedTowardNextAction
will return the milliseconds counted towards the next action callbackBoundingBox
now has a method for detecting zero dimensions in width or height `hasZeroDimen...