diff --git a/src/main.rs b/src/main.rs index a700a65..84865a9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use crate::camera::CameraPlugin; use crate::collision::CollisionPlugin; use crate::obstacle::ObstaclePlugin; use crate::player::PlayerPlugin; +use crate::score::ScorePlugin; mod background; mod bounds; @@ -32,5 +33,6 @@ fn main() { .add_plugins(CollisionPlugin) // Collisions .add_plugins(ObstaclePlugin) // Obstacles .add_plugins(BoundsPlugin) // Bound player + .add_plugins(ScorePlugin) // Score .run(); } diff --git a/src/score.rs b/src/score.rs index 4a87641..8172cff 100644 --- a/src/score.rs +++ b/src/score.rs @@ -1,18 +1,55 @@ use bevy::prelude::*; -use crate::player::{Player, START_POSITION}; +use crate::player::{Player, START_POSITION, move_player}; -#[derive(Resource)] +#[derive(Resource, Default)] pub struct Depth(pub f32); +// Update depth of the player fn update_depth(mut depth: ResMut, player: Single<&Transform, With>) { depth.0 = START_POSITION.y - player.translation.y; } -fn spawn_depth_text() { - todo!() +#[derive(Component)] +pub struct DepthText; + +// Display the initial text of the depth (Score) +fn spawn_depth_text(mut commands: Commands) { + commands.spawn(( + Text::new("0"), + TextFont { + font_size: FontSize::Px(50.0), + ..default() + }, + TextColor(Color::WHITE), + Node { + position_type: PositionType::Absolute, + top: Val::Px(20.0), + left: Val::Px(20.0), + ..default() + }, + DepthText, + )); } -fn update_depth_text() { - todo!() +// Update depth score text +fn update_depth_text( + mut commands: Commands, + depth: Res, + mut texts: Query<&mut Text, With>, +) { + for mut text in texts { + text.0 = format!("Score: {}", depth.0); + } +} + +pub struct ScorePlugin; + +impl Plugin for ScorePlugin { + fn build(&self, app: &mut App) { + app.add_systems(Startup, spawn_depth_text) + .init_resource::() + .add_systems(Update, update_depth.after(move_player)) + .add_systems(Update, update_depth_text); + } }