Releases: excaliburjs/Excalibur
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
TiledObjectComponentandTiledLayerComponent - 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
Clockapi 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()StandardClockencapsulates the existingrequestAnimationFrameapi logicTestClockallows 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.ScreenShaderhelper 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-toolsby @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.CoordPlanecan 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.ImageSourcecan 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.EngineOptionantialiasing property, but can be overridden per graphicantialiasing: true, then the blend mode defaults toex.ImageFiltering.Blendedantialiasing: 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.PointerComponentuseColliderShape- (default true) uses the collider component geometry for pointer eventsuseGraphicsBounds- (default false) uses the graphics bounds for pointer events
- Added new
measureTextmethod to theex.SpriteFontandex.Fontto 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.EventEmitteron longer overrides thethisparameter 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.createMainLoopis now marked deprecated and will be removed in v0.26.0, it is replaced by theClockapi - Mark legacy draw routines in
ex.Engine,ex.Scene, andex.Actordeprecated
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.Animationnow supporttotalDurationthat will calculate automatically each frame duration based on how many frames have.withEngineutils 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.jsentrypoint
- Experimental: Native ES module bundle distribution in package
- feat: [#2069] Add easy reverse support to Animations by @eonarheim in #2070
ex.Animationnow supports.reverse()to reverse the direction of play in an animation, use theex.Animation.directionto inspect if the animation is playing in theex.AnimationDirection.Forwarddirection or theex.AnimationDirection.Backwarddirection.
- 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.zto 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.ActionsSystemandex.ActionsComponentnow wrap the existingex.ActionContext- Actions can be shared with all entities now!
- Dispatch the
hidePlayButtonon 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.rxhas been renamed toex.Actor.angularVelocity -
Rename
ex.Edgetoex.EdgeColliderandex.ConvexPolygontoex.PolygonColliderto avoid confusion and maintian consistency -
ex.Labelconstructor now only takes the option bag constructor and the font properties have been replaced withex.Fontconst label = new ex.Label({ text: 'My Text', x: 100, y: 100, font: new ex.Font({ family: 'Consolas', size: 32 }) });
-
ex.Physics.debugproperties 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 -
PerlinNoisehas been removed from the core repo will now be offered as a plugin -
Legacy drawing implementations are moved behind
ex.LegacyDrawingnew Graphics implemenations ofSprite,SpriteSheet,Animationare 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.Boxcollision resolution strategy toArcade -
Renames
CollisionResolutionStrategy.RigidBodycollision resolution strategy toRealistic -
Collideris now a first class type and encapsulates whatShapeused to be.Collideris no longer a member of theBody -
CollisionTypeandCollisionGroupare now a member of theBodycomponent, 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.completeis 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.componentsas a way to access, add, and remove components -
ex.Camera.zhas been renamed to propertyex.Camera.zoomwhich 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
TileSpritetype 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 = valuehas been replaced byengine.showDebug(value)andengine.toggleDebug()(#1655) -
UIActorClass instances need to be replaced toScreenElement(This Class it's marked as Obsolete) (#1656) -
Switch to browser based promise, the Excalibur implementation
ex.Promiseis marked deprecated (#994) -
DisplayMode's have changed (#1733) & (#1928):DisplayMode.FitContainerfits the screen to the available width/height in the canvas parent element, while maintaining aspect ratio and resolutionDisplayMode.FillContainerupdate the resolution and viewport dyanmically to fill the available space in the canvas parent element, DOES NOT preserveaspectRatioDisplayMode.FitScreenfits the screen to the available browser window space, while maintaining aspect ratio and resolutionDisplayMode.FillScreennow does whatDisplayMode.FullScreenused to do, the resolution and viewport dynamically adjust to fill the available space in the window, DOES NOT preserveaspectRatio(#1733)DisplayMode.FullScreenis now removed, useScreen.goFullScreen().
-
SpriteSheetnow 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,spritesandspacing. -
Engine.pointerScopenow defaults to a more expectedex.Input.PointerScope.Canvasinstead ofex.Input.PointerScope.Documentwhich can cause frustrating bugs if building an HTML app with Excalibur
Added
- New property
centertoScreento 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 withrowsandcolumnsoptionally specified, if not there is always 1 row, andsprites.lengthcolumns
new Actor({radius: 10})can now take a radius parameter to help create circular actors- The
ExcaliburGraphicsContextnow supports drawing debug text Entitymay also now optionally have aname, this is useful for finding entities by name or when displaying in debug mode.- New
DebugSystemECS system will show debug drawing output for things toggled on/off in theengine.debugsection, 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
CollisionGroupto 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
CollisionSystemandMotionSystem - 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
ColliderComponentto hold individualColliderimplementations likeCircle,Box, orCompositeColliderActor.collider.get()will get the current colliderActor.collider.set(someCollider)allows you to set a specific collider
- New
CompositeCollidertype 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
.collidechecks
- New
TransformComponentto encapsulate Entity transform, that is to say position, rotation, and scale - New
MotionComponentto encapsulate Entity transform values changing over time like velocity and acceleration - Added multi-line support to
Textgraphics (#1866) - Added
TileMaparbitrary graphics support with.addGraphic()(#1862) - Added
TileMaprow and column accessorsgetRows()andgetColumns()(#1859) - Added the ability to store arbitrary data in
TileMapcells withCell.data.set('key', 'value')andCell.data.get('key')(#1861) - Actions
moveTo(),moveBy(),easeTo(),scaleTo(), andscaleBy()now have vector overloads Animation.fromSpriteSheetwill now log a warning if an index into theSpriteSheetis 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.timeToNextActionwill return the milliseconds until the next action callbackTimer.timeElapsedTowardNextActionwill return the milliseconds counted towards the next action callbackBoundingBoxnow has a method for detecting zero dimensions in width or height `hasZeroDimen...
Excalibur v0.24.5 Release
Breaking Changes
Added
- Adds new ECS Foundations API, which allows excalibur core behavior to be manipulated with ECS style code ([#1361]#1361)
- Adds new
ex.Entity&ex.EntityManagerwhich represent anything that can do something in a Scene and are containers for Components - Adds new
ex.Componenttype which allows encapsulation of state on entities - Adds new
ex.Query&ex.QueryManagerwhich allows queries over entities that match a component list - Adds new
ex.Systemtype which operates on matching Entities to do some behavior in Excalibur. - Adds new
ex.Observablea small observable implementation for observing Entity component changes over time
- Adds new
Fixed
- Fixed Animation flicker bug on the first frame when using animations with scale, anchors, or rotation. (#1636)
Changes
- chore: Switch to main
- feat: Implement ECS Foundations (#1316)
- chore: Update storybook monorepo to v6 (major) (#1634)
- chore: Update dependency karma-jasmine to v4 (#1633)
- chore: Update Node.js to v12.18.3 (#1600)
- chore: [#1487] Remove audio tag implementation (#1552)
- chore: Remove flakey test, reopen #1547
- chore: Update dependency puppeteer to v5 (#1614)
- fix: [#1636] Animation flicker on first frame (#1637)
- fix: Documentation link
Excalibur v0.24.4 Release
Breaking Changes
Added
- Add new
ex.Screenabstraction to manage viewport size and resolution independently and all other screen related logic. (#1617)- New support for the browser fullscreen API
- Add color blind mode simulation and correction in debug object.
(#390) - Add
LimitCameraBoundsStrategy, which always keeps the camera locked to within the given bounds. (#1498) - Add mechanisms to manipulate the
Loaderscreen. (#1417)- Logo position
Loader.logoPosition - Play button position
Loader.playButtonPosition - Loading bar position
Loader.loadingBarPosition - Loading bar color
Loader.loadingBarColorby default is white, but can be any excaliburex.Color
- Logo position
Changed
- Remove usage of
mock.enginefrom the tests. Use real engine instead. - Upgrade Excalibur to TypeScript 3.9.2
- Upgrade Excalibur to Node 12 LTS
Deprecated
Removed
Fixed
- Fixed Loader play button markup and styles are now cleaned up after clicked (#1431)
- Fixed Excalibur crashing when embedded within a cross-origin IFrame (#1151)
- Fixed performance issue where uneccessary effect processing was occurring for opacity changes (#1549)
- Fixed issue when loading images from a base64 strings that would crash the loader (#1543)
- Fixed issue where actors that were not in scene still received pointer events (#1555)
- Fixed Scene initialization order when using the lifecycle overrides (#1553)
Changes
- chore: Update dependency @types/node to v14.6.2
- chore: Update dependency @types/jasmine to v3.5.14
- chore: Update dependency eslint to v7.8.1
- chore: Update storybook monorepo to v5.3.21
- chore: Update dependency tslint to v6.1.3
- chore: Update dependency typedoc to v0.19.0
- chore: Update dependency prettier to v2.1.1
- chore: Update dependency ts-loader to v8.0.3
- chore: Update dependency lint-staged to v10.2.13
- chore: Update dependency karma to v5.2.0
- chore: Update dependency grunt to v1.3.0
- chore: Update dependency css-loader to v4.2.2
- chore: Update dependency copy-webpack-plugin to v6.1.0
- chore: Update dependency @fortawesome/fontawesome-free to v5.14.0
- chore: Update dependency @babel/core to v7.11.5
- chore: Update Versions + CSS Loader Regression (#1619)
- chore: Update dependency @types/jasmine to v3.5.12
- chore: Update dependency @types/node to v14.6.0
- chore: Update dependency eslint to v7.7.0
- fix: [#1547] Flakey tests (#1618)
- chore: Update dependency css-loader to v4 (#1612)
- chore: Update dependency ts-loader to v8 (#1615)
- chore: Update jasmine monorepo
- chore: Update dependency webpack to v4.44.1
- chore: Update dependency karma-coverage to v2.0.3
- chore: Update dependency karma to v5.1.1
- chore: Update dependency grunt to v1.2.1
- fix: [#1549] Remove unecessary sprite effect for opacity (#1550)
- feat: [#1617] Screen Resolution Abstraction (#1598)
- chore: Update dependency webpack-cli to v3.3.12
- chore: Update dependency typedoc to v0.17.8
- chore: Update dependency puppeteer to v3.3.0
- chore: Update dependency lint-staged to v10.2.11
- chore: Update dependency eslint to v7.3.1
- chore: Update dependency karma to v5.1.0
- chore: Update dependency copyfiles to v2.3.0
- chore: Update dependency css-loader to v3.6.0
- chore: Update dependency copy-webpack-plugin to v6.0.3
- chore: Update dependency @types/node to v14.0.14
- chore: Update dependency @types/react-color to v3.0.4
- chore: Update dependency @fortawesome/fontawesome-free to v5.13.1
- chore: Update dependency @types/jasmine to v3.5.11
- chore: Update dependency @babel/core to v7.10.4
- chore: Update Node.js to v12.18.2
- chore: Update dependency copy-webpack-plugin to v6 (#1573)
- fix: [#805] Replace mock.engine by real engine (#1514)
- chore: Update dependency eslint-plugin-jsdoc to v22.2.0
- fix: [#1555] Pointer events should only work on actors in scene (#1556)
- chore: Update dependency eslint to v7 (#1574)
- chore: Update dependency karma-coverage-istanbul-reporter to v3 (#1576)
- docs: [#1538] Update our Code of Conduct (#1579)
- chore: Update dependency serve to v11.3.2
- chore: Update dependency @types/react-color to v3.0.2
- chore: Update dependency @types/node to v14.0.9
- chore: Update storybook monorepo to v5.3.19
- chore: Update dependency typescript to v3.9.3
- chore: Update typescript-eslint monorepo to v2.34.0
- chore: Update dependency typedoc to v0.17.7
- chore: Update dependency ts-loader to v7.0.5
- chore: Update dependency puppeteer to v3.2.0
- chore: Update dependency lint-staged to v10.2.7
- chore: Update dependency karma-jasmine to v3.3.1
- chore: Update dependency karma to v5.0.9
- chore: Update dependency @types/node to v14.0.6
- chore: Update dependency @babel/core to v7.10.2
- chore: Update Node.js to v12.17.0
- chore: Pin dependency lint-staged to 10.2.2
- fix: [#1553] Scene
onInitializeorder (#1554) - fix: [#1417] [#1431] Loader positioning, allow customization, clean-up html (#1507)
- fix: [#1543] Correct loading base64 string images (#1546)
- chore: Switch to lint-staged (#1551)
- chore: Update to node 12 (#1545)
- chore: Update dependency @babel/core to v7.9.6
- [chore] Update dependency webpack to v4.43.0 (#1524)
- chore: fix https in package-lock.json
- chore: Upgrade to TypeScript 3.9.2 (#1544)
- feat: [#1498] Implement Camera Bounds Strategy (#1526)
- [chore] update typedoc-default-themes
- docs: Streamline language in the readme (#1537)
- chore: [#1508] Update Renovate/release commit format (#1540)
- [chore] Fix nuget publish
Excalibur v0.24.3 Release
Changes
- [chore] Update release automation
- [chore] Add actions intro story and split rotate story (#1534)
- [chore]: Add more action stories (#1532)
- [chore] Update dependency tslint to v6.1.2
- [chore] Update dependency typedoc to v0.17.6
- [chore] Update dependency ts-loader to v7.0.2
- [chore] Update dependency lint-staged to v10.2.2
- [chore] Update dependency puppeteer to v3.0.2
- [chore] Update dependency lint-staged to v10.2.1
- [chore] Update dependency karma to v5.0.4
- [#290] Add correction and simulation of colorblindness (#1515)
Excalibur v0.24.1 Release
Excalibur v0.24.0 Release
Breaking Changes
- Remove obsolete
.extend()semantics in Class.ts as as well as related test cases.
Added
- Added new option for constructing bounding boxes. You can now construct with an options
object rather than only individual coordinate parameters. (#1151) - Added new interface for specifying the type of the options object passed to the
bounding box constructor. - Added the
ex.vec(x, y)shorthand for creating vectors.
(#1340) - Added new event
processedtoSoundthat passes processedstring | AudioBufferdata. (#1474) - Added new property
durationtoSoundandAudioInstancethat exposes the track's duration in seconds when Web Audio API is used. (#1474)
Changed
- Animation no longer mutate underlying sprites, instead they draw the sprite using the animations parameters. This allows more robust flipping at runtime. (#1258)
- Changed obsolete decorator to only log the same message 5 times. (#1281)
- Switched to core-js based polyfills instead of custom written ones (#1214)
- Updated to TypeScript@3.6.4 and node 10 LTS build
Sound.stop()now always rewinds the track, even when the sound is paused. (#1474)
Deprecated
ex.Vector.magnitude()will be removed inv0.25.0, useex.Vector.size(). (#1277)
Fixed
- Fixed Excalibur crashing when displaying both a tilemap and a zero-size actor (#1418)
- Fixed animation flipping behavior (#1172)
- Fixed actors being drawn when their opacity is 0 (#875)
- Fixed iframe event handling, excalibur will respond to keyboard events from the top window (#1294)
- Fixed camera to be vector backed so
ex.Camera.x = ?andex.Camera.pos.setTo(...)both work as expected(#1299) - Fixed missing on/once/off signatures on
ex.Pointer(#1345) - Fixed sounds not being stopped when
Engine.stop()is called. (#1476)
Thanks to @JeTmAn1981, @gargrave, @SirKitboard, @Guzzler, @saahilk, @djcsdy, @chrispanag, @MaanasArora, @jlennox, @jweissman, @HParker, @jurca, and @DaVince for their contributions!
Excalibur v0.23.0
Thanks to @DavidLi119, @radist2s, @magnusandy, @djcsdy, and @ZuzuZain for their contributions!
Breaking Changes
ex.Actor.scale,ex.Actor.sx/sy,ex.Actor.actions.scaleTo/scaleBywill not work as expected with new collider implementation, set width and height directly. These features will be completely removed in v0.24.0.
Added
- Add new collision group implementation (#1091, #862)
- New
ex.Collidertype which is the container for all collision related behavior and state. Actor is now extracted from collision. - Added interface
Clonable<T>to indicate if an object contains a clone method - Added interface
Eventable<T>to indicated if an object can emit and receive events ex.Vector.scalenow also works with vector inputex.BoundingBox.fromDimension(width: number, height: number)can generate a bounding box from a width and heightex.BoundingBox.translate(pos: Vector)will create a new bounding box shifted byposex.BoundingBox.scale(scale: Vector)will create a new bounding box scaled byscale- Added
isActor()andisCollider()type guards - Added
ex.CollisionShape.drawcollision shapes can now be drawn, actor's will use these shapes if no other drawing is specified - Added a
getClosestLineBetweenmethod toCollisionShape's for returning the closest line between 2 shapes (#1071)
Changed
-
Change
ex.Actor.withinto use surface of object geometry instead of the center to make judgements (#1071) -
Changed
moveBy,rotateBy, andscaleByto operate relative to the current actor position at a speed, instead of moving to an absolute by a certain time. -
Changed event handlers in excalibur to expect non-null event objects, before
hander: (event?: GameEvent) => voidimplied that event could be null. This change addresses (#1147) making strict null/function checks compatible with new typescript. -
Changed collision system to remove actor coupling, in addition
ex.Collideris a new type that encapsulates all collision behavior. Useex.Actor.body.colliderto interact with collisions in Excalibur (#1119)- Add new
ex.Collidertype that is the housing for all collision related code- The source of truth for
ex.CollisionTypeis now on collider, with a convenience getter on actor - The collision system now operates on
ex.Collider's notex.Actor's
- The source of truth for
ex.CollisionTypehas been moved to a separate file outside ofActor- CollisionType is switched to a string enum, style guide also updated
ex.CollisionPairnow operates on a pair ofex.Colliders's instead ofex.Actors'sex.CollisionContactnow operates on a pair ofex.Collider's instead ofex.Actors'sex.Bodyhas been modified to house all the physical position/transform information- Integration has been moved from actor to
Bodyas a physical concern useBoxCollisionhas been renamed touseBoxCollideruseCircleCollisionhas been renamed touseCircleColliderusePolygonCollisionhas been renamed tousePolygonCollideruseEdgeCollisionhas been renamed touseEdgeCollider
- Integration has been moved from actor to
- Renamed
ex.CollisionAreatoex.CollisionShapeex.CircleAreahas been renamed toex.Circleex.PolygonAreahas been renamed toex.ConvexPolygonex.EdgeAreahas been renamed toex.Edge
- Renamed
getWidth()&setWidth()to propertywidth- Actor and BoundingBox are affected
- Renamed
getHeight()&setHeight()to propertyheight- Actor and BoundingBox are affected
- Renamed
getCenter()to the propertycenter- Actor, BoundingBox, and Cell are affected
- Renamed
getBounds()to the propertybounds- Actor, Collider, and Shapes are affected
- Renamed
getRelativeBounds()to the propertylocalBounds- Actor, Collider, and Shapes are affected
- Renamed
moi()to the propertyinertiastanding for moment of inertia - Renamed
restitionto the propertybounciness - Moved
collisionTypetoActor.body.collider.type - Moved
Actor.integratetoActor.body.integrate
- Add new
Deprecated
-
Legacy groups
ex.Groupwill be removed in v0.24.0, use collision groups as a replacement (#1091) -
Legacy collision groups off
Actorwill be removed in v0.24.0, useActor.body.collider.collisionGroup(#1091) -
Removed
NaiveCollisionBroadphaseas it was no longer used -
Renamed methods and properties will be available until
v0.24.0 -
Deprecated collision attributes on actor, use
Actor.body.colliderActor.x&Actor.ywill be removed inv0.24.0useActor.pos.x&Actor.pos.yActor.collisionAreawill be removed inv0.24.0useActor.body.collider.shapeActor.getLeft(),Actor.getRight(),Actor.getTop(), andActor.getBottomare deprecated- Use
Actor.body.collider.bounds.(left|right|top|bottom)
- Use
Actor.getGeometry()andActor.getRelativeGeometry()are removed, useCollider- Collision related properties on Actor moved to
Collider, useActor.body.colliderActor.torqueActor.massActor.moiActor.frictionActor.restition
- Collision related methods on Actor moved to
Collider, useActor.body.colliderorActor.body.collider.boundsActor.getSideFromIntersect(intersect)->BoundingBox.sideFromIntersectionActor.collidesWithSide(actor)->Actor.body.collider.bounds.intersectWithSideActor.collides(actor)->Actor.body.collider.bounds.intersect
Fixed
- Fixed issue where leaking window/document handlers was possible when calling
ex.Engine.stop()andex.Engine.start(). (#1063) - Fixed wrong
CameraandLoaderscaling on HiDPI screens when optionsuppressHiDPIScalingis set. (#1120) - Fixed polyfill application by exporting a
polyfill()function that can be called. (#1132) - Fixed
Color.lighten()(#1084)

