tiles are now in hand

This commit is contained in:
Tao Tien 2026-02-12 17:24:51 -08:00
parent a1c72b2c48
commit b9c653f3a2

View file

@ -66,7 +66,7 @@ impl Plugin for Riichi {
// .init_resource::<round::MatchSettings>() // .init_resource::<round::MatchSettings>()
// .init_resource::<round::Compass>() // .init_resource::<round::Compass>()
.add_message::<GameMessage>() .add_message::<GameMessage>()
.add_systems(Startup, tile::init_tiles) // .add_systems(Startup, tile::init_tiles)
// .add_systems(Update, hand::sort_hands.run_if(in_state(GameState::Play))) // .add_systems(Update, hand::sort_hands.run_if(in_state(GameState::Play)))
// .add_systems(OnEnter(TurnState::Tsumo), round::tsumo) // .add_systems(OnEnter(TurnState::Tsumo), round::tsumo)
// .add_systems(OnEnter(TurnState::Menzen), round::menzen) // .add_systems(OnEnter(TurnState::Menzen), round::menzen)
@ -118,13 +118,16 @@ fn subscriptions(stdb: SpacetimeDB) {
// .subscribe_to_all_tables(); // .subscribe_to_all_tables();
} }
#[derive(Component)]
struct TileId(u32);
fn on_player_insert_update( fn on_player_insert_update(
stdb: SpacetimeDB, stdb: SpacetimeDB,
mut messages: ReadInsertUpdateMessage<stdb::Player>, mut messages: ReadInsertUpdateMessage<stdb::Player>,
mut commands: Commands, mut commands: Commands,
tiles: Query<(&Tile, Entity)>, tiles: Query<(&Tile, &TileId, Entity)>,
mut player: Option<Single<&mut player::Player>>, mut player: Option<Single<&mut player::Player>>,
mut hand_ent: Option<Single<Entity, With<Hand>>>, mut hand_ent: Option<Single<Entity, With<Hand>>>,
) { ) {
@ -132,34 +135,29 @@ fn on_player_insert_update(
for msg in messages.read() { for msg in messages.read() {
debug!("player_insert_update msg:\n{:#?}", msg.new); debug!("player_insert_update msg:\n{:#?}", msg.new);
if let Some(ref player) = player { if let (Some(player), Some(hand_ent)) = (player.as_ref(), hand_ent.as_ref()) {
// if msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready { // if msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready {
// trace!("entered ready"); // trace!("entered ready");
// // TODO add a start game button in the future // // TODO add a start game button in the future
// stdb.reducers().start_game().unwrap(); // stdb.reducers().start_game().unwrap();
// } // }
let mut view: Vec<_> = msg.new.hand.iter().map(Tile::from).collect(); let mut tiles: Vec<_> = msg
// let mut tiles = tiles .new
// .iter() .hand
// .filter(|(tt, _)| { .iter()
// if let Some((i, _)) = view.iter().enumerate().find(|(_, t)| t == tt) { .map(|dbt| {
// view.swap_remove(i); if let Some(ent) = tiles
// true .iter()
// } else { .find(|(_, id, _)| id.0 == dbt.id)
// false .map(|(_, _, e)| e)
// } {
// }) ent
// // .map(|(t, e)| e) } else {
// .collect::<Vec<_>>(); commands.spawn((Tile::from(&dbt.tile), TileId(dbt.id))).id()
// tiles.sort_by_key(|(t, e)| **t); }
// tiles.get_many(entities) })
.collect();
commands.entity(**hand_ent).replace_children(&tiles);
let tiles = tiles.into_iter().map(|(_, e)| e).collect::<Vec<_>>();
commands
.entity(**hand_ent.as_ref().unwrap())
.replace_children(&tiles);
} else { } else {
let player = Player { let player = Player {
name: msg name: msg