3 releases
new 0.1.2 | Jan 9, 2025 |
---|---|
0.1.1 | Jan 3, 2025 |
0.1.0 | Jan 2, 2025 |
#230 in Game dev
420 downloads per month
36KB
A growing set of macros which add some witchcraft into bevy, currently available: 🪄
- Style Sheet Notation for
bevy_ui
components (and your own) -ui!(( width: 20px; ))
- Simplified Notation for
Color
,Val
andUiRect
-code!{ let red = #ff0000; //..any code }
[!IMPORTANT] This crate is meant to provide macros only - no additional bevy plugins, resources, components or systems
Simpler Hierarchy Spawning
Spawn children just by stating []
- the 'names' are just variables containing their Entity
- those variables can be used anywhere in the macro - even
- read more or see this example.
spawn!{
// component/bundle;
// .method(..);
SpecificChild(optional_child_name);
[optional_child_name][
// component;
// .method(..);
]
}
CSS-like notation for bevy_ui
Using ui!((..))
(inner round braces) will return a tuple of mentioned components only.
- read about available fields, custom fields & notation in this readme
- see this example.
c.spawn(ui!((
size: 100px 100px;
border: 5px #ff0000;
box_shadow: 10% 10% 3px 8px #ffaa44;
background: #ffffff;
border_radius: 6px;
neat_outline;
)?));
//^ optional ? (or any token): hovering shows the returned tuple (if LSP used)
/// function as custom fields or p refabs
fn neat_outline() -> Outline {ui!((
outline: 3px 1px #00ff00;
))}
Code Replacement Macro
Using the code!{}
macro simplifies constructing:
Color
by writing#rgb
/#rgba
/#rrggbb
/#rrggbbaa
Val
by writing0px
/0%
/0vw
/0vh
/0vmin
/0vmax
/@
(auto)UiRect
by writing[>0px]
/[>0px 0px]
/[>0px 0px 0px]
/[>0px 0px 0px 0px]
(css-like)
So you can do fun things like:
let shadow = code!{BoxShadow{
// use #... is replaced with Color, meaning you can e.g. use methods
color: #FF1265.mix(&#F93ECA,0.4).with_alpha(0.2),
x_offset: 100px,
y_offset: 50%,
spread_radius: 3.1vh,
blur_radius: 40.23vmax,
}}};
let color = code!{#FF0000};
// or multiple things in the macro
code!{
let color2 = #00FF00;
let color3 = #6600AA;
}
println!{"{color2:?}"}
Version
Just to mention the obvious:
- Macros are token-based, meaning they aren't hard-bound to a specific bevy version
- However: These are mainly designed for bevy 0.15 and onwards
- The closer your bevy version is to 0.15, the more things will work
Design
Crates are separated into:
crate/*/syntax
: token handling, meant to be reusablecrate/*
: actual macros, based on that 'syntax'
[!NOTE] Only relevant if you dig deeper into this crate: The versions of those are not hard linked, since the macros can keep (or gain) features, even if the the syntax api has changed. So if one of those is
0.2.x
and the other0.5.x
at some point, don't worry.
Dependencies
~0.8–1.4MB
~25K SLoC