Crates.io | bevy_cobweb_ui |
lib.rs | bevy_cobweb_ui |
version | 0.4.1 |
source | src |
created_at | 2024-03-02 04:12:23.974452 |
updated_at | 2024-09-14 17:03:29.321678 |
description | UI tools and widgets built on bevy_cobweb and sickle_ui |
homepage | |
repository | https://github.com/UkoeHB/bevy_cobweb_ui |
max_upload_size | |
id | 1159476 |
size | 670,279 |
Provides a framework for building UI and managing assets in a Bevy app. Built on bevy_cobweb, sickle_ui, and standard bevy_ui
/bevy_assets
/etc.
Custom asset format for specifying scenes and loading commands to be applied on startup, with seamless fine-grained hot reloading and thorough error handling.
Integration with sickle_ui so widgets and themes can be specified in cobweb asset files then easily overridden/customized. Also includes various reactivity extensions for UiBuilder
, including UI interactions (e.g. .on_pressed(your_system)
).
Standardized API for accessing fonts with families, weights, styles, and widths (e.g. Fira Sans + Bold + Italic + Condensed
).
Robust localization support for text, fonts, images, and audio, with extensibility to other assets.
Asset manager resources that keep track of asset handles, take care of localization automatically, and are easily populated using asset manifests specified in cobweb asset files.
Wrappers around bevy_ui
for loading UI into scenes via cobweb asset files.
Built-in UI widgets, color palettes, and assets (e.g. fonts). Note that the widgets
, colors
, and assets
features are enabled by default.
This is an asset-oriented UI framework revolving around cobweb asset files (.caf.json
files). You spawn CAF scenes in-code, and then you can edit those scenes to add code-side behavior like on_pressed
/on_hover
/etc. or to insert components, or to spawn child scenes within a scene.
To get started, you need three things.
CobwebUiPlugin
.LoadState::Done
before loading UI. This avoids jank while loading CAF files and other assets. You can build UI in-code before then without a problem, as long as you don't reference not-yet-loaded assets.app
.add_plugins(bevy::DefaultPlugins)
.add_plugins(CobwebUiPlugin)
.load("main.caf.json")
.add_systems(OnEnter(LoadState::Done), build_ui);
Check the loading
module for how to write CAF files.
Check the repository examples for how to build different kinds of UI.
hello_world
: Bare-bones hello world.
counter
: Simple counter button. Shows how ControlRoot
and ControlLabel
can be used to transfer interactions within a widget. Also demonstrates updating text dynamically on the code side.
counter_widget
: Widget-ified counter that can be configured. Uses scene 'specs' to make the widget scene data parameterized, enabling customization within asset files.
help_text
: Help text that appears on hover. Showcases PropagateOpacity
, which allows controlling (and animating) the opacity of entire node trees, and even layering multiple PropagateOpacity
within a single tree.
radio_buttons
: A set of buttons where only one is selected at a time. Uses the built-in radio button widget.
localization
: Showcases localized text and font.
calculator
: A minimalistic code-only calculator. Shows how to mix normal sickle_ui
UI construction with bevy_cobweb_ui
convenience tools for interactions.
game_menu
: A simple game menu with settings page. Showcases multiple uses of built-in radio buttons, localization, non-interactive animations, integration with sickle_ui
built-in widgets (a slider and drop-down), and how to manage localized image assets using CAF files as manifests.
You may encounter a compiler diagnostic bug when using LoadedScene
with nested closures/functions. Check out the game_menu
example for how to manage the lifetimes properly. The bug is fixed on nightly so if you compile with +nightly
or add nightly to your build toolchain then it will error properly instead of panicking.
bevy
compatabilitybevy |
bevy_cobweb_ui |
---|---|
0.14 | 0.1.0 - master |