hover effect, layout hands and ponds
This commit is contained in:
parent
4112edbf2a
commit
8a8a702a08
6 changed files with 163 additions and 20 deletions
65
src/tui/input/mouse.rs
Normal file
65
src/tui/input/mouse.rs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy_ratatui::{RatatuiContext, event::MouseMessage};
|
||||
use ratatui::{crossterm::event::MouseEvent, layout::Position};
|
||||
|
||||
use crate::tui::render::Hovered;
|
||||
|
||||
#[derive(Component)]
|
||||
pub(crate) struct PickRegion {
|
||||
pub(crate) area: ratatui::prelude::Rect,
|
||||
}
|
||||
|
||||
// enum PickEvent {
|
||||
// Click { col: u16, row: u16 },
|
||||
// Hover { col: u16, row: u16 },
|
||||
// }
|
||||
|
||||
pub(crate) fn input_system(
|
||||
mut commands: Commands,
|
||||
mut messages: MessageReader<MouseMessage>,
|
||||
context: Res<RatatuiContext>,
|
||||
entities: Query<(Entity, &PickRegion)>,
|
||||
hovered: Query<(Entity, &PickRegion), With<Hovered>>,
|
||||
) -> Result {
|
||||
for message in messages.read() {
|
||||
let event = message.0;
|
||||
// let term_size = context.size().unwrap();
|
||||
let position = Position::new(event.column, event.row);
|
||||
match event.kind {
|
||||
ratatui::crossterm::event::MouseEventKind::Down(mouse_button) => match mouse_button {
|
||||
ratatui::crossterm::event::MouseButton::Left => {
|
||||
for (entity, region) in &entities {}
|
||||
}
|
||||
// ratatui::crossterm::event::MouseButton::Right => todo!(),
|
||||
// ratatui::crossterm::event::MouseButton::Middle => todo!(),
|
||||
_ => {}
|
||||
},
|
||||
// ratatui::crossterm::event::MouseEventKind::Up(mouse_button) => todo!(),
|
||||
// ratatui::crossterm::event::MouseEventKind::Drag(mouse_button) => todo!(),
|
||||
ratatui::crossterm::event::MouseEventKind::Moved => {
|
||||
for (entity, region) in &hovered {
|
||||
if !region.area.contains(position) {
|
||||
commands.get_entity(entity)?.remove::<Hovered>();
|
||||
}
|
||||
}
|
||||
for (entity, region) in &entities {
|
||||
// debug!(
|
||||
// "{:?}, {position:?}",
|
||||
// region.area.positions().collect::<Vec<_>>()
|
||||
// );
|
||||
if region.area.contains(position) {
|
||||
commands.get_entity(entity)?.insert(Hovered);
|
||||
// trace!("{entity:?} hovered!")
|
||||
}
|
||||
}
|
||||
}
|
||||
// ratatui::crossterm::event::MouseEventKind::ScrollDown => todo!(),
|
||||
// ratatui::crossterm::event::MouseEventKind::ScrollUp => todo!(),
|
||||
// ratatui::crossterm::event::MouseEventKind::ScrollLeft => todo!(),
|
||||
// ratatui::crossterm::event::MouseEventKind::ScrollRight => todo!(),
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue