diff --git a/crates/border-wars/src/hover.rs b/crates/border-wars/src/hover.rs new file mode 100644 index 0000000..632dc07 --- /dev/null +++ b/crates/border-wars/src/hover.rs @@ -0,0 +1,38 @@ +//! The file that contains the hover logic. + +use bevy::prelude::*; + +/// The plugin for the hover system. +pub struct HoverPlugin; + +impl Plugin for HoverPlugin { + fn build(&self, app: &mut App) { + app.add_systems(Update, hovering); + } +} + +/// A component that stores the hover texture and the original texture. +#[derive(Component, Clone)] +struct HoveredTexture { + /// The original texture. + texture: Handle, + + /// The hovered texture. + hovered_texture: Handle, +} + +/// The system that applies the hover logic by changing the texture. +fn hovering( + mut interaction_query: Query< + (&Interaction, &HoveredTexture, &mut UiImage), + Changed, + >, +) { + for (interaction, textures, mut image) in interaction_query.iter_mut() { + match *interaction { + Interaction::Hovered => image.texture = textures.hovered_texture.clone(), + Interaction::None => image.texture = textures.texture.clone(), + Interaction::Pressed => (), + } + } +} diff --git a/crates/border-wars/src/lib.rs b/crates/border-wars/src/lib.rs index 6f144ae..726dfd0 100644 --- a/crates/border-wars/src/lib.rs +++ b/crates/border-wars/src/lib.rs @@ -6,6 +6,7 @@ use networking::PlayerRank; use serde::{Deserialize, Serialize}; pub mod camera; +pub mod hover; pub mod map; pub mod networking; pub mod responsive_scale;