render drawn, discard drawn

This commit is contained in:
Tao Tien 2026-01-18 10:52:09 -08:00
parent 50ccd7fcb2
commit faa653b012
4 changed files with 24 additions and 20 deletions

View file

@ -94,6 +94,7 @@ pub(crate) fn render(
Ok(())
}
#[allow(clippy::too_many_arguments, clippy::type_complexity)]
pub(crate) fn render_hands(
mut commands: Commands,
mut tui: ResMut<RatatuiContext>,
@ -102,18 +103,21 @@ pub(crate) fn render_hands(
layouts: Res<HandLayouts>,
tiles: Query<&Tile>,
main_player: Single<(&Player, &Wind), With<MainPlayer>>,
main_player: Single<(&Player, Entity, &Wind), With<MainPlayer>>,
curr_player: Single<Entity, With<CurrentPlayer>>,
players: Query<(&Player, &Children)>,
players: Query<(&Player, Entity, &Children)>,
hands: Query<(&Children, Entity), (With<Hand>, Without<Player>)>,
drawn_tile: Option<Single<(&Player, Entity), With<Drawn>>>,
drawn_tile: Single<Entity, With<Drawn>>,
) -> Result {
let mut frame = tui.get_frame();
debug_blocks(*layouts, &mut frame);
for (hand, hand_ent) in hands {
// debug!("{hand:?}");
let (player, _) = players.iter().find(|(_, c)| c.contains(&hand_ent)).unwrap();
let (player, player_ent, _) = players
.iter()
.find(|(_, e, c)| c.contains(&hand_ent))
.unwrap();
let hand: Vec<_> = hand
.iter()
.map(|entity| -> Result<_> {
@ -128,7 +132,8 @@ pub(crate) fn render_hands(
if player == main_player.0 {
// split main box into thirds
let mut this_hand = layouts.this_hand;
let this_drawer = drawn_tile.as_ref().is_some_and(|dt| dt.0 == player);
// let this_drawer = drawn_tile..is_some_and(|dt| dt.0 == player);
let this_drawer = player_ent == *curr_player;
let tile_drawn = if this_drawer { 7 } else { 0 };
let hand_draw_meld = Layout::horizontal([
Constraint::Max(hand.len() as u16 * 5),
@ -170,23 +175,23 @@ pub(crate) fn render_hands(
// tsumo tile
if this_drawer {
let (_, entity) = **drawn_tile.as_ref().unwrap();
// trace!("this_drawer");
let mut area = drawn_area.resize(Size {
width: 5,
height: 4,
});
area = area.offset(Offset { x: 2, y: 0 });
let hovered = hovered.contains(entity);
let widget = render_tile(tiles.get(entity)?, hovered);
let hovered = hovered.contains(*drawn_tile);
let widget = render_tile(tiles.get(*drawn_tile)?, hovered);
if hovered {
area = area.offset(Offset { x: 0, y: -1 });
let mut hitbox = area.as_size();
hitbox.height += 1;
commands.entity(entity).insert(PickRegion {
commands.entity(*drawn_tile).insert(PickRegion {
area: area.resize(hitbox),
});
} else {
commands.entity(entity).insert(PickRegion { area });
commands.entity(*drawn_tile).insert(PickRegion { area });
}
frame.render_widget(widget, area);
}