Skip to content

Releases: excaliburjs/Excalibur

Excalibur v0.25.2 Release

22 Jan 04:30

Choose a tag to compare

image

What's Changed

See migration guide for v0.25.x -> v0.25.2

Plugin Updates!

  • Excalibur Dev Tools for game debugging!
    image
  • Lots of quality of life improvements in the Tiled plugin
    • Tiled data is added to corresponding Entities via TiledObjectComponent and TiledLayerComponent
    • Tiled name's become excalibur Entity names
    • Layers and object use Tiled Z-indexing by default

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, like performance.now()
      1. StandardClock encapsulates the existing requestAnimationFrame api logic
      2. TestClock allows a user to manually step the mainloop, this can be useful for frame by frame debugging #1170
      3. The base abstract clock implements the specifics of elapsed time
  • 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
  • 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 them ex.ExcaliburGraphicsContext.register(new LineRenderer())
    • Added ability to draw circles and rectangles with outlines! ex.ExcaliburGraphicsContext.drawCircle(...) and ex.ExcaliburGraphicsContext.drawRectangle(...)
  • Added ex.CoordPlane can be set in the new 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 loaded
    • ex.ImageFiltering.Blended - Blended is useful when you have high resolution artwork and would like it blended and smoothed
    • ex.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 graphic
    • antialiasing: true, then the blend mode defaults to ex.ImageFiltering.Blended
    • antialiasing: false, then the blend mode defaults to ex.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 events
    • useGraphicsBounds - (default false) uses the graphics bounds for pointer events
  • Added new measureText method to the ex.SpriteFont and ex.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 interface
    export interface PostProcessor {
      intialize(gl: WebGLRenderingContext): void;
      getShader(): Shader;
      getLayout(): VertexLayout;
    }
  • Excalibur ex.EventEmitter on longer overrides the this 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 the Clock api
  • Mark legacy draw routines in ex.Engine, ex.Scene, and ex.Actor deprecated

Bug Fixes

  • fix: Performance improvements avoid expensive calculations by @eonarheim in #2197
    • Big improvement v0.25.0 on the left and v0.25.2 on the right! We stay above 30fps @ 4000 actors! More to come in the future!
    • image
  • 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

Docs

Build Dependencies Updated

Read more

Excalibur v0.25.1 Release

06 Nov 02:32

Choose a tag to compare

image

What's Changed

Deprecated

  • Actions asPromise() renamed to toPromise(), 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 support totalDuration 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
  • 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 the ex.Animation.direction to inspect if the animation is playing in the ex.AnimationDirection.Forward direction or the ex.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

  • chore: Update copyright with initial commit year by @jedeen in #2056

Docs

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 and ex.ActionsComponent now wrap the existing ex.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

Contributors

Full Changelog: v0.25.0...v0.25.1

Excalibur v0.25.0 Release

04 Oct 01:14

Choose a tag to compare

image

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:

