๐ŸŽฎ Excalibur is a free game engine written in TypeScript for making 2D games in HTML5 canvas

Overview

Logo

Build Status Appveyor status Coverage Status npm version npm downloads NuGet version

Sweep Stacks

Excalibur is a free game engine written in TypeScript for making 2D games in HTML5 canvas. Our goal is to make it easier for you to create 2D HTML/JS games, whether you're new to game development or you're an experienced game developer. We take care of all of the boilerplate engine code, cross-platform targeting (using browserstack ๐Ÿ˜Ž ), and more! Use as much or as little as you need!

Excalibur is an open source project licensed under the 2-clause BSD license (this means you can use it in commercial projects!). It's free and always will be. We welcome any feedback or contributions! If you make something with Excalibur, please let us know!

Get Started

Our user documentation is at https://excaliburjs.com/docs (and you can contribute to the docs at https://github.com/excaliburjs/excaliburjs.github.io)

โ— Note: Excalibur is still in version 0.x, which means this project and its associated plugins may be a little rough around the edges. We try to minimize API changes, but breaking changes will occur in new released versions. Excalibur is a labor of love and the product of many hours of spare time. Thanks for checking it out!

API Reference

Visit the API Reference section for fully-annotated documentation of the API.

Questions

Samples

Compiled examples can be found in the Excalibur Samples collection.

Contributing

Please read our Contributing Guidelines and our Code of Conduct. Whether you've spotted a bug, have a question, or think of a new feature, we thank you for your help!

Writing Documentation

We love when people help improve our documentation. You can contribute to the docs in this repository.

Environment Setup

The Excalibur.js team primarily uses Visual Studio Code as a platform agnostic editor to allow the widest contributions possible. However, you can always use your own preferred editor.

Testing

Browserstack

Excalibur is committed to supporting the latest 2 versions of popular desktop and mobile browsers. We leverage browserstack automated testing to ensure that Excalibur is automatically tested as thoroughly as possible on all our supported platforms.

Prerequisites

After cloning the repository, run:

npm install

You can then run the npm tasks for various purposes:

# Run compilation, linting, and all unit & visual tests
# Recommend to do this before finalizing pull requests
npm run all

# Run engine core compilation only
# Useful for quick checks to ensure everything compiles
npm run build

# Run engine tests only (does not run compile task)
# Useful to run tests ad-hoc
npm test
npm run test

# Compile HTML visual tests
# Useful to ensure HTML sandbox compiles
npm run visual

# Start sandbox dev server (long-running)
# Run in separate terminal alongside `npm run visual`
npm run sandbox

# Compile API docs
npm run apidocs

# Build a nuget package and specify a version
npm run nuget -- 1.1.1

License

Excalibur is open source and operates under the 2-clause BSD license:

BSD 2-Clause License

