The Amethyst team is proud to announce our latest release, filled with new features and with massive improvements to the 2D workflow.
It has been 2 months since the last release, and we are proud to announce that version
0.9 of the Amethyst game engine is now available on crates.io! We would like to thank the numerous contributors involved in this release; the full list is available below.
Now, onto the features!
0.9 we are introducing a new way to draw sprites on the screen. Drawing a sprite is now as simple as just attaching a
SpriteRender component to the entity you want to draw. This change also allowed sprite batching to be implemented meaning that you should now see a massive boost in performance when displaying a lot of sprites on the screen.
We are also introducing new usability features for drawing in a 2D world. One of them is the ability to load spritesheets directly from files. This is done using the serde-compatible RON data format, making it very easy to load big spritesheets and convert them from other sprite sheet formats.
0.9, we have started building a new networking system. The initial work was to implement some basic features on top of UDP. You can see that work here. With this as our solid foundation, our focus for
0.10 will be on higher-level abstractions, such as automatically syncing entities across clients. The current
amethyst_network crate is expected to change a great deal in
0.10. The current contents should be viewed as a proof-of-concept only.
In short, we're not quite production-ready yet, but we're getting there!
Experimental Editor Support
Alongside continued development of the engine, members of the community have been building out an experimental editor for building Amethyst games. The first part of this work is the amethyst-editor-sync crate, which provides a way for Amethyst games to connect to the editor. This is being built in a way that makes it possible to experiment with multiple different editors without committing to one technology. Doing so allows us to get practical experience with a variety of GUI technologies so that we can eventually make an informed decision on which one to adopt for the official editor.
The first editor being built by the community is randomPoison/amethyst-editor,
and it is being built with Electron. It currently has support for displaying
any Component or Resource that implements
Serialize, and the upcoming 0.3
release will bring support for tweaking values in the editor and having them
update within the game.
New Convenience Features
This release brings with it a bunch of new convenience features. Here are some of the highlights:
Namedcomponent was added to allow entities to carry arbitrary names.
Stateso it stays updated even when paused.
- There is now a function called
amethyst_utilswhich allows you to get resources without having to rely on the cargo project path.
DebugLinesfeature and graphical pass now allows showing debugging lines in the scene.
JsonFormatwas added, allowing the load of prefabs and arbitrary data as the Json format, in addition to the already available Ron format.
State::handle_eventmethod now allows receiving configurable and custom event types.
- Orthographic cameras can now be adjusted to match the window size by using
- Text alignment is now supported in the UI.
- Multi-line text is now supported in the UI.
- The new
Hiddencomponent can now be added to entities in order to temporarily stop rendering of them.
Removalcomponent allows to easily remove a group of entities at once by calling the
exec_removalfunction. It can be used in combination with prefabs to switch between scenes and UI menus easily.
DestroyInTimecomponents allow destroying entities at a future point in time. The first one specifies the exact time in seconds at which the entity should be destroyed, and the second one specifies a "time remaining to live" duration.
- TGA image support.
Transformcomponent can be created from the
- Support to load native fonts for UiText (and UiButton!), as well as default fonts for text.
There has been a lot of bug fixing and tweaking going on for this release. Here is a highlight of some of them:
- Flat render gamma should now be fixed in most cases.
- Hardware compatibility should now be improved.
- glTF scenes no longer have materials swapped around.
- glTF node names are now loaded into the
- glTF adds the MeshData component to create entities. We plan on adding configuration options for this soon.
- Support for progressive JPEG loading was added.
- Rendering work around for MacOS 10.14.X added.
- The mouse hiding feature can now be configured through the
- Improved the configurability of the logger. (log level, log to file, etc…)
ProgressCounternow shows loading errors.
- Improvements to
TextureMetadataallows selecting the filtering method. (Nearest, Linear, etc…)
- UI coordinates now go from bottom to top.
- Fixed UI issue with anchors and global positionning.
- Fixed UI issue where events were sometime ignored.
For a full list of changes, see this changelog file.
This release, we continued with the trend launched by the 0.8 release: We kept a heavy focus on keeping the documentation up to date and to explain more of the internals of the engine.
The beginner tutorial has been made more beginner-friendly too, with easier to follow instructions.
Previous and new Goals
In the previous release post we made a list for planned features that would have landed in this version. While not all of them made it in this time you can be sure that we are still working on making them a reality as soon as possible. The major new features of
0.10 are going to be the new renderer and migrating to a new math library called nalgebra. If you want to help us make
0.10 even more awesome than this release, feel free to join our Discord and say hi; we are always happy to help new contributors!
People we <3
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!