use bevy::prelude::*; use bevy_egui::{egui, EguiContexts, EguiPlugin}; pub mod util; pub mod components; pub mod systems; use components::*; use util::roll; fn main() { App::new() .add_plugins(DefaultPlugins) .add_plugins(EguiPlugin) .add_systems(Startup, setup) .add_systems(Update, gui) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { let names = ["Dane", "Cole"]; for i in 0..2 { let (hp, _) = roll("1d6 + 3"); commands.spawn(Creature { health: Health { hp, max: hp, }, armor: Armor { ac: 10, }, spatial: SpatialBundle { transform: Transform::from_xyz(i as f32 * 2.0, 0.0, 0.0), ..default() }, }) .insert(PlayerCharacter { name: names[i].to_string(), }) .with_children(|parent| { parent.spawn(PbrBundle { mesh: meshes.add(shape::Capsule::default().into()), material: materials.add(Color::WHITE.into()), ..default() }); }); } commands.spawn(DirectionalLightBundle { transform: Transform::default().looking_at(Vec3::new(3.0, -50.0, 1.0), Vec3::Y), ..default::<_>() }); commands.spawn(Camera3dBundle { transform: Transform::from_xyz(1.0, 15.0, 2.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); } fn gui( query: Query<(&Health, &PlayerCharacter)>, mut contexts: EguiContexts ) { let ctx = contexts.ctx_mut(); egui::Window::new("Battle Menu") .title_bar(false) .collapsible(false) .resizable(false) .movable(false) .show(ctx, |ui| { for (health, pc) in query.iter() { ui.label(format!("{} HP: {}", pc.name, health.hp)); } }); }