Copyright (c) 2014, Erik Onarheim
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Comments
  • docs: Add guidance for usage with Deno bundler

    docs: Add guidance for usage with Deno bundler

    With Deno there are a couple extra steps to consume Excalibur to bundle a game for the browser.

    esm.sh should generate a bundle that works, tested locally.

    deno info https://esm.sh/excalibur
    
    type: JavaScript
    dependencies: 180 unique (total 816KB)
    
    https://esm.sh/excalibur (192B)
    โ”œโ”€โ”€ https://cdn.esm.sh/v54/[email protected]/deno/excalibur.js (355.24KB)
    

    Outputs a bundle:

    deno bundle https://esm.sh/excalibur excalibur.bundle.js
    

    Using native in browser

    Using as a native module works in Chrome without any extras:

    <script type="module">
      import ex from "./excalibur.bundle.js";
    
      const game = new ex.Engine();
      game.start();
    </script>
    

    Using with bundler

    More likely users will be writing a game and will be importing Excalibur. Deno uses URLs so we'll want to showcase pinning.

    A custom tsconfig.json has to be used with strict turned off and there are a few DOM libs to add:

    tsconfig.json

    {
      "compilerOptions": {
        "strict": false,
        "lib": ["dom", "dom.iterable", "dom.asynciterable", "deno.ns"]
      }
    }
    

    Then Excalibur can be imported from esh.sh:

    index.ts

    import { Engine } from "https://esm.sh/excalibur";
    
    const game = new ex.Engine();
    game.start();
    

    And Deno will successfully bundle:

    deno bundle index.ts game.bundle.js --config tsconfig.json
    
    Check file:///E:/Development/Junk/deno-excalibur/index.ts
    Bundle file:///E:/Development/Junk/deno-excalibur/index.ts
    Emit "game.bundle.js" (678.91KB)
    

    Thanks to @tarsupin for bringing this up.

    Originally posted by @kamranayub in https://github.com/excaliburjs/Excalibur/discussions/2060#discussioncomment-1480720

    docs good first issue 
    opened by kamranayub 23
  • Tsserver throws error when class member names ends with $

    Tsserver throws error when class member names ends with $

    Not really an Excalibur bug so I hope it's alright that I post this here.

    The problem occurs when trying to extend the Actor class. The Actor extends the Entity class which have a couple of observables with names suffixed with the $ sign. When trying to add new members in my extended class, tsserver is throwing an error. Pics below.

    I tracked down the problem to the version of TypeScript (4.6.3) that Excalibur uses. After I downloaded this project and updated TypeScript to the latest version, 4.7.3, the problem went away. Unfortunately I couldn't find a related ticket in TypeScript's Github repo and I've only seen this occur in Neovim. The problem also goes away if I remove all dollar signs in the Entity class.

    Steps to Reproduce

    Open the Actor class in this project or extend the Actor class with (Neo)Vim and a configured tsserver plugin, eg. coc-tsserver.

    Expected Result

    With TypeScript 4.7.3 image

    Actual Result

    With TypeScript 4.6.3 image

    Environment

    • operating system: osx
    • Excalibur versions: 0.26.0
    opened by ewal 20
  • keys held down are no longer listened to when another key is pressed

    keys held down are no longer listened to when another key is pressed

    Given an custom actor.update() :

    public update(engine, delta) {
       super.update(engine, delta);
       // move
       if (engine.input.keyboard.isKeyDown(ex.Input.Keys.Up)) {
          this.dy = -200;
       }
       if (engine.input.keyboard.isKeyDown(ex.Input.Keys.Down) {
          this.dy = 200;
       }
    
       // stop moving
       if (engine.input.keyboard.isKeyUp(ex.Input.Keys.Up)) {
          this.dy = 0;
       }
       if (engine.input.keyboard.isKeyUp(ex.Input.Keys.Down) {
          this.dy = 0;
       }
    }
    

    key-input-bug

    example: If you hold down 'up', and then tap 'down', while still holding 'up', the 'up' key is ignored (and vice versa).

    bug 
    opened by jedeen 20
  • feat: contentFitScreen and contentFitContainer Display Modes

    feat: contentFitScreen and contentFitContainer Display Modes

    ===:clipboard: PR Checklist :clipboard:===

    • [x] :pushpin: issue exists in github for these changes
    • [x] :microscope: existing tests still pass
    • [x] :see_no_evil: code conforms to the style guide
    • [x] :triangular_ruler: new tests written and passing / old tests updated with new scenario(s)
    • [x] :page_facing_up: changelog entry added (or not needed)

    ==================

    Closes #2271

    Changes:

    • Created Display Mode ContentFitScreen
    • Created Display Mode ContentFitContainer
    opened by Joshua-Beatty 18
  • [#153] Implement Gif Resource Loading

    [#153] Implement Gif Resource Loading

    ===:clipboard: PR Checklist :clipboard:===

    • [x] :pushpin: issue exists in github for these changes
    • [x] :microscope: existing tests still pass
    • [x] :triangular_ruler: new tests written and passing / old tests updated with new scenario(s)
    • [x] :page_facing_up: changelog entry added (or not needed)

    ==================

    Closes #153

    Changes:

    • Updated Texture.ts to allow for the path to be a data url.
    • Added Gif.ts
    • Added gif.ts to sandbox for testing
    duplicate 
    opened by kevin192291 16
  • feat: [#1670] Add key code enums and KeyboardEvent.code support

    feat: [#1670] Add key code enums and KeyboardEvent.code support

    Closes #1654

    Changes

    • Converted Keys enum value type from number to string
    • Changed Keyboard _keys, _keysUp, and _keysDown type from number[] to Keys[]
    • Updated Keyboard event handlers to use updated Keys enum
    • Added more key codes to Keys enum
    • Added comments for key definition groups and sorted
    community in-progress Hacktoberfest 
    opened by rledford 15
  • Add utility to get/set ex.Vector size

    Add utility to get/set ex.Vector size

    Context

    It would be useful to set the magnitude of a vector, this allows easy scaling or capping at a maximum value. This is especially useful in physics simulations.

    Proposal

    I propose something like the following (there is probably a more efficient method of changing the size of the vector)

      /**
       * The magnitude (size) of the Vector
       * @obsolete magnitude will be removed in favor `.size` in version v0.24.0
       */
      public magnitude(): number {
        return this.distance();
      }
      
     /**
      * The size (aka magnitude) of the Vector
      */
      public get size(): number {
        return this.distance();
      }
    
      public set size(newLength: number) {
        this.normalize().scale(newLength);
      }
    

    Usage:

    
    const vel = new ex.Vector(3, 4);
    
    console.log(vel.size); // 5
    vel.size = 13;
    
    // Automatically calculates to correct scale
    console.log(vel.x); // 5
    console.log(vel.y); // 12
    
    api change good first issue community in-progress 
    opened by eonarheim 15
  • Switch to new ES6 style modules in Excalibur

    Switch to new ES6 style modules in Excalibur

    Context

    Currently, we are using the old /// <reference path="./path/to/my/module"/> syntax. This is old and clunky and it seems like VSCode has a hard time interpreting modules and dependencies. image

    Proposal

    I propose we move to the new ES6 style module syntax (commonjs) that is now available in the TypeScript compiler so that dependencies look like this

    image

    We just need to set the module style in the compiler settings to commonjs

    This will be a pretty large task since it will need to touch most all files in Excalibur

    organization 
    opened by eonarheim 14
  • Excalibur ECS Implementation Goals and Guide

    Excalibur ECS Implementation Goals and Guide

    Goals

    • Break behavior out of Actor and other types into Components/Systems for:
      • Maintainability of the code base
      • Testability of the code base (new components/systems need high test coverage)
      • De-duplication
      • Tree shaking ability
    • Excalibur should where possible maintain
      • The easy to use property
      • It should "just work" property
      • It should not surprise users
    • Goal are not:
      • to be a pure ECS
      • to require users to know about ECS in order to use Excalibur
      • to purely increase performance

    Guide

    The current plan is to avoid breaking changes or regressions as much as possible. The plan is to add ECS in 2 steps:

    First step the ECS foundations will be installed

    • Entity type - Actors will be entities with pre-built components
    • Base Components
      • [x] Transform
      • [x] Motion
      • [x] Offscreen
      • [x] Drawing
    • Base systems
      • [x] Motion
      • [x] Drawing
    • Query mechanisms - what entities match what criteria

    Second step ECS everywhere

    • All Excalibur behavior should be driven (at least under the hood) by ECS
    • Particles
    • Collision
    • Triggers
    stale 
    opened by eonarheim 13
  • [#1348] Add chunk system for tile maps with procedural content generation support

    [#1348] Add chunk system for tile maps with procedural content generation support

    ===:construction_worker_man: TODO checklist :construction_worker_man:===

    • [x] add unit tests
    • [x] integrate with Scene
    • [x] integrate with Engine
    • [x] integrate with physics
    • [x] add a demo (chunk generator & garbage collector)
    • [x] update the changelog
    • [x] API documentation

    ===:clipboard: PR Checklist :clipboard:===

    • [x] :pushpin: issue exists in github for these changes
    • [x] :microscope: existing tests still pass
    • [x] :see_no_evil: code conforms to the style guide
    • [x] :triangular_ruler: new tests written and passing / old tests updated with new scenario(s)
    • [x] :page_facing_up: changelog entry added (or not needed)

    ==================

    Closes #1348

    Changes:

    • Add the ChunkSystemTileMap and ChunkSystemTileMapImpl classes and the ChunkSystemTileMapCollisionDetection actor trait
    work-in-progress stale 
    opened by jurca 13
  • Update Excalibur descriptions

    Update Excalibur descriptions

    In the spirit of ensuring we are describing Excalibur in a succinct and modern way, I'm proposing reviewing the descriptions we use.

    • Tagline: A simple HTML5 Canvas game engine written in TypeScript

    • Description: Excalibur is a simple, free game engine written in TypeScript for making 2D games in HTML5 canvas. Our goal is to make it incredibly simple to create 2D HTML/JS games, for folks new to game development as well as experienced game developers. We take care of all of the boilerplate engine code, cross-platform targeting, and more so you don't have to. Use as much or as little as you need!

    • GitHub organization tagline: HTML5 Game Engine

    docs core team stale 
    opened by kamranayub 13
  • chore(deps): bump express from 4.17.1 to 4.18.2

    chore(deps): bump express from 4.17.1 to 4.18.2

    Bumps express from 4.17.1 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • fix [#2538] wait for image to load before draw

    fix [#2538] wait for image to load before draw

    In some cases on low spec pc, the image, when populated from the getter, does not complete loaded when calling the drawImage.

    ===:clipboard: PR Checklist :clipboard:===

    • [x] :pushpin: issue exists in github for these changes
    • [ ] :microscope: existing tests still pass
    • [ ] :see_no_evil: code conforms to the style guide
    • [ ] :triangular_ruler: new tests written and passing / old tests updated with new scenario(s)
    • [ ] :page_facing_up: changelog entry added (or not needed)

    ==================

    Closes #2538

    Changes:

    • Wait for load before draw
    opened by sl45sms 0
  • (logo) Image has not completed loading before drawImage

    (logo) Image has not completed loading before drawImage

    Steps to Reproduce

    In some cases on low speed engine (jsdom/canvas) and probably on some low end pc's, the image, when populated from the getter, does not complete loaded when calling the drawImage.

    Actually, I've made it to run the excalibur at nodejs excalibur-on-nodejs except this issue.

    Expected Result

    the load of logoImg be completed before draw.

    Actual Result

    a fatal error from underline canvas

    [Fatal] :  Error: Image given has not completed loading
    

    Environment

    • browsers and versions: jsdom/canvas
    • operating system: linux
    • Excalibur versions: v0.27.0
    • (anything else that may be relevant)

    Current Workaround

    So, I propose to wait for onload event before the drawImage.

    this._image.onload = () => ctx.drawImage(this._image, 0, 0, ....
    
    opened by sl45sms 2
  • chore(deps): bump qs from 6.5.2 to 6.5.3

    chore(deps): bump qs from 6.5.2 to 6.5.3

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge`: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so itโ€™s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so itโ€™s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Dynamic import() broken on Excalibur 0.25.1 and newer.

    Dynamic import() broken on Excalibur 0.25.1 and newer.

    Steps to Reproduce

    The attempt to use a dynamic import() as seen in @kamranayub's CodeSandbox Example does not work after upgrading to/beyond 0.25.1, as it results in this error: TypeError: undefined is not a non-null object (Firefox) and TypeError: Object.defineProperty called on non-object (Chrome)

    Here is a prepared CodeSandbox which showcases the issue: https://codesandbox.io/s/cool-ritchie-uu1m7v

    Expected Result

    Dynamic imports should work with the ESM bundle.

    Actual Result

    Attempting to use a dynamic import with 0.25.1 and beyond results in an error: TypeError: undefined is not a non-null object (Firefox) and TypeError: Object.defineProperty called on non-object (Chrome)

    Environment

    • browsers and versions: Chrome 108.0.5359.94, Firefox 107.0
    • operating system: Mac OS 12.1
    • Excalibur versions: ^0.25.1
    • Works on 0.25.0 and older.

    Current Workaround

    N/A

    bug integrations 
    opened by ryanbarr 7
  • Optional cache busting and bundlers

    Optional cache busting and bundlers

    Also mildly annoying is that some implementations of Loadable add a cache busting URL parameter by default whereas others don't, and the bustCache field became private at some point. This seems like the worst possible implementation, I assume it is an oversight :-). For my case, I use a webpack plugin that adds a hash to the filename, so I don't need a cache busting URL parameter, so I did a little hack to disable it by setting the private _bustCache field where it exists here: https://github.com/dcgw/super-metronome-hero/blob/main/resources.ts#L93-L98

    Originally posted by @djcsdy in https://github.com/excaliburjs/Excalibur/discussions/2522#discussioncomment-4297388

    bug help wanted 
    opened by kamranayub 0
Releases(v0.27.0)
  • v0.27.0(Jul 9, 2022)

    image

    This was a big release! We have a ton of new features and a lot of bugfixes that came out of the community! Watch the video

    See migration guide for v0.26.x -> v0.27.0

    Added Features!

    • feat: [#1548] pass data to scene activation from goToScene by @mattjennings in https://github.com/excaliburjs/Excalibur/pull/2381
    • feat: [#2324] Add FullScreen Target Element Id by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2325
    • feat: [#242] Implement Parallel Actions by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2322
    • feat: [#2335] Add current playback time & playback rate by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2336
    • feat: Implement Sprite Tint by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2326
    • feat: Add missing Sound features .seek(), .duration, & getTotalPlaybackDuration() by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2340
    • feat: [#396] Add random Timer intervals by @malitherl in https://github.com/excaliburjs/Excalibur/pull/2317
    • feat: Implement Fixed timestep for physics simulation stability by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2339
    • feat: Render from bottom of TileMap tile by default by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/excalibur-tiled/pull/383
    • fix: Tiled Plugin update to support Tiled 1.9 breaking change https://github.com/excaliburjs/excalibur-tiled/pull/385
    • fix: Tiled Plugin TiledMapResource#getSpriteForGid with multiple external tilesets https://github.com/excaliburjs/excalibur-tiled/pull/380
    • fix: Tiled Plugin custom properties parsing fix https://github.com/excaliburjs/excalibur-tiled/pull/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 https://github.com/excaliburjs/Excalibur/pull/2346
    • perf: Improve collision system performance by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2351

    Fixes

    • fix: [#2368] elastic collisions & degree of freedom by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2369
    • fix: [#2403] Allow ex.Canvas and ex.Raster to have NPOT dimensions by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2404
    • fix: Oscillation issue with pixel snapping + pixelToSnap default false https://github.com/excaliburjs/Excalibur/pull/2348
    • fix: Tweak performance fallback options to be optional https://github.com/excaliburjs/Excalibur/pull/2396
    • fix: Add warning if ImageSource not loaded https://github.com/excaliburjs/Excalibur/pull/2371
    • fix: [#2379] Deferred goto preserves wrong scene by @eonarheim https://github.com/excaliburjs/Excalibur/pull/2380
    • fix: [#2344] [#2343] Arcade Solver sorts contacts by distance and ignores diverging contacts by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2345
    • fix: [#2347] EventDispatcher concurrent update issue and removal bug by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2350
    • fix: [#2353] EdgeColliders in Composite calculate offsets by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2354
    • fix: [#2359] work around image decode limits in chromium by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2361
    • fix: Fixed update interpolation incorrect with child actors by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2397
    • chore: [#2376] update eslint config in vscode settings by @mattjennings in https://github.com/excaliburjs/Excalibur/pull/2377

    Dependency updates

    • chore: [#2376] update eslint config in vscode settings by @mattjennins in https://github.com/excaliburjs/Excalibur/pull/2377
    • chore: Update TypeScript 4.7.4 by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2355
    • chore: Update Node.js to v16.15.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2331
    • chore: Update dependency karma-summary-reporter to v3.1.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2334
    • chore: Update dependency core-js to v3.23.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2328
    • chore: Update dependency replace-in-file to v6.3.5 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2329
    • chore: Update dependency eslint to v8.18.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2332
    • chore: Update dependency karma to v6.4.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2387
    • chore: Update dependency puppeteer to v15.3.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2395
    • chore: Update dependency ts-loader to v9.3.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2389
    • chore: Update dependency webpack to v5.73.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2391
    • chore: Update dependency webpack-cli to v4.10.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2392
    • chore: Update jasmine monorepo by @renovate in https://github.com/excaliburjs/Excalibur/pull/2394
    • chore: Update dependency @types/node to v16.11.42 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2383
    • chore: Update dependency core-js to v3.23.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2385
    • chore: Update dependency terser-webpack-plugin to v5.3.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2386
    • chore: Update dependency @babel/core to v7.18.6 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2382

    Contributors

    • @malitherl - Congratulations on their first code contribution in https://github.com/excaliburjs/Excalibur/pull/2317
    • @mattjennings - Congratulations on their first contribution in https://github.com/excaliburjs/Excalibur/pull/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! https://github.com/excaliburjs/Excalibur/discussions/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! https://github.com/excaliburjs/Excalibur/discussions/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! https://github.com/excaliburjs/Excalibur/discussions/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: https://github.com/excaliburjs/Excalibur/compare/v0.26.0...v0.27.0

    Source code(tar.gz)
    Source code(zip)
    dist-v0.27.0.zip(1.24 MB)
    Excalibur.0.27.0.nupkg(1.07 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.01 MB)
    excalibur.js.map(1.88 MB)
    excalibur.min.js(382.50 KB)
    excalibur.min.js.LICENSE.txt(221 bytes)
    excalibur.min.js.map(1.62 MB)
  • v0.26.0(May 21, 2022)

    image

    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 https://github.com/excaliburjs/Excalibur/pull/2239

      • Added arbitrary non-convex polygon support (only non-self intersecting) with ex.PolygonCollider(...).triangulate() which builds a new ex.CompositeCollider composed of triangles.

        triangulation

    • feat: Fast BoundingBox overlap and transform by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2241

    • perf: Add zIndexChanged$ + Improve pointer system perf by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2242

    • feat: Implement IsometricMap & refactor TileMap with some perf boosts by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2254

      • ex.TileMap now supports per Tile custom colliders!

        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 as ex.TileMap)

        isometic-tiled

        new ex.IsometricMap({
            pos: ex.vec(250, 10),
            tileWidth: 32,
            tileHeight: 16,
            columns: 15,
            rows: 15
          });
        
        • ex.IsometricTile now come with a ex.IsometricEntityComponent which can be applied to any entity that needs to be correctly sorted to preserve the isometric illusion
        • ex.IsometricEntitySystem generates a new z-index based on the elevation and y position of an entity with ex.IsometricEntityComponent
    • feat: Add pixelRatio override for Text rendering by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2294

    • perf(motion): Improve capture transform perf by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2278

    • perf(graphics): Implement sorted draw calls by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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.
    • feat(graphics): [#2288] Implement SpriteSheet builder with custom sourceViews by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2302

      • Added feature to build SpriteSheets from a list of different sized source views using ex.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},
            ]
          });
        
    • feat: FitScreenAndFill and FitContainerAndFill Display Modes by @Joshua-Beatty in https://github.com/excaliburjs/Excalibur/pull/2272

      fitandfill

    • feat: [#2272] Add Fit Screen/Container and Zoom by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2312

      fitandzoom

    • feat: [#2313] Add New Line Graphics Object by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/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.
    • feat(graphics): Add canvas 2d fallback mechanism by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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
            }
          });
        
    • feat: Implement parallax motion component and system by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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.

        parallax3

        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 https://github.com/excaliburjs/Excalibur/pull/2309

    • Added ex.Vector.min(...) and ex.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 https://github.com/excaliburjs/Excalibur/pull/2240
    • fix: #2263 keyboard wasPressed works in onPostUpdate lifecycle by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2270
    • chore: Updates to improve test flakiness by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2246
    • fix: [#2109] Replace the features link by @SulthanNK in https://github.com/excaliburjs/Excalibur/pull/2299
    • fix: [#2300] CompositeColliders count as a whole for collisionstart/collisionend events by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2301
    • fix(graphics): Large Text segments render properly by breaking them into smaller pieces by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2295
    • fix: Tilemap incorrectly offscreen and update parallax to use Tiled formula by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2316
    • fix: Tweak browser params to fix flaky test runner disconnect by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2311

    What's Changed

    • chore: Update dependency karma to 6.3.14 [SECURITY] by @renovate in https://github.com/excaliburjs/Excalibur/pull/2237
    • chore(deps): bump follow-redirects from 1.14.5 to 1.14.8 by @dependabot in https://github.com/excaliburjs/Excalibur/pull/2238
    • chore(deps): bump engine.io from 6.1.0 to 6.1.2 by @dependabot in https://github.com/excaliburjs/Excalibur/pull/2245
    • chore: Update dependency marked to 4.0.10 [SECURITY] by @renovate in https://github.com/excaliburjs/Excalibur/pull/2234
    • chore: Update puppeteer by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2247
    • chore: Update dependency karma-coverage to v2.2.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2252
    • chore: Update dependency karma to v6.3.16 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2248
    • chore: Update dependency eslint-plugin-jsdoc to v37.9.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2251
    • chore: Update dependency eslint to v8.9.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2250
    • chore: Update dependency puppeteer to v13.3.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2181
    • chore: Update typescript-eslint monorepo to v5.12.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2253
    • chore: Update Node.js to v16.14.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2249
    • chore: Update dependency @babel/core to v7.17.5 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2265
    • chore: Update dependency eslint-plugin-jsdoc to v37.9.6 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2258
    • chore: Update dependency css-loader to v6.7.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2276
    • chore: Update dependency ts-loader to v9.2.8 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2275
    • chore: Update dependency karma-chrome-launcher to v3.1.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2274
    • chore: Update dependency eslint to v8.12.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2266
    • chore: Update jasmine/karma by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2289
    • chore: Update Node.js to v16.14.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2284
    • chore: Update dependencies by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2292
    • chore: Update typescript/lint by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2293
    • chore: Remove deprecated drawing API surface by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2297
    • chore: Remove deprecated code by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2298

    New Contributors

    • @SulthanNK made their first contribution in https://github.com/excaliburjs/Excalibur/pull/2299
    • @Joshua-Beatty made their first contribution in https://github.com/excaliburjs/Excalibur/pull/2272
    • @Joshua-Beatty - Big thanks for the FitContentAndFill, FitScreenAndFill implementation, and the zoom discussion!
    • @QuentinLeCaignec - Thank you for performance improvement assistance and debugging peformance issues on different platforms!
    • @airtonix - Thank you for the Line graphic improvement discussion!
    • @mephisto83 - Thank you for consulting on the performance fallback API!
    • @tfkfan - Thank you Tilemap Polygon Raster quality improvement discussion!
    • @SulthanNK - Thank you for the readme updates!
    • @yongsooim - Thank you for proposing Spritesheet creator for mulitple sized source views!
    • @Cretezy - Thank you for the Tiled collision discussion and assistance on fixes! https://github.com/excaliburjs/excalibur-tiled/issues/344
    • @tenpaMk2 - Thank you for lots of Excalibur demos and sample games!
    • @KrzyZyb - Thank you for the running Excalibur in Angular discussion!

    Full Changelog: https://github.com/excaliburjs/Excalibur/compare/v0.25.3...v0.26.0

    Source code(tar.gz)
    Source code(zip)
    dist-v0.26.0.zip(1.33 MB)
    Excalibur.0.26.0.nupkg(1.06 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(996.48 KB)
    excalibur.js.map(1.79 MB)
    excalibur.min.js(365.14 KB)
    excalibur.min.js.LICENSE.txt(222 bytes)
    excalibur.min.js.map(1.55 MB)
  • v0.25.3(Feb 5, 2022)

    image

    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 https://github.com/excaliburjs/Excalibur/pull/2207
    • fix: [#2203][#1528] Screenshots work in webgl and return the right HiDPI size by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2208
    • fix: [#2224] Disable touch action on pointer target for mobile platforms by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2225
    • fix: Pixel 6 devices crash when MAX_TEXTURE_IMAGE_UNITS used by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2226
    • fix: polygon colliders have inaccurate collision normals when offset by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2227

    Build Dependencies Updated

    • chore: Update dependency typescript to v4.5.5 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2200
    • chore(deps): bump log4js from 6.3.0 to 6.4.1 by @dependabot in https://github.com/excaliburjs/Excalibur/pull/2209
    • chore(deps): bump nanoid from 3.1.30 to 3.2.0 by @dependabot in https://github.com/excaliburjs/Excalibur/pull/2210
    • chore: Update dependency webpack to v5.68.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2196
    • chore: Update dependency @babel/core to v7.16.12 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2211
    • chore: Update dependency @types/node to v16.11.21 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2212
    • chore: Update typescript-eslint monorepo to v5.10.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2218
    • chore: Update storybook monorepo to v6.4.17 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2221
    • chore: Update dependency eslint-plugin-jsdoc to v37.7.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2217
    • chore: Update dependency eslint to v8.8.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2216
    • chore: Update dependency webpack-cli to v4.9.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2220
    • chore: Update dependency karma to v6.3.13 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2215
    • chore: Update dependency core-js to v3.21.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2214
    • chore: Update release automation by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2230
    • chore: Update dependency terser-webpack-plugin to v5.3.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2223
    • chore: Update dependency css-loader to v6.6.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2229
    • chore: Update dependency eslint-plugin-jsdoc to v37.7.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2228
    • chore: Update dependency @types/node to v16.11.22 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2222
    • chore: Update dependency copy-webpack-plugin to v10.2.4 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2213

    Full Changelog: https://github.com/excaliburjs/Excalibur/compare/v0.25.2...v0.25.3

    Source code(tar.gz)
    Source code(zip)
    dist-v0.25.3.zip(1.75 MB)
    Excalibur.0.25.3.nupkg(1.19 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.04 MB)
    excalibur.js.map(1.91 MB)
    excalibur.min.js(389.58 KB)
    excalibur.min.js.LICENSE.txt(221 bytes)
    excalibur.min.js.map(1.65 MB)
  • v0.25.2(Jan 22, 2022)

    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 https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/2168
    • feat: Fixes and updates to support @excaliburjs/dev-tools by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2169
    • feat+refactor: Renderer simplification and Render plugins by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/2104
    • fix: [#2106] Safari 13.1 Does not boot + Safari Pointers by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2107
    • fix: Prevent pair generation for composite colliders by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2131
    • fix: Clock runs game simulation too fast sometimes when limiting fps by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2162
    • fix: Prevent SpriteFonts from logging excessive warnings by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2163
    • fix: [#2152] SpriteFont and Font alignment by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2153
    • fix(tsconfig): restrict types array by @kamranayub in https://github.com/excaliburjs/Excalibur/pull/2160
    • fix: [#1815] TileMap tiling artifact by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2146
    • fix: CircleCollider now handles transforms properly by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2191
    • fix: [#2192] Actor.center returns global position by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2193

    Changed/Refactor

    • refactor: Pointer System by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2071
    • refactor: Remove .call() in EventDispatcher by @nidble in https://github.com/excaliburjs/Excalibur/pull/2103
    • refactor: Move math utils, deprecate old import site by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2177

    Docs

    • chore: Update changelog for 0.25.1 release by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2099
    • docs: Clarify contribution requirements by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2101
    • docs: Remove TravisCI badge by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2108
    • docs: Fix semantic headings by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2161
    • chore(renovate): do not automerge typedoc by @kamranayub in https://github.com/excaliburjs/Excalibur/pull/2143
    • chore(deps): revert "Update dependency typedoc to v0.22.10" by @kamranayub in https://github.com/excaliburjs/Excalibur/pull/2144
    • chore(ci): optimize build jobs by @kamranayub in https://github.com/excaliburjs/Excalibur/pull/2145

    Build Dependencies Updated

    • chore: Update dependency typescript to v4.5.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2110
    • chore: Update jasmine monorepo by @renovate in https://github.com/excaliburjs/Excalibur/pull/2117
    • chore: Update dependency @types/node to v14.17.34 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2112
    • chore: Update dependency @types/jasmine to v3.10.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2111
    • chore: Update dependency webpack to v5.64.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2116
    • chore: Update dependency core-js to v3.19.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2113
    • chore: Update dependency karma to v6.3.9 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2115
    • chore: Update dependency css-loader to v6.5.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2114
    • chore: Update dependency webpack to v5.64.4 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2125
    • chore: Update typescript-eslint monorepo to v4.33.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2123
    • chore: Update dependency source-map-support to v0.5.21 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2124
    • chore: Update dependency copy-webpack-plugin to v9.1.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2126
    • chore: Update dependency copy-webpack-plugin to v10 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2118
    • chore(deps): bump handlebars from 4.7.6 to 4.7.7 by @dependabot in https://github.com/excaliburjs/Excalibur/pull/2098
    • chore: Update dependency serve to v13 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2129
    • chore: Update typescript-eslint monorepo to v5 (major) by @renovate in https://github.com/excaliburjs/Excalibur/pull/2130
    • chore: Update dependency eslint to v8 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2127
    • chore: Update dependency eslint-plugin-jsdoc to v37 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2128
    • chore: Update dependency json-schema to 0.4.0 [SECURITY] by @renovate in https://github.com/excaliburjs/Excalibur/pull/2133
    • chore: Update dependency core-js to v3.19.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2135
    • chore: Update typescript-eslint monorepo to v5.5.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2134
    • chore: Update dependency typedoc to v0.22.10 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2137
    • chore: Update dependency eslint-plugin-jsdoc to v37.1.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2140
    • chore: Update storybook monorepo to v6.4.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2138
    • chore: Update dependency karma-coverage to v2.1.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2141
    • chore: Update Node.js to v14.18.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2136
    • chore: Update dependency core-js to v3.19.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2154
    • chore: Update dependency typescript to v4.5.4 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2155
    • chore: Update Node.js to v16 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2139
    • chore: Update dependency typedoc to v0.22.10 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2164
    • chore: Update dependency copy-webpack-plugin to v10.2.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2167
    • chore: Update dependency core-js to v3.20.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2166
    • chore: Update dependency @types/node to v16.11.17 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2165
    • chore: Update typescript-eslint monorepo to v5.8.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2174
    • chore: Update dependency eslint-plugin-jsdoc to v37.5.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2173
    • chore: Update dependency eslint to v8.5.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2172
    • chore: Update storybook monorepo to v6.4.9 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2179
    • chore: Update jasmine monorepo to v3.99.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2182
    • chore: Update dependency core-js to v3.20.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2171
    • chore: Update dependency eslint to v8.6.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2180
    • chore: Update dependency @babel/core to v7.16.7 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2178
    • chore: Update dependency eslint-plugin-jsdoc to v37.6.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2190
    • chore: Update typescript-eslint monorepo to v5.9.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2187
    • chore: Update dependency karma to v6.3.10 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2186
    • chore: Update dependency @types/node to v16.11.19 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2189
    • chore: Update dependency karma to v6.3.11 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2195
    • chore: Update dependency @types/jasmine to v3.10.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2188
    • chore: Update jasmine monorepo (major) by @renovate in https://github.com/excaliburjs/Excalibur/pull/2183
    • chore: Update Node.js to v16.13.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2194

    Contributors

    Big thanks to all the people who have helped out this iteration!

    @ivasilov @luttje @tsanyqudsi @lampewebdev @joshuadoan @berkayyildiz @simon-jaeger @YJDoc2 @JumpLink

    Full Changelog: https://github.com/excaliburjs/Excalibur/compare/v0.25.1...v0.25.2

    Source code(tar.gz)
    Source code(zip)
    dist-0.25.2.zip(2.35 MB)
    Excalibur.0.25.2.nupkg(1.09 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.04 MB)
    excalibur.js.map(1.90 MB)
    excalibur.min.js(387.61 KB)
    excalibur.min.js.LICENSE.txt(222 bytes)
    excalibur.min.js.map(1.64 MB)
  • v0.25.1(Nov 6, 2021)

    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 https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/2064
      • Experimental: Native ES module bundle distribution in package esm/excalibur.js entrypoint
    • feat: [#2069] Add easy reverse support to Animations by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/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 https://github.com/excaliburjs/Excalibur/pull/2052
    • fix: [#1431] Dispatch the hidePlayButton on the Button Event to prevent that keep on the screen on some situations [#1431] by @catrielmuller in https://github.com/excaliburjs/Excalibur/pull/2066
    • fix: [#2076] Defer initialization until after final resolution calculated by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2093
    • fix: [#1731] Replace TSC build constant + Simplify version generation by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/2053
    • revert: VSCode Workbench Colors configurations by @catrielmuller in https://github.com/excaliburjs/Excalibur/pull/2067

    Updates

    • chore: Update copyright with initial commit year by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2056

    Docs

    • docs: Fix typos by @jedeen in https://github.com/excaliburjs/Excalibur/pull/2055
    • chore(storybook): fix Storybook by @kamranayub in https://github.com/excaliburjs/Excalibur/pull/1986

    Changed/Refactor

    • feat: Refactor Actions to ECS System and Component by @eonarheim in https://github.com/excaliburjs/Excalibur/pull/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

    • chore: Update dependency webpack to v5.56.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2054
    • chore: Pin dependencies by @renovate in https://github.com/excaliburjs/Excalibur/pull/2074
    • chore: Update Node.js to v14.18.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2075
    • chore: Update dependency @types/react-color to v3.0.6 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2077
    • chore: Update dependency @types/webpack-env to v1.16.3 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2078
    • chore: Update dependency eslint-plugin-jsdoc to v36.1.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2079
    • chore: Update dependency karma to v6.3.6 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2080
    • chore: Update dependency typescript to v4.4.4 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2081
    • chore: Update storybook monorepo by @renovate in https://github.com/excaliburjs/Excalibur/pull/2082
    • chore: Update babel monorepo by @renovate in https://github.com/excaliburjs/Excalibur/pull/2083
    • chore: Update dependency karma to v6.3.7 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2091
    • chore: Update dependency @octokit/rest to v18.12.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2084
    • chore: Update dependency @types/jasmine to v3.10.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2085
    • chore: Update dependency core-js to v3.19.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2086
    • chore: Update dependency css-loader to v6.5.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2087
    • chore: Update dependency replace-in-file to v6.3.2 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2088
    • chore: Update dependency typedoc to v0.22.7 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2089
    • chore: Update dependency webpack to v5.61.0 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2090
    • chore: Update dependency webpack-cli to v4.9.1 by @renovate in https://github.com/excaliburjs/Excalibur/pull/2092

    Contributors

    • @nidble made their first contribution in https://github.com/excaliburjs/Excalibur/pull/2052
    • @ignoreintuition made their first contribution in https://github.com/excaliburjs/Excalibur/pull/2072
    • @Evgenii190
    • @floAr
    • @tarsupin
    • @nilskj
    • @0xEAB

    Full Changelog: https://github.com/excaliburjs/Excalibur/compare/v0.25.0...v0.25.1

    Source code(tar.gz)
    Source code(zip)
    dist-0.25.1.zip(2.40 MB)
    Excalibur.0.25.1.nupkg(1.04 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1008.65 KB)
    excalibur.js.map(1.79 MB)
    excalibur.min.js(361.66 KB)
    excalibur.min.js.LICENSE.txt(222 bytes)
    excalibur.min.js.map(1.54 MB)
  • v0.25.0(Oct 4, 2021)

    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:

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

      • The confusing TileSprite type is removed (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
    • 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 hasZeroDimensions()
    • BoundingBox's can now by transform'd by a Matrix
    • Added new Entity(components: Component[]) constructor overload to create entities with components quickly.
    • Added Entity.get(type: ComponentType) to get strongly typed components if they exist on the entity.
    • Added Entity.has(type: ComponentType) overload to check if an entity has a component of that type.
    • Added Entity.hasTag(tag: string), Entity.addTag(tag: string), and Entity.removeTag(tag: string, force: boolean).
      • Tag offscreen is now added to entities that are offscreen
    • Added Entity.componentAdded$ and Entity.componentRemoved$ for observing component changes on an entity.
    • For child/parent entities:
      • Added Entity.addChild(entity: Entity), Entity.removeChild(entity: Entity), Entity.removeAllChildren() for managing child entities
      • Added Entity.addTemplate(templateEntity: Entity) for adding template entities or "prefab".
      • Added Entity.parent readonly accessor to the parent (if exists), and Entity.unparent() to unparent an entity.
      • Added Entity.getAncestors() is a sorted list of parents starting with the topmost parent.
      • Added Entity.children readonly accessor to the list of children.
    • Add the ability to press enter to start the game after loaded
    • Add Excalibur Feature Flag implementation for releasing experimental or preview features (#1673)
    • Color now can parse RGB/A string using Color.fromRGBString('rgb(255, 255, 255)') or Color.fromRGBString('rgb(255, 255, 255, 1)')
    • DisplayMode.FitScreen will now scale the game to fit the available space, preserving the aspectRatio. (#1733)
    • SpriteSheet.spacing now accepts a structure { top: number, left: number, margin: number } for custom spacing dimensions (#1788)
    • SpriteSheet.ctor now has an overload that accepts spacing for consistency although the object constructor is recommended (#1788)
    • Add SpriteSheet.getSpacingDimensions() method to retrieve calculated spacing dimensions (#1788)
    • Add KeyEvent.value?: string which is the key value (or "typed" value) that the browser detected. For example, holding Shift and pressing 9 will have a value of ( which is the typed character.
    • Add KeyEvent.originalEvent?: KeyboardEvent which exposes the raw keyboard event handled from the browser.

    Changed

    • Gif now supports new graphics component
    • Algebra.ts refactored into separate files in Math/
    • Engine/Scene refactored to make use of the new ECS world which simplifies their logic
    • TileMap now uses the built in Collider component instead of custom collision code.
    • Updates the Excalibur ECS implementation for ease of use and Excalibur draw system integration
      • Adds "ex." namespace to built in component types like "ex.transform"
      • Adds ex.World to encapsulate all things ECS
      • Adds ex.CanvasDrawSystem to handle all HTML Canvas 2D drawing via ECS
      • Updates ex.Actor to use new ex.TransformComponent and ex.CanvasDrawComponent

    Deprecated

    • Timer.unpause() has be deprecated in favor of Timer.resume() (#1864)
    • Removed UIActor Stub in favor of ScreenElement (#1656)
    • ex.SortedList as deprecated
    • ex.Promise is marked deprecated (#994)
    • ex.DisplayMode.Position CSS can accomplish this task better than Excalibur (#1733)

    Removed

    Fixed

    • Fixed allow ex.ColliderComponent to not have a collider
    • Fixed issue where collision events were not being forwarded from individual colliders in a ex.CompositeCollider
    • Fixed issue where ex.CompositeCollider's individual colliders were erroneously generating pairs
    • Fixed issue where GraphicsOptions width/height could not be used to define a ex.Sprite with equivalent sourceView and destSize (#1863)
    • Fixed issue where ex.Scene.onActivate/onDeactivate were called with the wrong arguments (#1850)
    • Fixed issue where no width/height argmunents to engine throws an error
    • Fixed issue where zero dimension image draws on the ExcaliburGraphicsContext throw an error
    • Fixed issue where the first scene onInitialize fires at Engine contructor time and before the "play button" clicked (#1900)
    • Fixed issue where the "play button" click was being interpreted as an input event excalibur needed to handle (#1854)
    • Fixed issue where pointer events were not firing at the ex.Engine.input.pointers level (#1439)
    • Fixed issue where pointer events propagate in an unexpected order, now they go from high z-index to low z-index (#1922)
    • Fixed issue with Raster padding which caused images to grow over time (#1897)
    • Fixed N+1 repeat/repeatForever bug (#1891)
    • Fixed repeat/repeatForever issue with rotateTo (#635)
    • Entity update lifecycle is now called correctly
    • Fixed GraphicsSystem enterviewport and exitviewport event
    • Fixed DOM element leak when restarting games, play button elements piled up in the DOM.
    • Fixed issues with ex.Sprite not rotating/scaling correctly around the anchor (Related to TileMap plugin updates https://github.com/excaliburjs/excalibur-tiled/issues/4, https://github.com/excaliburjs/excalibur-tiled/issues/23, https://github.com/excaliburjs/excalibur-tiled/issues/108)
      • Optionally specify whether to draw around the anchor or not drawAroundAnchor
    • Fixed in the browser "FullScreen" api, coordinates are now correctly mapped from page space to world space (#1734)
    • Fix audio decoding bug introduced in https://github.com/excaliburjs/Excalibur/pull/1707
    • Fixed issue with promise resolve on double resource load (#1434)
    • Fixed Firefox bug where scaled graphics with anti-aliasing turned off are not pixelated (#1676)
    • Fixed z-index regression where actors did not respect z-index (#1678)
    • Fixed Animation flicker bug when switching to an animation (#1636)
    • Fixed ex.Actor.easeTo actions, they now use velocity to move Actors (#1638)
    • Fixed Scene constructor signature to make the Engine argument optional (#1363)
    • Fixed anchor properly of single shape Actor #1535
    • Fixed Safari bug where Sound resources would fail to load (#1848)
    Source code(tar.gz)
    Source code(zip)
    dist-0.25.0.zip(1.61 MB)
    Excalibur.0.25.0.nupkg(1.12 MB)
    excalibur.d.ts(51 bytes)
    excalibur.js(992.41 KB)
    excalibur.js.map(1.75 MB)
    excalibur.min.js(357.44 KB)
    excalibur.min.js.LICENSE.txt(222 bytes)
    excalibur.min.js.map(1.49 MB)
  • v0.24.5(Sep 7, 2020)

    image

    Breaking Changes

    • [#1361] Makes use of proxies, Excalibur no longer supports IE11 :boom: ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)

    Added

    • Adds new ECS Foundations API, which allows excalibur core behavior to be manipulated with ECS style code ([#1361]https://github.com/excaliburjs/Excalibur/issues/1361)
      • 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
    Source code(tar.gz)
    Source code(zip)
    dist.0.24.5.zip(1012.94 KB)
    Excalibur.0.24.5.nupkg(724.65 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.12 MB)
    excalibur.min.js(322.27 KB)
    excalibur.min.js.map(1.20 MB)
  • v0.24.4(Sep 3, 2020)

    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
    Source code(tar.gz)
    Source code(zip)
    dist.0.24.4.zip(970.99 KB)
    Excalibur.0.24.4.nupkg(705.68 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.08 MB)
    excalibur.min.js(313.05 KB)
    excalibur.min.js.map(1.16 MB)
  • v0.24.3(May 10, 2020)

    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)
    Source code(tar.gz)
    Source code(zip)
    dist.0.24.3.zip(949.61 KB)
    Excalibur.0.24.3.nupkg(685.73 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.05 MB)
    excalibur.min.js(300.37 KB)
    excalibur.min.js.map(1.13 MB)
  • v0.24.0(Apr 24, 2020)

    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 [email protected] 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!

    Source code(tar.gz)
    Source code(zip)
    dist.zip(680.97 KB)
    Excalibur.0.24.0.nupkg(595.54 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(1.05 MB)
    excalibur.min.js(299.86 KB)
  • v0.23.0(Jun 8, 2019)

    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)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(524.79 KB)
    Excalibur.0.23.0.nupkg(345.86 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(931.34 KB)
    excalibur.min.js(280.26 KB)
  • v0.22.0(Apr 6, 2019)

    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)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1.05 MB)
    Excalibur.0.22.0.nupkg(827.65 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(843.87 KB)
    excalibur.js.map(1.11 MB)
    excalibur.min.js(251.17 KB)
    excalibur.min.js.map(982.40 KB)
  • v0.21.0(Feb 2, 2019)

    image

    Thanks to @kevin192291 and @dylanavery720 for their contributions!

    Added

    • Added ability to automatically convert .gif files to SpriteSheet, Animations, and Sprites #153 courtesy of @kevin192291
    • Add new viewport property to camera to return a world space bounding box of the current visible area #1078

    Changed

    • Updated ex.Color and ex.Vector constants to be static getters that return new instances each time, eliminating a source of bugs in excalibur #1085
    • Remove optionality of engine in constructor of Scene and _engine private with an underscore prefix (#1067) courtesy of @dylanavery720

    Deprecated

    • Rename ex.BaseCamera to Camera, ex.BaseCamera will be removed in v0.22.0 #1087

    Fixed

    • Fixed issue of early offscreen culling related to zooming in and out #1078
    • Fixed issue where setting suppressPlayButton: true blocks load in certain browsers #1079
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1.04 MB)
    Excalibur.0.21.0.nupkg(825.08 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(841.41 KB)
    excalibur.js.map(1.11 MB)
    excalibur.min.js(250.22 KB)
    excalibur.min.js.map(981.85 KB)
  • v0.20.0(Dec 23, 2018)

    image

    Thanks to @T00mm , @atanasbozhkov for their contributions!

    Breaking Changes

    • ex.PauseAfterLoaderremoved, use Use ex.Loader instead

    Added

    • Added strongly typed EvenTypes enum to Events.ts to avoid magic strings #1066

    Changed

    • Added parameter on SpriteSheet constructor so you can define how many pixel spacing is between sprites #1058

    Fixed

    • Fixed issue where there were missing files in the dist (Loader.css, Loader.logo.png) (#1057)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1.00 MB)
    Excalibur.0.20.0.nupkg(791.11 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(806.41 KB)
    excalibur.js.map(1.07 MB)
    excalibur.min.js(238.39 KB)
    excalibur.min.js.map(935.35 KB)
  • v0.19.0(Oct 13, 2018)

    image

    Thanks to @T00mm , @TheEyeOfBrows for their contributions!

    Changed

    • Excalibur user documentation has now moved to excaliburjs.com/docs
    • Excalibur will now prompt for user input before starting the game to be inline with the new webaudio requirements from chrome/mobile browsers (#1031)

    Deprecated

    • PauseAfterLoader for iOS in favor of new click-to-play functionality built into the default Loader (#1031)

    Fixed

    • Fixed issue where Edge web audio playback was breaking (#1047)
    • Fixed issue where pointer events do not work in mobile (#1044)
    • Fixed issue where iOS was not loading by including the right polyfills (#1043)
    • Fixed issue where sprites do not work in Firefox (#980)
    • Fixed issue where collision pairs could sometimes be incorrect (#975)
    • Fixed box collision velocity resolution so that objects resting on a surface do not accumulate velocity (#986)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1.00 MB)
    Excalibur.0.19.0.nupkg(795.55 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(808.56 KB)
    excalibur.js.map(1.07 MB)
    excalibur.min.js(237.91 KB)
    excalibur.min.js.map(937.15 KB)
  • v0.18.0(Aug 4, 2018)

    image

    Breaking Changes

    • Sound.setVolume() replaced with Sound.volume
    • Sound.setLoop() replaced with Sound.loop

    Added

    • Add Scene.isActorInDrawTree method to determine if an actor is in the scene's draw tree.

    Fixed

    • Fixed missing exitviewport/enterviewport events on Actors.on/once/off signatures (#978)
    • Fix issue where Actors would not be properly added to a scene if they were removed from that scene during the same frame (#979)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1015.94 KB)
    Excalibur.0.18.0.nupkg(782.03 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(785.77 KB)
    excalibur.js.map(1.04 MB)
    excalibur.min.js(231.26 KB)
    excalibur.min.js.map(925.10 KB)
  • v0.17.0(Jun 16, 2018)

    image

    Thanks to @frodgesh, @jamesmcgeorge, @rougepied, @clofresh, @LoserAntbear, @FerociousQuasar, and @Carghaez for their contributions!

    Breaking Changes

    • Property scope Pointer.actorsUnderPointer changed to private;
    • Sprite.sx replaced with Sprite.x
    • Sprite.sy replaced with Sprite.y
    • Sprite.swidth replaced with Sprite.width
    • Sprite.sheight replaced with Sprite.height

    Added

    • Allow timers to limit repeats to a finite number of times (#957)
    • Convenience method on Scene to determine whether it is the current scene. Scene.isCurrentScene() (#982)
    • New PointerEvent.stopPropagation() method added. Works the same way as (https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation) (#912)
    • New Actor.getAncestors() method, which retreives full array of current Actor ancestors
    • Static Actor.defaults prop, which implements IActorDefaults.
    • Native sound events now exposed
      • volumechange - on playing sound volume change;
      • pause - on playback pause;
      • stop - on playback stop;
      • emptied - on data cleanup(f.e. when setting new data);
      • resume - on playback resume;
      • playbackstart - on playback start;
      • playbackend - on playback end;
    • Added Sound.instances getter, which returns active tracks. Playing or paused;
    • Added Sound.getTrackId(track: [[AudioInstance]]) method. Which returns id of track provided, if it is in list of active tracks.

    Changed

    • Refactored Easing functions to be reversable (#944)
    • Now at creation every Actor.anchor prop is set to default Actor.defaults.anchor.
    • Scene.remove(Actor) now starts the Actor.Kill event cycle.(#981)

    Deprecated

    • CapturePointer.update() method now doesn't propagate event to actor, just verifies pointer events for actor.
    • Added Sound.volume & Sound.loop properties as a replacement for Sound.setVolume() and Sound.setLoop(). The methods setVolume and setLoop have been marked obsolete.

    Fixed

    • Added missing variable assignments to TileMapImpl constructor (#957)
    • Correct setting audio volume level from value to setValueAtTime to comply with deprecation warning in Chrome 59 (#953)
    • Force HiDPI scaling to always be at least 1 to prevent visual artifacts in some browsers
    • Recalculate physics geometry when width/height change on Actor (#948)
    • Fix camera move chaining (#944)
    • Fix pickSet(allowDuplicates: true) now returns the proper length array with correct elements (#977)
    • Index export order to prevent almond.js from creation of corrupted modules loading order.
    • Sound.pause() now saves correct timings.
    • Fix ex.Vector.isValid edgecase at Infinity (#1006)
    Source code(tar.gz)
    Source code(zip)
    dist.zip(1.75 MB)
    Excalibur.0.17.0.nupkg(782.70 KB)
    excalibur.d.ts(51 bytes)
    excalibur.js(788.23 KB)
    excalibur.js.map(1.05 MB)
    excalibur.min.js(232.36 KB)
    excalibur.min.js.map(925.64 KB)
  • v0.16.0(Apr 6, 2018)

    image

    Thanks to @pathurs, @dgparker, and @rougepied for their contributions!

    Added

    • New typesafe and override safe event lifecycle overriding, all onEventName handlers will no longer be dangerous to override (#582)
      • New lifecycle event onPreKill and onPostKill
    • SpriteSheets can now produce animations from bespoke sprite coordinates SpriteSheet.getAnimationByCoords(engine, coords[], speed) (#918)
    • Added drag and drop support for Actors (#134)
      • New Event enter
      • New Event leave
      • New Event pointerenter
      • New Event pointerleave
      • New Event pointerdragstart
      • New Event pointerdragend
      • New Event pointerdragmove
      • New Event pointerdragenter
      • New Event pointerdragleave
      • New Class PointerDragEvent which extends PointerEvent
      • New Class GlobalCoordinates that contains Vectors for the world, the page, and the screen.
      • Added property ICapturePointerConfig.captureDragEvents which controls whether to emit drag events to the actor
      • Added property PointerEvent.pointer which equals the original pointer object

    Deprecated

    • Sprite.sx, Sprite.sy, Sprite.swidth, Sprite.sheight has be deprecated in favor of Sprite.x, Sprite.y, Sprite.width, Sprite.height (#918)

    Fixed

    • Added missing lifecycle event handlers on Actors, Triggers, Scenes, Engine, and Camera (#582)
    • Tile Maps now correctly render negative x-axis coordinates (#904)
    • Offscreen culling in HiDPI mode (#949)
      • Correct bounds check to check drawWidth/drawHeight for HiDPI
      • suppressHiDPIScaling now also suppresses pixel ratio based scaling
    • Extract and separate Sprite width/height from drawWidth/drawHeight to prevent context corruption (#951)
    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.16.0.nupkg(900.60 KB)
    excalibur.amd.d.ts(325.27 KB)
    excalibur.amd.js(696.12 KB)
    excalibur.amd.js.map(1.08 MB)
    excalibur.d.ts(355 bytes)
    excalibur.js(712.61 KB)
    excalibur.js.map(1.13 MB)
    excalibur.min.js(241.28 KB)
    excalibur.min.js.map(317.69 KB)
  • v0.15.0(Feb 17, 2018)

    image

    Breaking Changes

    • LockedCamera replaced with BaseCamera.strategy.lockToActor
    • SideCamera replaced with BaseCamera.strategy.lockToActorAxis
    • Body.wasTouching replaced with event type CollisionEnd

    Added

    • Option bag constructors have been added for commonly-used classes (see Constructors.md) (#410)
    Source code(tar.gz)
    Source code(zip)
    excalibur.amd.d.ts(292.58 KB)
    excalibur.amd.js(664.38 KB)
    excalibur.amd.js.map(1.03 MB)
    excalibur.d.ts(355 bytes)
    excalibur.js(680.87 KB)
    excalibur.js.map(1.08 MB)
    excalibur.min.js(230.72 KB)
    excalibur.min.js.map(306.71 KB)
  • v0.14.0(Dec 2, 2017)

    image

    Breaking Changes

    • Triggers now have a new option bag constructor using the ITriggerOptions interface. (#863).
    • update event replaced with postupdate event
    • CollisionEvent replaced by PreCollisionEvent
    • getDrawWidth() and getDrawHeight() replaced with the getters drawWidth and drawHeight
    • PointerEvent.x and PointerEvent.y replaced with PointerEvent.pos

    Added

    • Automatic HiDPI screen detection and scaling in excalibur internals to correct blurry bitmap rendering on HiDPI screens. This feature can optionally be suppressed with IEngineOptions.suppressHiDPIScaling.
    • Added new line utility Line.normal() and Line.distanceToPoint (#703)
    • Added new PolygonArea utility PolygonArea.getClosestFace(point) (#703)
    • Triggers now fire an EnterTriggerEvent when an actor enters the trigger, and an ExitTriggerEvent when an actor exits the trigger. (#863)
    • Actors have a new events CollisionStart which when 2 actors first start colliding and CollisionEnd when 2 actors are no longer colliding. (#863)
    • New camera strategies implementation for following targets in a scene. Allows for custom strategies to be implemented on top of some prebuilt
      • LockCameraToActorStrategy which behaves like LockedCamera and can be switched on with Camera.strategy.lockToActor(actor).
      • LockCameraToActorAxisStrategy which behaves like SideCamera and can be switched on with Camera.strategy.lockToActorAxis(actor, ex.Axis.X)
      • ElasticToActorStrategy which is a new strategy that elastically moves the camera to an actor and can be switched on with Camera.strategy.elasticToActor(actor, cameraElasticity, cameraFriction)
      • CircleAroundActorStrategy which is a new strategy that will follow an actor when a certain radius from the camera focus and can be switched on with Camera.strategy.circleAroundActor(actor)

    Changed

    • Trigger have been rebuilt to provide a better experience. The trigger action only fires when an actor enters the designated area instead of every frame of collision. (#863)
    • Triggers can now draw like other Actors, but are still not visible by default (#863)

    Deprecated

    • Body.wasTouching has been deprecated in favor of a new event type CollisionEnd (#863)
    • SideCamera and LockedCamera are deprecated in favor of camera strategies

    Fixed

    • Fixed odd jumping behavior when polygons collided with the end of an edge (#703)
    Source code(tar.gz)
    Source code(zip)
    excalibur.amd.d.ts(286.44 KB)
    excalibur.amd.js(656.87 KB)
    excalibur.amd.js.map(1.02 MB)
    excalibur.d.ts(354 bytes)
    excalibur.js(673.36 KB)
    excalibur.js.map(1.06 MB)
    excalibur.min.js(228.37 KB)
    excalibur.min.js.map(302.44 KB)
  • v0.13.0(Oct 7, 2017)

    image

    Thanks to @Nysosis and @Thraka for their contributions!

    Breaking Changes

    • Scene.children replaced with Scene.actors

    Added

    • New pause/unpause feature for timers to help with more robust pausing (#885)
    • New event listening feature to listen to events only .once(...) then unsubscribe automatically (#745)
    • New collision event postcollision to indicate if collision resolution occured (#880)

    Deprecated

    • PointerEvent.x and PointerEvent.y, in favor of PointerEvent.pos (#612)
    • CollisionEvent has been deprecated in favor of the more clear PreCollisionEvent (#880)

    Fixed

    • Fixed same instance of color potentially being shared, and thus mutated, between instance actors (#840)
    • Fixed bug where active and passive type collisions would resolve when they shouldn't when in rigid body mode (#880)
    Source code(tar.gz)
    Source code(zip)
    excalibur.amd.d.ts(276.35 KB)
    excalibur.amd.js(634.32 KB)
    excalibur.amd.js.map(1014.05 KB)
    excalibur.d.ts(354 bytes)
    excalibur.js(650.80 KB)
    excalibur.js.map(1.03 MB)
    excalibur.min.js(220.94 KB)
    excalibur.min.js.map(292.26 KB)
  • v0.12.0(Aug 12, 2017)

    image

    Thanks to @Crizzooo, @htalat, and @vritant24 for their contributions!

    Breaking Changes

    • CollisionType.Elastic has been removed
    • Promises.wrap has been replaced with Promise.resolve

    Added

    • Added new hsl and hex format options in Color.toString(format) using rgb as the default to maintain backwards compatibility (#852)

    Changed

    • Animation.loop property now to set to true by default (#583)
    • Added backgroundColor to engine options as part of Engine constructor (#846)

    Deprecated

    • ex.Scene.children is now ex.Scene.actors (#796)
    Source code(tar.gz)
    Source code(zip)
    excalibur.amd.d.ts(263.97 KB)
    excalibur.amd.js(614.11 KB)
    excalibur.amd.js.map(969.52 KB)
    excalibur.d.ts(347 bytes)
    excalibur.js(630.14 KB)
    excalibur.js.map(1011.63 KB)
    excalibur.min.js(219.63 KB)
    excalibur.min.js.map(290.50 KB)
  • v0.11.0(Jun 10, 2017)

    image

    Thanks to @andrewmbyrd, @LePhil, @mrkmg, and @Crizzooo for contributing in this release!

    Breaking Changes

    • Renamed Utils.removeItemToArray() to Utils.removeItemFromArray() (#798)

    Added

    • Added optional volume argument to Sound.play(volume?: number), which will play the Audio file at anywhere from mute (volume is 0.0) to full volume (volume is 1.0). (#801)
    • Added another DisplayMode option: DisplayMode.Position. When this is selected as the displayMode type, the user must specify a new position option (#781)
    • Added a static method distance to the Vector class (#517)
    • Added WheelEvent event type for the wheel browser event, Excalibur now supports scroll wheel (#808)

    Changed

    • Camera zoom over time now returns a promise that resolves on completion (#800)
    • Edge builds have more descriptive versions now containing build number and Git commit hash (e.g. 0.10.0-alpha.105#commit) (#777)

    Fixed

    • Fixed camera zoom over time, before it did not work at all (#800)
    • Fixed semi-colon key not being detected on Firefox and Opera. (#789)
    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.11.0.nupkg(821.75 KB)
    excalibur.amd.d.ts(271.00 KB)
    excalibur.amd.js(629.50 KB)
    excalibur.amd.js.map(970.25 KB)
    excalibur.d.ts(374 bytes)
    excalibur.js(646.00 KB)
    excalibur.js.map(1012.36 KB)
    excalibur.min.js(219.56 KB)
    excalibur.min.js.map(290.03 KB)
  • v0.10.0(Apr 8, 2017)

    image

    Breaking Changes

    • Rename Engine.width and Engine.height to be Engine.canvasWidth and Engine.canvasHeight (#591) (thanks @rehlert95)
    • Rename Engine.getWidth and Engine.getHeight to be Engine.getDrawWidth and Engine.getDrawHeight (#591) (thanks @rehlert95)
    • Changed GameEvent to be a generic type for TypeScript, allowing strongly typing the target property. (#724)
    • Removed Body.useEdgeCollision() parameter center (#724)

    Added

    • Added Engine.isPaused to retrieve the running status of Engine (#750) (thanks @SurajGoel)
    • Added Engine.getWorldBounds to provide a quick way to get the top left corner and bottom right corner of the screen (#729) (thanks @PurityLake)
    • Added predraw and postdraw events to Engine class. These events happen when prior to and after a draw (#744) (thanks @PurityLake)
    • Added Perlin noise generation helper ex.PerlinGenerator for 1d, 2d, and 3d noise, along with drawing utilities (#491)
    • Added font styles support for normal, italic, and oblique in addition to bold text support (#563)

    Changed

    • Update project to use TypeScript 2.2.2 (#762)
    • Changed Util.extend to include Object.assign functionality (#763) (thanks @PurityLake)

    Fixed

    • Update the order of the affine transformations to fix bug when scaling and rotating Actors (#770) (thanks @hsar for bringing this to our attention)

    Thanks as well to @asi7296 for working on strict compiler flags (#724)

    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.10.0.nupkg(804.73 KB)
    excalibur.amd.d.ts(265.18 KB)
    excalibur.amd.js(615.21 KB)
    excalibur.amd.js.map(979.34 KB)
    excalibur.d.ts(355 bytes)
    excalibur.js(631.70 KB)
    excalibur.js.map(1.00 MB)
    excalibur.min.js(215.01 KB)
    excalibur.min.js.map(283.71 KB)
  • v0.9.0(Feb 10, 2017)

    image

    Added

    • Added preupdate, postupdate, predraw, postdraw events to TileMap
    • Added ex.Random with seed support via Mersenne Twister algorithm (#538)
    • Added extended feature detection and reporting to ex.Detector (#707) (thanks @guahanweb)
      • ex.Detector.getBrowserFeatures() to retrieve the support matrix of the current browser
      • ex.Detector.logBrowserFeatures() to log the support matrix to the console (runs at startup when in Debug mode)
    • Added @obsolete decorator to help give greater visibility to deprecated methods (#684)
    • Added better support for module loaders and TypeScript importing. See Installation docs for more info. (#606)
    • Added new Excalibur example project templates (#706, #733):
    • Added Pointer.lastPagePos, Pointer.lastScreenPos and Pointer.lastWorldPos that store the last pointer move coordinates (#509)

    Changed

    • Changed Util.clamp to use math libraries (#536) (thanks @FerociousQuasar)
    • Upgraded to TypeScript 2.1.4 (#726)

    Fixed

    • Fixed Scene/Actor activation and initialization order, actors were not being initialized before scene activation causing bugs (#661)
    • Fixed bug with Excalibur where it would not load if a loader was provided without any resources (#565)
    • Fixed bug where an Actor/UIActor/TileMap added during a Timer callback would not initialize before running draw loop. (#584)
    • Fixed bug where on slower systems a Sprite may not be drawn on the first draw frame (#748)
    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.9.0.nupkg(782.14 KB)
    excalibur.amd.d.ts(258.08 KB)
    excalibur.amd.js(597.68 KB)
    excalibur.amd.js.map(953.16 KB)
    excalibur.d.ts(354 bytes)
    excalibur.js(614.17 KB)
    excalibur.js.map(998.38 KB)
    excalibur.min.js(206.12 KB)
    excalibur.min.js.map(272.99 KB)
  • v0.8.0(Dec 4, 2016)

    image

    Added

    • ex.Vector.magnitude alias that calls ex.Vector.distance() to get magnitude of Vector (#663)
    • Added new ex.Line utilities (#662):
      • ex.Line.slope for the raw slope (m) value
      • ex.Line.intercept for the Y intercept (b) value
      • ex.Line.findPoint(x?, y?) to find a point given an X or a Y value
      • ex.Line.hasPoint(x, y, threshold) to determine if given point lies on the line
    • Added Vector.One and Vector.Half constants (#649, thanks @FerociousQuasar)
    • Added Vector.isValid to check for null, undefined, Infinity, or NaN vectors method as part of (#665)
    • Added ex.Promise.resolve and ex.Promise.reject static methods (#501)
    • PhantomJS based testing infrastructure to accurately test browser features such as image diffs on canvas drawing (#521)
    • Added some basic debug stat collection to Excalibur (#97):
      • Added ex.Engine.stats to hold frame statistic information
      • Added ex.Engine.debug to hold debug flags and current frame stats
      • Added preframe and postframe events to Engine as hooks
      • Added ex.Physics statistics to the Excalibur statistics collection
    • Added new fast body collision detection to Excalibur to prevent fast moving objects from tunneling through other objects (#665)
      • Added DynamicTree raycast to query the scene for bounds that intersect a ray
      • Added fast BoundingBox raycast test

    Changed

    • Internal physics names refactored to be more readable and to use names more in line with game engine terminology (explicit broadphase and narrowphase called out)

    Deprecated

    • ex.Promise.wrap (#501)

    Fixed

    • Fix Actor.oldPos and Actor.oldVel values on update (#666)
    • Fix Label.getTextWidth returns incorrect result (#679)
    • Fix semi-transparent PNGs appear garbled (#687, thanks @hogart)
    • Fix incorrect code coverage metrics, previously our test process was reporting higher than actual code coverage (#521)
    • Fix Actor.getBounds() and Actor.getRelativeBounds() to return accurate bounding boxes based on the scale and rotation of actors. (#692)
    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.8.0.nupkg(272.20 KB)
    excalibur.d.ts(230.08 KB)
    excalibur.js(564.55 KB)
    excalibur.min.js(184.05 KB)
    excalibur.min.js.map(242.84 KB)
  • v0.7.1(Oct 4, 2016)

    image

    Breaking Changes

    • Refactored and modified Sound API (#644)
      • Sound.setData now returns a Promise which differs from previous API
      • Removed internal FallbackAudio and Sound classes and replaced with single Sound class
      • Added AudioTagInstance and WebAudioInstance internal classes

    Added

    • ex.Promise.join(Promise[]) support (in addition to ...promises support) (#642)
    • Moved build artifacts to separate excalibur-dist repository (#648)
    • ex.Events namespace and typed event handler .on(...) overloads for default events on core excalibur objects (#639)
    • Engine.timescale property (default: 1.0) to add time-scaling to the engine for time-based movements (#543)
    • Two new parameters to ex.Util.DrawUtil.line that accept a line thickness and end-cap style (#658)

    Fixed

    • Actor.actions.fade properly supporting fading between 0 and 1 and vice versa (#640)
    • Fix issues with audio offset tracking and muting while game is invisible (#644)
    • Actor.getHeight() and Actor.getWidth() now take into account parent scaling (#645)
    • Actor.debugDraw now works properly for child actors (#505, #645)
    • Sprite culling was double scaling calculations (#646)
    • Fix negative zoom sprite culling (#539)
    • Fix Actor updates happening more than once per frame, causing multiple pointer events to trigger (#643)
    • Fix Actor.on('pointerup') capturePointer events opt-in on event handler. The opt-in was triggering correctly for handlers on 'pointerdown' and 'pointermove', but not 'pointerup'.
    Source code(tar.gz)
    Source code(zip)
    Excalibur.0.7.1.nupkg(296.18 KB)
    excalibur.d.ts(285.70 KB)
    excalibur.js(601.39 KB)
    excalibur.min.js(173.89 KB)
    excalibur.min.js.map(229.48 KB)
  • v0.7.0(Aug 30, 2016)

    image

    Breaking Changes

    • Code marked 'Obsolete' has been removed (#625, #603)
      • Actor
        • addEventListener
        • getWorldX, getWorldY
        • clearActions, easeTo, moveTo, moveBy, rotateTo, rotateBy, scaleTo, scaleBy, blink, fade, delay, die, callMethod, asPromise, repeat, repeatForever, follow, meet
      • Class
        • addEventListener, removeEventListener
      • Engine
        • parameterized constructor
        • addChild, removeChild
      • UpdateEvent removed
    • Scene.addChild and Scene.removeChild are now protected
    • Removed ex.Template and ex.Binding (#627)

    Added

    • New physics system, physical properties for Actors (#557, #472)
    • Read The Docs support for documentation (#558)
    • Continuous integration builds unstable packages and publishes them (#567)
    • Sound and Texture resources can now process data (#574)
    • Actors now throw an event when they are killed (#585)
    • "Tap to Play" button for iOS to fulfill platform audio requirements (#262)
    • Generic lerp/easing functions (#320)
    • Whitespace checking for conditional statements (#634)
    • Initial support for Yeoman generator (#578)

    Changed

    • Upgraded Jasmine testing framework to version 2.4 (#126)
    • Updated TypeScript to 1.8 (#596)
    • Improved contributing document (#560)
    • Improved local and global coordinate tracking for Actors (#60)
    • Updated loader image to match new logo and theme (#615)
    • Ignored additional files for Bower publishing (#614)

    Fixed

    • Actions on the action context threw an error (#564)
    • Actor getLeft(), getTop(), getBottom() and getRight() did not respect anchors (#568)
    • Actor.actions.rotateTo and rotateBy were missing RotationType (#575)
    • Actors didn't behave correctly when killed and re-added to game (#586)
    • Default fontFamily for Label didn't work with custom FontSize or FontUnit (#471)
    • Fixed issues with testing sandbox (#609)
    • Issue with camera lerp (#555)
    • Issue setting initial opacity on Actors (#511)
    • Children were not being updated by their parent Actors (#616)
    • Center-anchored Actors were not drawn at the correct canvas coordinates when scaled (#618)
    Source code(tar.gz)
    Source code(zip)
    excalibur-0.7.0.d.ts(278.42 KB)
    excalibur-0.7.0.js(594.10 KB)
    excalibur-0.7.0.js.map(366.66 KB)
    excalibur-0.7.0.min.js(170.74 KB)
    Excalibur.0.7.0.nupkg(277.59 KB)
Owner
Excalibur.js
TypeScript Web-based Game Engine
Excalibur.js
HTML5 Runner Game Made With Phaser.

"Hurry up Runner!" The Tunner Game "Hurry up!" Is A Small Funny Game Made With Phaser 3. This Game Is About Ordinary Salaryman That Hurries For His Jo

Abhay 3 Sep 26, 2022
Typescript based monte-carlo acyclic graph search algorithm for multiplayer games

Typescript based monte-carlo acyclic graph search algorithm for multiplayer games. It can be used in any turn-based strategic multiplayer games.

null 3 Jul 11, 2022
A lightweight 3D game engine for the web.

A lightweight 3D game engine for the web. Built with three.js and cannon-es.

null 667 Dec 31, 2022
LittleJS Logo LittleJS - The Tiny JavaScript Game Engine That Can

The Tiny JavaScript Game Engine That Can! ??

Frank Force 2.4k Dec 31, 2022
WordleGameCB - a game inspired by the Wordle word game developed by Josh Wardle

Technologies WordleGameCB WordleGameCB is a game inspired by the Wordle word game developed by Josh Wardle. This application was developed with the ai

@Encoding 4 Feb 20, 2022
GameApp is a web application that allow users to play nostalgic games such as minesweeper, flappybird, and space invasions.

GameApp is currently being developed. GameApp is a web application that allow users to play nostalgic games such as minesweeper, flappybird, and space

Stephanie Li 2 Feb 21, 2022
๐ŸŸฉ in case you want to cheat on your wordle games

Wordle Solver How to use Enter each right guess in the first grid Enter all letters that you know aren't in a certain position in the second grid For

James Zhang 2 Feb 7, 2022
Generate sound effects and background music for good old-fashioned mini-games

Generate sound effects and background music for good old-fashioned mini-games

ABA Games 11 Aug 1, 2022
A simple app to show NBA games and scores/details.

NBA Remix A simple app to show NBA games and scores/details. Deployment After having run the create-remix command and selected "Vercel" as a deploymen

Willian Justen 195 Dec 9, 2022
A clone of the popular game Wordle made using React, Typescript, and Tailwind

Wordle Clone Go play the real Wordle here Read the story behind it here Try a demo of this clone project here Inspiration: This game is an open source

Hannah Park 2.4k Jan 8, 2023
'Neko Mezashi Attack' - a simple but cute action game made with Vite and TypeScript

'Neko Mezashi Attack' is a simple but cute action game made with Vite and TypeScript. This app is packed all resources including style, graphics and audio into 4KB(4096 chars) JS. No runtime libraries or external resources are required.

yuneco 10 Dec 1, 2022
A recreation of the popular game Wordle with additional modes and features. Made with Svelte in Typescript.

A recreation of the popular game Wordle by Josh Wardle (now purchased by the New York Times), with additional modes and features. Hosted on GitHub pag

Mikha Davids 117 Dec 11, 2022
A super generic Lua web engine. Uses Lua for front-end, JavaScript for back-end, implemented in HTML.

A super generic Lua web engine. Uses Lua for front-end, JavaScript for back-end, implemented in HTML. This project is still in HEAVY development and w

Hunter 2 Jan 31, 2022
Created by Hashlips! In this repository, Hashlips and ScrawnyViking teach you how to create your unique randomly generated NFTs and launch them on to a free Github Domain where people can buy your NFTs from

Thank You HashLips ?? Upgraded and Articulated by ScrawnyViking aka TWECryptoDev All the code in these repos was created and explained by HashLips - P

TomorrowWontExist 16 Dec 14, 2022
Latin Wordle is a free and open-source project that aims to provide a fun and interactive way to learn Latin.

Latin Wordle Live Game Here Inspiration Latin Wordle is a free and open-source project that aims to provide a fun and interactive way to learn Latin.

null 15 Dec 16, 2022
๐ŸŽ Open source racing game developed by everyone willing

?? Open source racing game developed by everyone willing

Poimandres 2k Dec 26, 2022
Golf it! is a game designed to let you show off your code-fu by solving problems

Golf it! Golf it! is a game designed to let you show off your code-fu by solving problems in the least number of characters โœจ Explore the docs ยป View

Ashikka Gupta 5 Aug 18, 2022
Pig is a simple two player dice game.

Pig game Pig is a simple two player dice game. Play here: formidablae.github.io/pig_game or formaidablae-pig-game.netlify.app Each turn, a player repe

null 10 Oct 5, 2022
Quizpetitive - A quiz game to learn new knowledge and terms in the field of project management.

Quizpetitive A quiz game to learn new knowledge and terms in the field of project management. The key element to the success of this project was the c

LMF 1 May 16, 2022