2026-01-11 22:32:30 -08:00
|
|
|
use bevy::prelude::*;
|
|
|
|
|
use ratatui::widgets::Paragraph;
|
|
|
|
|
|
2026-01-12 01:54:59 -08:00
|
|
|
use jong::game::hand::HandTiles;
|
2026-01-11 22:32:30 -08:00
|
|
|
use jong::tiles::Tile;
|
|
|
|
|
|
|
|
|
|
use crate::tui::render::tiles;
|
|
|
|
|
|
2026-01-12 01:54:59 -08:00
|
|
|
#[derive(Resource, Default)]
|
|
|
|
|
pub(crate) struct RenderedHand(pub(crate) Vec<Paragraph<'static>>);
|
2026-01-11 22:32:30 -08:00
|
|
|
|
|
|
|
|
pub(crate) fn render_changed_hand(
|
|
|
|
|
hand: Single<&HandTiles, Changed<HandTiles>>,
|
2026-01-12 01:54:59 -08:00
|
|
|
tiles: Populated<&Tile>,
|
|
|
|
|
mut target: ResMut<RenderedHand>,
|
2026-01-11 22:32:30 -08:00
|
|
|
) -> Result {
|
2026-01-12 21:07:34 -08:00
|
|
|
let mut rendered = vec![];
|
|
|
|
|
|
|
|
|
|
for hand in hands {
|
|
|
|
|
let hand_tiles = hand
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|inhand| -> Result<_> { Ok(tiles.get(inhand).map(tiles::draw_tile)?) })
|
|
|
|
|
.collect::<Result<Vec<_>>>()?;
|
|
|
|
|
rendered.push(hand_tiles);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
target.0 = rendered;
|
|
|
|
|
|
2026-01-12 01:54:59 -08:00
|
|
|
trace!("render_changed_hand");
|
|
|
|
|
|
|
|
|
|
render_hand(hand, tiles, target)?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub(crate) fn render_hand(
|
|
|
|
|
hand: Single<&HandTiles, Changed<HandTiles>>,
|
|
|
|
|
tiles: Populated<&Tile>,
|
|
|
|
|
mut target: ResMut<RenderedHand>,
|
|
|
|
|
) -> Result {
|
|
|
|
|
trace!("render_hand");
|
|
|
|
|
|
2026-01-11 22:32:30 -08:00
|
|
|
let hand_tiles = hand
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|inhand| -> Result<_> { Ok(tiles.get(inhand).map(tiles::draw_tile)?) })
|
|
|
|
|
.collect::<Result<Vec<_>>>()?;
|
|
|
|
|
target.0 = hand_tiles;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|