bevy/src/ui/ui_update_system.rs

36 lines
1.2 KiB
Rust
Raw Normal View History

2020-01-14 03:20:58 +00:00
use crate::prelude::*;
2020-01-13 00:51:21 +00:00
2020-03-29 08:49:35 +00:00
pub fn ui_update_system() -> Box<dyn Schedulable> {
2020-01-13 00:51:21 +00:00
SystemBuilder::new("ui_update_system")
.read_resource::<Window>()
2020-01-13 06:18:17 +00:00
.with_query(<(Write<Node>,)>::query().filter(!component::<Parent>()))
.write_component::<Node>()
.read_component::<Children>()
2020-01-13 00:51:21 +00:00
.build(move |_, world, window, node_query| {
2020-03-26 04:27:32 +00:00
let parent_size = math::vec2(window.width as f32, window.height as f32);
2020-01-13 06:18:17 +00:00
let parent_position = math::vec2(0.0, 0.0);
for (entity, _) in node_query.iter_entities_mut(world) {
ecs::run_on_hierarchy_subworld_mut(
2020-01-13 06:18:17 +00:00
world,
entity,
(parent_size, parent_position),
&mut update_node_entity,
2020-01-13 06:18:17 +00:00
);
2020-01-13 00:51:21 +00:00
}
})
}
2020-01-13 06:18:17 +00:00
fn update_node_entity(
world: &mut SubWorld,
entity: Entity,
parent_properties: (Vec2, Vec2),
) -> Option<(Vec2, Vec2)> {
let (parent_size, parent_position) = parent_properties;
if let Some(mut node) = world.get_component_mut::<Node>(entity) {
node.update(parent_size, parent_position);
return Some((node.size, node.global_position));
}
None
}