This week in Amethyst 12

Published on Oct 27th 2018 by torkleyy

Hello and welcome to the 12th issue of This Week in Amethyst, a blog bringing to you the latest changes regarding Amethyst, a data-driven game engine written in Rust.

We're very proud of the fast growing activity on our project! Given the wide interest from the community, we figured it's time to continue This Week in Amethyst. We'd like to go with the following structure from now on:

  • important recent changes
  • chosen ongoing issues / PRs with high importance and / or activity
  • call for participation

A list of new contributors, issues and PRs will no longer be included. New contributors will be listed in release posts; issues and PRs have gotten far too many to list them all here.

New CI strategy

CI is crucially important for any project, even more so for the big ones. That said, Travis and AppVeyor have been causing us issues for a long time now, blocking effective work on the engine due to long build times. While Travis did generally work better than AppVeyor, it cannot handle the massive workload that Amethyst generates with all the PRs and staging builds[1].

After an insane amount of research and experimentation, Ellie has come up with a big first step to improve the situation, implemented by this PR. These are the changes in short:

  • use Concourse as a first pass for building PRs for Linux and showing its status
  • thanks to Travis' new Windows support, Travis can now be used to build for all three platforms; it will now be used by bors[1], as a final check before merging the PR into master
  • AppVeyor has been dropped entirely

This way, Travis has less workload and is only needed when a PR is merged. By using Concourse we not only avoid blocking our merging pipeline, but we now also have dedicated status reports for tests, book tests and correct formatting.

What's being worked on currently?

Amethyst's math library has been using cgmath so far, but we've decided that we want to move to Nalgebra. We previously used cgmath due to both historic and simplicity reasons. Since it changed into maintainance mode[2] and nalgebra has an easier API now, we're doing the migration. We think this is an important step for unifying the Rust ecosystem. Thanks to Ellie for doing the migration PR!

The transition to Nalgebra in Amethyst & its rhusics bridge is going to be the focus for this release. Meanwhile, Rhuagh and sebcrozet are working on better ECS support for nphysics (work hasn't started on the nphysics-ecs repo just yet, but it's planned for this weekend).

In other news, Yuurai is working on a formatting tool for RON files! You can find the repo here, but note that it's still very experimental. This will make our lives a lot easier since RON files are used for configuration and prefabs in Amethyst; soon we'll no longer have to format them by hand!

Speaking of prefabs... Rhuagh is working on a PR that lets us define new prefabs very easily, with much less boilerplate. With the new macro it will be as easy as adding a few derives:

#[derive(Default, Deserialize, Serialize, PrefabData)]
struct ScenePrefabData {
    transform: Option<Transform>,
    gltf: Option<AssetPrefab<GltfSceneAsset, GltfSceneFormat>>,
    camera: Option<CameraPrefab>,
    light: Option<LightPrefab>,
    tag: Option<Tag<AnimationMarker>>,
    fly_tag: Option<ControlTagPrefab>,

Interesting discussions

There's one RFC chosen to be presented here, "Std I/O driven application (aka amethyst_commands)" (link).

This RFC, written by azriel, is part of a bigger topic, runtime modification of the game and control of its behavior. This is required for many things like the editor, networking, modding, scripting, etc. Make sure to weigh in if you have any ideas regarding these topics! We're hoping that we can find a way to make all of that possible with as few APIs as possible.

The RFC specifically is based on code azriel has already implemented for their own game. Here's a little proof of concept they posted a while ago, so you can get an idea what this is about:

We're happy to get some input from you!

Call for participation

We love contributions from the community, so if you see something you'd like to work on, don't hesitate! We are going to help you and point you into the right direction if something doesn't work out at first.

We have tasks with different difficulty. Make sure to choose easier ones at first, because hard issues can become quite frustrating, especially if you haven't worked on Amethyst before.

Here are seven issues for you to pick from:

Please let us know that you're working on an issue using a short comment, that way we can avoid duplicate work. Also note that you can help by contributing to the discussion; especially the last issue can really use some more input!

Thank you for helping push the project forward!

[1] bors is a GitHub bot that merges our PRs and makes sure they're compatible with the latest master by using a "staging" branch. You can read more about that on their website.

[2] cgmath has been moved into rustgd and is not having a lot of activity. If there is a PR, it's going to be merged, but nobody expects a lot of work to happen on it.