diff --git a/jong/src/tui.rs b/jong/src/tui.rs index 88090c2..1db3695 100644 --- a/jong/src/tui.rs +++ b/jong/src/tui.rs @@ -72,7 +72,6 @@ impl Plugin for TuiPlugin { open: true, }) .init_state::() - .add_message::() .configure_sets( Update, (TuiSet::Input, TuiSet::Layout, TuiSet::Render).chain(), @@ -92,28 +91,28 @@ impl Plugin for TuiPlugin { .chain() .in_set(TuiSet::Render), ) - .add_systems(Update, discard_tile.run_if(in_state(TurnState::Tsumo))); + // .add_systems(Update, discard_tile.run_if(in_state(TurnState::Tsumo))); + .add_observer(discard_tile) // TODO check run_if here feature is out + ; } } fn discard_tile( + selected: On, + stdb: SpacetimeDB, mut commands: Commands, - mut selected: MessageReader, // main_player: Single<&Children, With>, // only main player will have a Drawn tile? drawn: Single<(Entity, &TileId), With>, tiles: Query<&TileId>, ) { - // FIXME why is this not consuming the messages? or is it just getting updated too frequently? // TODO disable this when we're not current player? - while let Some(message) = selected.read().next() { - trace!("{message:?}"); - if let Ok(tile_id) = tiles.get(message.0) { - stdb.reducers().discard_tile(tile_id.0).unwrap(); - stdb.reducers().advance_game().unwrap(); - commands.entity(drawn.0).remove::(); - } + if let Ok(tile_id) = tiles.get(selected.0) { + trace!("{:?}, {tile_id:?}", selected.0); + stdb.reducers().discard_tile(tile_id.0).unwrap(); + stdb.reducers().advance_game().unwrap(); + commands.entity(drawn.0).remove::(); } } diff --git a/jong/src/tui/input.rs b/jong/src/tui/input.rs index 9ef831d..94a0b2a 100644 --- a/jong/src/tui/input.rs +++ b/jong/src/tui/input.rs @@ -12,5 +12,5 @@ pub(crate) struct Hovered; #[derive(Component)] pub(crate) struct StartSelect; -#[derive(Message, Debug)] +#[derive(Event, Debug)] pub(crate) struct ConfirmSelect(pub(crate) Entity); diff --git a/jong/src/tui/input/mouse.rs b/jong/src/tui/input/mouse.rs index c828eec..984b2ce 100644 --- a/jong/src/tui/input/mouse.rs +++ b/jong/src/tui/input/mouse.rs @@ -11,7 +11,6 @@ use crate::tui::{ pub(crate) fn mouse( mut commands: Commands, mut mouse_reader: MessageReader, - mut event_writer: MessageWriter, entities: Query<(Entity, &PickRegion)>, hovered: Query<(Entity, &PickRegion), With>, startselected: Query<(Entity, &PickRegion), With>, @@ -52,7 +51,7 @@ pub(crate) fn mouse( for (entity, region) in &startselected { if region.area.contains(position) { commands.entity(entity).remove::(); - event_writer.write(ConfirmSelect(entity)); + commands.trigger(ConfirmSelect(entity)); } } }