generated from tipragot/rust
Add a generic hover system #93
38
crates/border-wars/src/hover.rs
Normal file
38
crates/border-wars/src/hover.rs
Normal file
|
@ -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 textures and the original texture.
|
||||||
|
#[derive(Component, Clone)]
|
||||||
|
struct HoveredTexture {
|
||||||
|
/// The original texture.
|
||||||
|
texture: Handle<Image>,
|
||||||
|
|
||||||
|
/// The hovered texture.
|
||||||
|
hovered_texture: Handle<Image>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The system that applies the great texture to the hovered entity.
|
||||||
|
fn hovering(
|
||||||
|
mut interaction_query: Query<
|
||||||
|
(&Interaction, &HoveredTexture, &mut UiImage),
|
||||||
|
Changed<Interaction>,
|
||||||
|
>,
|
||||||
|
) {
|
||||||
|
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 => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ use networking::PlayerRank;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub mod camera;
|
pub mod camera;
|
||||||
|
pub mod hover;
|
||||||
pub mod map;
|
pub mod map;
|
||||||
pub mod networking;
|
pub mod networking;
|
||||||
pub mod responsive_scale;
|
pub mod responsive_scale;
|
||||||
|
|
Loading…
Reference in a new issue