hover effect, layout hands and ponds

This commit is contained in:
Tao Tien 2026-01-13 04:11:09 -08:00
parent 4112edbf2a
commit 8a8a702a08
6 changed files with 163 additions and 20 deletions

65
src/tui/input/mouse.rs Normal file
View 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(())
}