This changelog is manually updated. While an effort will be made to keep the Unreleased changes up to date, it may not be fully representative of the current state of the project.
- The animation system has been reworked; see the animation documentation for details.
- Added a new
ImageFromUrl
ui component, which can load images from assets or urls. It also supports rounded corners, borders and a fallback background color. See the image example for more details.
- Locally-broadcasted messages can now choose to include the originating module in the broadcast; this is an additional boolean parameter to
ModuleMessage::send_local_broadcast
andmessage::Target::LocalBroadcast
. screen_to_world_direction
andclip_space_ray
renamed. See #410- Rename
visualizing
tovisualize_collider
These PRs are not directly user-facing, but improve the development experience. They're just as appreciated!
- API: The API documentation is now built only for the
wasm
target ondocs.rs
.
- API: Guest code can now create and interact with UI. See the UI examples.
- API: Guest code can now run on the client. See the
clientside
example. - API: Clientside guest code can now play basic audio. See the
pong
example. - Server: By default, a proxy URL is generated for the server on startup. This can be used to access a running server from anywhere on the internet, making it easy to share your work with others. To turn this off, specify
--no-proxy
on the server command line.
- API: Kinematic bodies are now exposed. This is used by the minigolf example to provide its moving obstacles.
- API: Added
physics::move_character
function to correctly move character controllers. This is used by the third-person camera example. - API:
Uvec2
/Uvec3
/Uvec4
/U8
can now be used for component values. - API: A new
message
API has been added to allow for sending messages between client and server WASM, and from one WASM module to another. Messages are defined inambient.toml
and are structured. Message subscriptions return handles that can be used to cancel their subscriptions. - API: A new
camera
API has been added on the client for operations that involve the camera, includingscreen_ray
for calculating a ray from the camera through a screen position. Thanks to @owenpalmer for implementing this in #316. - API: A new
input
API has been added for retrieving input and manipulating the cursor (including changing its icon, visibility and lock state). - API:
physics::{add_impulse, add_force_at_position, add_impulse_at_position, get_velocity_at_position}
have been added. - API: Added
create_revolute_joint
to thephysics
API. - API: Added a capsule concept with corresponding components.
- API: Several animation manipulation functions have been added to
entity
andasset
. Thanks to @devjobe for implementing this in #362. - Physics: A
collider_loaded
component will now be automatically attached to an entity once its collider has finished loading. - Client: The client's window title is now automatically changed to the name of the project running on the server. Thanks to @MavethGH for implementing this in #178.
- Client: Added a basic headless mode to enable automatic CI testing of projects.
- Client: Added
Dump UI World
button to inspect the state of the UI. Thanks to @owenpalmer for implementing this in #216.
- A suite of UI examples have been added to demonstrate how to use the UI in guest code.
- The
clientside
example shows how to use clientside WASM. - The
messaging
example shows how to message the server from the client and vice versa, and how to message another module with both broadcasts and directed messages. - The
pong
example implements a basic version of Pong to demonstrate a basic multiplayer game. - The
fog
example shows how to configure fog in the renderer for more atmospheric scenes. - The
first_person_camera
example shows how to implement a first-person camera. - The
music_sequencer
example shows how to use the audio and UI API to build a basic music sequencer. - The
decals
example shows how to use decals to add detail to a scene. Thanks to @kevzettler for implementing this in #347.
- Client:
--debug
is now--debugger
, but it can also be accessed through theAMBIENT_DEBUGGER
env variable. - API: The
Cargo.toml
has changed to enable clientside builds. Please look at the examples to see how to update yourCargo.toml
appropriately. - API:
ChangeQuery
has been split intoUntrackedChangeQuery
andChangeQuery
to ensure thattrack_change
is called before the query is built. - API:
asset_url
has moved toasset::url
. - API:
EventResult
andEventOk
have been renamed toResultEmpty
andOkEmpty
to better clarify their purpose. - API: The physics API has been revamped to better encode the physics engine's capabilities.
physics::apply_force
is nowphysics::add_force
.physics::explode_bomb
is nowphysics::add_radial_impulse
, and takes aFalloffRadius
enum.
- API: All input functionality has moved to
input
on the clientside. - API: The
lookat_center
component has been renamed tolookat_target
. - Physics: Convex shapes are now used if a body is neither static or kinematic.
- Ambient: Ambient is now dual-licensed MIT/Apache2, in accordance with the rest of the Rust ecosystem.
- Ambient: The default logging settings now better communicate what Ambient is doing at any given moment.
- Project: Concept definitions in projects now support namespaces. Thanks to @ArberSephirotheca for implementing this in #212.
- API: Concepts now include the components they use in their doc comments.
- API:
#[main]
-attributed functions no longer have to beasync
or return aResult
. - API:
#[main]
-attributed functions,on
,once
,Query::bind
andrun_async
can now return aResult
or nothing. - Project: Project manifests can now be split into multiple files using
includes
.
- Ambient: Various stability and performance fixes.
- Ambient: Added attributions for external code.
- Ambient: Typo fixes. Thanks for the following!
- Examples: The Minigolf example now has several gameplay tweaks (including camera movement on right-click) to improve the experience.
- Examples: The examples no longer occasionally use non-one alpha colours, which led to them rendering black objects.
- Server: The server no longer shuts down automatically after a period of inactivity.
- ECS: A bug with ECS component versioning that led to certain components not updating has been fixed. Fixes #113.
- Networking: Various optimizations have been made to networking and the ECS to reduce unnecessary network traffic.
These PRs are not directly user-facing, but improve the development experience. They're just as appreciated!
- CI: Linux CI builds now output the tree of their target to assist in debugging CI cache blow-up. Thanks to @daniellavoie for implementing this in #170.
- ECS:
Entity::assert_all
can be used to ensure all components for anEntity
on the host have an attribute. Thanks to @MavethGH for implementing this in #211. - App:
ambient new
uses the correct path for relative API when creating a project inguest/rust/examples
. Thanks to @owenpalmer for implementing this in #218. - Ambient: The presentation of the license in the repository was improved. Thanks to @C-BJ for #201 and #203.
- Ambient: The book and build CI workflows now only run when relevant files are updated. Thanks to @C-BJ for implementing this in #202.
- Audio: The audio asset pipeline now uses Rust libraries for re-encoding files, instead of shelling out to ffmpeg. Thanks to @marceline-cramer for implementing this in #317.
- Rendering: Ambient now runs on wgpu 0.16, improving compatibility and providing access to new features. Thanks to @kevzettler for implementing this in #308.
- Campfire: The internal development tool Campfire can now automatically check release-readiness. Thanks to @kevzettler for implementing this in #356.
- API:
player_camera
has been removed, and the components it instantiated are now directly exposed. See themultiplayer
example to see what's changed. - API: Events have been removed and replaced with the more general-purpose
message
API.
- A minigolf example by SK83RJOSH.
- Examples are now bundled into a downloadable
examples.zip
for each release.
- macOS ARM64 builds are now available after enabling the execution of unsigned executable memory (as required for wasmtime execution).
- The debugging configuration for VSCode was updated to use the new CLI.
- Minor documentation updates.
Initial release. See the announcement blog post.