use bevy::prelude::*; use crate::{action::CyberBikeState, geometry::PLANET_RADIUS}; #[derive(Component)] struct UpText; fn setup_ui(mut commands: Commands, asset_server: Res) { commands.spawn_bundle(UiCameraBundle::default()); commands .spawn_bundle(TextBundle { style: Style { align_self: AlignSelf::FlexEnd, ..Default::default() }, // Use `Text` directly text: Text { // Construct a `Vec` of `TextSection`s sections: vec![TextSection { value: "".to_string(), style: TextStyle { font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 40.0, color: Color::GOLD, }, }], ..Default::default() }, ..Default::default() }) .insert(UpText); } fn update_ui( state_query: Query<(&CyberBikeState, &Transform)>, mut text_query: Query<&mut Text, With>, ) { let mut text = text_query.single_mut(); let state = state_query.single(); text.sections[0].value = format!( "spd: {:.2}\nalt: {:.2}", state.0.velocity.length(), state.1.translation.length() - PLANET_RADIUS ); } pub struct CyberUIPlugin; impl Plugin for CyberUIPlugin { fn build(&self, app: &mut App) { app.add_startup_system(setup_ui).add_system(update_ui); } }