8个版本 (5个破坏性更新)
0.6.1 | 2023年7月16日 |
---|---|
0.6.0 | 2022年12月7日 |
0.5.0 | 2022年11月21日 |
0.4.0 | 2022年8月31日 |
0.1.0 | 2021年11月12日 |
#2335 in 游戏开发
每月65次下载
19KB
153 行
Bevy UI Build宏
❗ 此crate已过时,请勿使用 ❗ |
---|
此crate不会收到任何更新,并且与bevy的新版本不兼容。
建议使用以下之一
一组宏,用于加速在bevy中定义UI的过程。
Bevy版本
我们没有指定依赖的bevy版本。原因主要是,我依赖于一个bevy的私人分支,并且每次都要对每个bevy库进行分支,以使它们与我的bevy分支兼容,这是一件非常麻烦的事情。
由于这个crate只是定义宏,所以其中没有编译代码。宏要正常工作,唯一的要求是依赖的几个bevy符号在宏调用的作用域内。我们明确使用的bevy符号是
bevy::ecs::system::Insert
bevy::math::{Rect::{self,all}, Size::new}
bevy::prelude::Parent
bevy::ui::{entity::NodeBundle,Style, Val::{Percent,Px}}
宏
这些宏只是围绕在定义bevy UI时常用结构体周围的包装。
// unit! -- UNIT --
unit!(10 px); unit!(100 pct);
// Equivalent to
Val::Px(10.0); Val::Percent(100.0);
// style! -- STYLE --
style! {
flex_wrap: FlexWrap::Wrap,
flex_basis: unit!(90 pct),
};
// Equivalent to
Style {
flex_wrap: FlexWrap::Wrap,
flex_basis: unit!(90 pct),
..Default::default()
};
// size! -- SIZE --
size!(100 pct, 90 pct); size!(90 px, 40 px);
// Equivalent to
Size::new(Val::Percent(100.0), Val::Percent(90.0));
Size::new(Val::Px(90.0), Val::Px(40.0));
// rect! -- RECT --
rect!(10 px); rect!(5 px, 0 px); rect!(100 pct, 10 pct, 50 pct, 0 pct);
// Equivalent to
Rect::all(Val::Px(10.0));
Rect {
left: Val::Px(5.0),
right: Val::Px(5.0),
top: Val::Px(0.0),
bottom: Val::Px(0.0),
};
Rect {
left: Val::Percent(100.0),
top: Val::Percent(10.0),
right: Val::Percent(50.0),
bottom: Val::Percent(0.0),
};
// build_ui! -- BUILD_UI --
build_ui! {
#[cmd(commands)]
vertical{size:size!(100 pct, 100 pct)}(
horizontal{justify_content: FlexStart, flex_basis: unit!(10 pct)}(
tab_square[;focus], tab_square[;focus], tab_square[;focus]
),
column_box(
column[;red](
vertical(select_square, select_square),
horizontal{flex_wrap: Wrap}[gray](
square[;focus], square[;focus], square[;focus], square[;focus],
square[;focus], square[;focus], square[;focus], square[;focus],
square[;focus], square[;focus], square[;focus], square[;focus]
),
horizontal{flex_wrap: Wrap}[gray](
square[;focus], square[;focus], square[;focus], square[;focus],
square[;focus], square[;focus], square[;focus], square[;focus]
)
)
)
)
}
// Equivalent to
commands.spawn_bundle(NodeBundle {
style: Style { size: size!(100 pct, 100 pct), .. vertical.style },
.. vertical
})
.with_children(|cmds| {
cmds.spawn_bundle(NodeBundle {
style: Style {justify_content: FlexStart, flex_basis: unit!(10 pct), .. horizontal.style },
.. horizontal
})
.with_children(|cmds| {
cmds.spawn_bundle(tab_square).insert(focus);
cmds.spawn_bundle(tab_square).insert(focus);
cmds.spawn_bundle(tab_square).insert(focus);
});
cmds.spawn_bundle(column_box)
.with_children(|cmds| {
cmds.spawn_bundle(column).insert(red)
.with_children(|cmds| {
vertical.with_children(|cmds| {
cmds.spawn_bundle(select_square);
cmds.spawn_bundle(select_square);
});
cmds.spawn_bundle(NodeBundle {
style: Style {flex_wrap: Wrap, ..horizontal.style},
.. horizontal
}).insert(gray)
.with_children(|cmds| {
for _ in 0..12 {
cmds.spawn_bundle(square).insert(focus);
}
});
cmds.spawn_bundle(NodeBundle {
style: Style {flex_wrap: Wrap, ..horizontal.style},
.. horizontal
}).insert(gray)
.with_children(|cmds| {
for _ in 0..8 {
cmds.spawn_bundle(square).insert(focus);
}
});
});
});
});
变更日志
0.6.1
: (非破坏性) 添加弃用横幅。0.6.0
: (非破坏性) 使四个参数的rect!
变体的终端逗号变为可选。0.5.0
: 支持Bevy 0.90.4.0
: 支持Bevy 0.8,使用bevy::ui::Size
和bevy::ui::UiRect
代替math::Size
和math::Rect
0.3.0
- 现在在
build_ui
中可以以逗号结束子项列表 - 添加了条件子元素。只需将您想要条件性添加的子元素包裹在
if
中,您可以在子元素列表中添加任意数量的if
。这同样支持if else
。 重要:由于 Rust 宏的限制,您需要将谓词放在括号中if (谓词) { ... }
。
- 现在在
0.2.1
- 为
unit!
添加了undefined
和auto
参数,这也适用于size!
和rect!
的单元风格参数。
- 为
0.2.0
- 重大变更:现在
build_ui!
宏使用 [bundle;comp] 而不是方括号中仅包含组件的列表。这使得指定组件列表成为可能。然而,如果您只想指定附加组件,则需要将分号放在方括号的开头。[;like, this]
- 重大变更:现在
许可证
这很奇怪。由于这段代码实际上无法产生可分发二进制代码,我认为任何主流许可证都不适用。除此之外,我通常将小型库许可给 WTFPL。但我会做一个好的社区玩家,根据您的意愿,以 MIT 或 Apache 2.0 双许可。
版权 © Nicola Papale,请参阅 LICENSE 文件了解许可详情。