discarding proper now
This commit is contained in:
parent
c3686221aa
commit
875c3fb5bb
7 changed files with 45 additions and 40 deletions
|
|
@ -101,29 +101,33 @@ fn on_player_insert_update(
|
|||
mut messages: ReadInsertUpdateMessage<jong_db::Player>,
|
||||
mut commands: Commands,
|
||||
|
||||
player: Option<Single<Entity, With<MainPlayer>>>,
|
||||
hand: Option<Single<Entity, With<Hand>>>,
|
||||
tiles: Query<(Entity, &TileId)>,
|
||||
) {
|
||||
let hand = if player.is_none() && hand.is_none() {
|
||||
let hand = if hand.is_none() {
|
||||
let hand = commands.spawn(Hand).id();
|
||||
commands.spawn((Player, MainPlayer)).add_child(hand);
|
||||
hand
|
||||
} else {
|
||||
*hand.unwrap()
|
||||
};
|
||||
|
||||
for msg in messages.read() {
|
||||
let tiles: Vec<_> = msg
|
||||
let hand_tiles: Vec<_> = msg
|
||||
.new
|
||||
.hand
|
||||
.iter()
|
||||
.map(|dbt| {
|
||||
// drawn tiles will always be new entities to us, until wall isn't fake
|
||||
commands.spawn((Tile::from(&dbt.tile), TileId(dbt.id))).id()
|
||||
tiles
|
||||
.iter()
|
||||
.find_map(|(e, t)| if *t == TileId(dbt.id) { Some(e) } else { None })
|
||||
.or_else(|| Some(commands.spawn((Tile::from(&dbt.tile), TileId(dbt.id))).id()))
|
||||
.unwrap()
|
||||
})
|
||||
.collect();
|
||||
|
||||
commands.entity(hand).replace_children(&tiles);
|
||||
debug!("hand_tiles: {hand_tiles:?}");
|
||||
|
||||
commands.entity(hand).replace_children(&hand_tiles);
|
||||
|
||||
if let Some(dbt) = &msg.new.drawn_tile {
|
||||
commands.spawn((Tile::from(&dbt.tile), TileId(dbt.id), Drawn));
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ pub struct MainPlayer;
|
|||
#[derive(Component)]
|
||||
pub struct CurrentPlayer;
|
||||
|
||||
#[derive(Component)]
|
||||
#[derive(Component, PartialEq, Eq)]
|
||||
pub struct TileId(pub u32);
|
||||
|
||||
#[derive(Component)]
|
||||
|
|
|
|||
|
|
@ -101,20 +101,9 @@ fn discard_tile(
|
|||
|
||||
mut commands: Commands,
|
||||
drawn: Single<(Entity, &TileId), With<Drawn>>,
|
||||
// curr_player: Single<Entity, With<CurrentPlayer>>,
|
||||
// player_hands: Populated<(&Player, &Children), With<Hand>>,
|
||||
// hands: Populated<&Children, (With<Hand>, Without<Player>)>,
|
||||
main_player: Single<(&Player, Entity), With<MainPlayer>>,
|
||||
hands: Query<(&Children, Entity), With<Hand>>,
|
||||
tiles: Query<&TileId>,
|
||||
) {
|
||||
// trace!("discard_tile");
|
||||
|
||||
let (hand, hand_ent) = hands.iter().next().unwrap();
|
||||
|
||||
while let Some(message) = selected.read().next()
|
||||
// && (message.0 == drawn.0 || hand.contains(&message.0))
|
||||
{
|
||||
while let Some(message) = selected.read().next() {
|
||||
if let Ok(tile_id) = tiles.get(message.0) {
|
||||
stdb.reducers().discard_tile(tile_id.0).unwrap();
|
||||
commands.get_entity(drawn.0).unwrap().despawn();
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ pub(crate) fn render_hand(
|
|||
layouts: Res<HandLayouts>,
|
||||
|
||||
tiles: Query<&jong_types::Tile>,
|
||||
main_player: Single<(&Player, Entity /* , &Wind */), With<MainPlayer>>,
|
||||
// main_player: Single<(&Player, Entity /* , &Wind */), With<MainPlayer>>,
|
||||
hand: Single<(&Children, Entity), With<Hand>>,
|
||||
drawn_tile: Option<Single<Entity, With<Drawn>>>,
|
||||
) -> Result {
|
||||
|
|
@ -124,7 +124,7 @@ pub(crate) fn render_hand(
|
|||
})
|
||||
.collect::<Result<_>>()?;
|
||||
|
||||
let (player, player_ent) = *main_player;
|
||||
// let (player, player_ent) = *main_player;
|
||||
// split main box into thirds
|
||||
let mut this_hand = layouts.this_hand;
|
||||
let tile_drawn = if drawn_tile.is_some() { 7 } else { 0 };
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue