Amethyst 0.10.0 has been released!
Published on 2018-12-08

The Amethyst team is happy to announce a new version of Amethyst, 0.10.0. Amethyst is a data-driven and data-oriented game engine aiming to be fast and as configurable as possible.

To pick up this release, add the following in your project's Cargo.toml:

amethyst = "0.10.0"

What's in 0.10.0

Amethyst 0.10.0 comes packed with features, ergonomics, and stability improvements.

nalgebra

Previously, Amethyst used the cgmath library for its math types. In this release, Amethyst has moved to the nalgebra library, as the Rust community has recently rallied behind using it as the common library for game development.

As part of this change, we no longer export amethyst::core::cgmath, instead you should be using amethyst::core::nalgebra like this:

use amethyst::core::nalgebra::{Vector2, Vector3, Matrix4};

This change paves the way towards using the various rustsim libraries. This is a collection of high-quality libraries, developed and maintained by the broader Rust community to perform simulations.

Going forward we will be working on integrating these libraries. In the meantime, amethyst-rhusics has been updated to support nalgebra.

This is of course a breaking change. To help our users in this transition we've written a cgmath to nalgebra cheat sheet.

Rust 2018

The Amethyst Foundation team has been working on making sure that the project is up to date with the latest and greatest stable Rust. Rust 1.31 came out on December 6th, and with that release came the 2018 edition of Rust. We're happy to say that with this release, Amethyst has migrated to Rust 2018. The primary change that affects Amethyst is that implicit lifetimes are no longer idiomatic; thus state data should be represented like so: StateData<'_, GameData<'_, '_>>. We have some changes on the way to make this more ergonomic, so keep an eye out!

Automated Testing Framework

One of Rust's promoted qualities is fearlessness. To uphold this principle, we want to support complete confidence to make changes in games made with Amethyst. The amethyst_test crate was built for this purpose.

This crate lets you set up an Amethyst application, execute specific logic, and run assertions on the World with minimal boilerplate. Here's an example:

pub struct MyResource(pub u32);

#[test]
fn system_increases_resource_value_by_one() -> Result<(), amethyst::Error> {
    AmethystApplication::blank()
        .with_setup(|world| world.add_resource(MyResource(0)))
        .with_system_single(ExampleSystem, "example_system", &[])
        .with_assertion(|world| {
            let my_resource = world.read_resource::<MyResource>();

            // If the system ran, the value in the `MyResource` should be 1.
            assert_eq!(1, my_resource.0);
        })
        .run()
}

This runs the ExampleSystem in a simplified Amethyst application. Unimportant details are hidden, allowing the test to be readable and expressive. Best of all, behavioral changes to the system are automatically tested.

For more information, please see the Testing section in the book and the API documentation.

Other Changes

Amethyst 0.10.0 involves a significant number of changes. We can't detail all of them here, but following are some of the more notable ones:

For a full list of changes, see the detailed release notes for 0.10.0.

What's Next

Following is a sneak peak of what the various teams are working on right now.

People we 💖

We would like to thank all our contributors who were involved in making this release possible:

As well as everyone who reviewed pull requests, opened issues, participated in the design discussions, and requested features!


The Amethyst Foundation is a pending 501(c)(3) non-profit. For details on what this means, or to make a donation, please refer to this announcement. If you would like to contribute to Amethyst, feel free to jump right in.