Breaking Changes

  • 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()

    • For custom drawing use the ex.Canvas
  • ex.Actor.rx has been renamed to ex.Actor.angularVelocity

  • Rename ex.Edge to ex.EdgeCollider and ex.ConvexPolygon to ex.PolygonCollider to avoid confusion and maintian consistency

  • ex.Label constructor now only takes the option bag constructor and the font properties have been replaced with ex.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 to engine.debug.physics, engine.debug.collider, and engine.debug.body.

    • Old debugDraw(ctx: CanvasRenderingContext2D) methods are removed.
  • 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 of Sprite, SpriteSheet, Animation are now the default import.

    • 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
  • Renames CollisionResolutionStrategy.Box collision resolution strategy to Arcade

  • Renames CollisionResolutionStrategy.RigidBody collision resolution strategy to Realistic

  • Collider is now a first class type and encapsulates what Shape used to be. Collider is no longer a member of the Body

  • 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.

  • Timer's no longer automatically start when added to a Scene, this Timer.start() must be called. (#1865)

  • Timer.complete is now read-only to prevent odd bugs, use reset(), stop(), and start() to manipulate timers.

  • 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

    const 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 property ex.Camera.zoom which is the zoom factor

  • ex.Camera.zoom(...) has been renamed to function ex.Camera.zoomOverTime()

  • TileMap no longer needs registered SpriteSheets, Sprite's can be added directly to Cell's with addGraphic

  • Directly changing debug drawing by engine.isDebug = value has been replaced by engine.showDebug(value) and engine.toggleDebug() (#1655)

  • UIActor Class instances need to be replaced to ScreenElement (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 resolution
    • DisplayMode.FillContainer update the resolution and viewport dyanmically to fill the available space in the canvas parent element, DOES NOT preserve aspectRatio
    • DisplayMode.FitScreen fits the screen to the available browser window space, while maintaining aspect ratio and resolution
    • 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)
    • DisplayMode.FullScreen is now removed, use Screen.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 and spacing.

  • 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

Added

  • New property center to Screen 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 Actornew 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 with rows and columns optionally specified, if not there is always 1 row, and sprites.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 a name, 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 the engine.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 groups CollisionGroup.collidesWith([groupA, groupB])
    • Combine groups with const groupAandB = CollisionGroup.combine([groupA, groupB])
    • Invert a group instance const everthingButGroupA = groupA.invert()
  • Improved Collision Simulation
    • New ECS based CollisionSystem and MotionSystem
    • Rigid body's can now sleep for improved performance
    • Multiple contacts now supported which improves stability
    • Iterative solver for improved stability
  • Added ColliderComponent to hold individual Collider implementations like Circle, Box, or CompositeCollider
    • Actor.collider.get() will get the current collider
    • Actor.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 accessors getRows() and getColumns() (#1859)
  • Added the ability to store arbitrary data in TileMap cells with Cell.data.set('key', 'value') and Cell.data.get('key') (#1861)
  • Actions moveTo(), moveBy(), easeTo(), scaleTo(), and scaleBy() now have vector overloads
  • Animation.fromSpriteSheet will now log a warning if an index into the SpriteSheet 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, and Timer.stop() to stop timers and "rewind" them.
  • Timer.timeToNextAction will return the milliseconds until the next action callback
  • Timer.timeElapsedTowardNextAction will return the milliseconds counted towards the next action callback
  • BoundingBox now has a method for detecting zero dimensions in width or height `hasZeroDimen...
Read more

Excalibur v0.24.5 Release

07 Sep 23:57

Choose a tag to compare

image

Breaking Changes

  • [#1361] Makes use of proxies, Excalibur no longer supports IE11 💥 ([#1361]#1361)

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.EntityManager which represent anything that can do something in a Scene and are containers for Components
    • Adds new ex.Component type which allows encapsulation of state on entities
    • Adds new ex.Query & ex.QueryManager which allows queries over entities that match a component list
    • Adds new ex.System type which operates on matching Entities to do some behavior in Excalibur.
    • Adds new ex.Observable a small observable implementation for observing Entity component changes over time

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

03 Sep 00:18

Choose a tag to compare

image

Breaking Changes

Added

  • Add new ex.Screen abstraction 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 Loader screen. (#1417)
    • Logo position Loader.logoPosition
    • Play button position Loader.playButtonPosition
    • Loading bar position Loader.loadingBarPosition
    • Loading bar color Loader.loadingBarColor by default is white, but can be any excalibur ex.Color

Changed

  • Remove usage of mock.engine from 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 onInitialize order (#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

10 May 15:40

Choose a tag to compare

image

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

24 Apr 02:54

Choose a tag to compare

image

Fixed

  • Fix collision type initialization regression

Excalibur v0.24.0 Release

24 Apr 01:11
32f5e5c

Choose a tag to compare

image

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 processed to Sound that passes processed string | AudioBuffer data. (#1474)
  • Added new property duration to Sound and AudioInstance that 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 in v0.25.0, use ex.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 = ? and ex.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

08 Jun 16:13

Choose a tag to compare

image

Thanks to @DavidLi119, @radist2s, @magnusandy, @djcsdy, and @ZuzuZain for their contributions!

Breaking Changes

  • 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.

Added

  • Add new collision group implementation (#1091, #862)
  • New ex.Collider type 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.scale now also works with vector input
  • ex.BoundingBox.fromDimension(width: number, height: number) can generate a bounding box from a width and height
  • ex.BoundingBox.translate(pos: Vector) will create a new bounding box shifted by pos
  • ex.BoundingBox.scale(scale: Vector) will create a new bounding box scaled by scale
  • Added isActor() and isCollider() type guards
  • Added ex.CollisionShape.draw collision shapes can now be drawn, actor's will use these shapes if no other drawing is specified
  • Added a getClosestLineBetween method to CollisionShape's for returning the closest line between 2 shapes (#1071)

Changed

  • Change ex.Actor.within to use surface of object geometry instead of the center to make judgements (#1071)

  • 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.

  • 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) making strict null/function checks compatible with new typescript.

  • 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)

    • Add new ex.Collider type that is the housing for all collision related code
      • The source of truth for ex.CollisionType is now on collider, with a convenience getter on actor
      • The collision system now operates on ex.Collider's not ex.Actor's
    • ex.CollisionType has been moved to a separate file outside of Actor
      • CollisionType is switched to a string enum, style guide also updated
    • ex.CollisionPair now operates on a pair of ex.Colliders's instead of ex.Actors's
    • ex.CollisionContact now operates on a pair of ex.Collider's instead of ex.Actors's
    • ex.Body has been modified to house all the physical position/transform information
      • Integration has been moved from actor to Body as a physical concern
      • useBoxCollision has been renamed to useBoxCollider
      • useCircleCollision has been renamed to useCircleCollider
      • usePolygonCollision has been renamed to usePolygonCollider
      • useEdgeCollision has been renamed to useEdgeCollider
    • Renamed ex.CollisionArea to ex.CollisionShape
      • ex.CircleArea has been renamed to ex.Circle
      • ex.PolygonArea has been renamed to ex.ConvexPolygon
      • ex.EdgeArea has been renamed to ex.Edge
    • Renamed getWidth() & setWidth() to property width
      • Actor and BoundingBox are affected
    • Renamed getHeight() & setHeight() to property height
      • Actor and BoundingBox are affected
    • Renamed getCenter() to the property center
      • Actor, BoundingBox, and Cell are affected
    • Renamed getBounds() to the property bounds
      • Actor, Collider, and Shapes are affected
    • Renamed getRelativeBounds() to the property localBounds
      • Actor, Collider, and Shapes are affected
    • Renamed moi() to the property inertia standing for moment of inertia
    • Renamed restition to the property bounciness
    • Moved collisionType to Actor.body.collider.type
    • Moved Actor.integrate to Actor.body.integrate

Deprecated

  • Legacy groups ex.Group will be removed in v0.24.0, use collision groups as a replacement (#1091)

  • Legacy collision groups off Actor will be removed in v0.24.0, use Actor.body.collider.collisionGroup (#1091)

  • Removed NaiveCollisionBroadphase as it was no longer used

  • Renamed methods and properties will be available until v0.24.0

  • Deprecated collision attributes on actor, use Actor.body.collider

    • Actor.x & Actor.y will be removed in v0.24.0 use Actor.pos.x & Actor.pos.y
    • Actor.collisionArea will be removed in v0.24.0 use Actor.body.collider.shape
    • Actor.getLeft(), Actor.getRight(), Actor.getTop(), and Actor.getBottom are deprecated
      • Use Actor.body.collider.bounds.(left|right|top|bottom)
    • Actor.getGeometry() and Actor.getRelativeGeometry() are removed, use Collider
    • Collision related properties on Actor moved to Collider, useActor.body.collider
      • Actor.torque
      • Actor.mass
      • Actor.moi
      • Actor.friction
      • Actor.restition
    • Collision related methods on Actor moved to Collider, useActor.body.collider or Actor.body.collider.bounds
      • Actor.getSideFromIntersect(intersect) -> BoundingBox.sideFromIntersection
      • Actor.collidesWithSide(actor) -> Actor.body.collider.bounds.intersectWithSide
      • Actor.collides(actor) -> Actor.body.collider.bounds.intersect

Fixed

  • Fixed issue where leaking window/document handlers was possible when calling ex.Engine.stop() and ex.Engine.start(). (#1063)
  • Fixed wrong Camera and Loader scaling on HiDPI screens when option suppressHiDPIScaling is set. (#1120)
  • Fixed polyfill application by exporting a polyfill() function that can be called. (#1132)
  • Fixed Color.lighten() (#1084)

Excalibur v0.22.0

06 Apr 15:38

Choose a tag to compare

image

Thanks to @edualb and @agrgic16 for their contributions!

Breaking Changes

  • ex.BaseCamera replaced with Camera, #1087

Added

  • Added enableCanvasTransparency property that can enable/disable canvas transparency (#1096)

Changed

  • Upgraded Excalibur to TypeScript 3.3.3333 (#1052)
  • Added exceptions on SpriteSheetImpl constructor to check if the source texture dimensions are valid (#1108)