view_hand to bevy hand children logic
This commit is contained in:
parent
47735931b4
commit
6f3d27a6f6
1 changed files with 49 additions and 27 deletions
|
|
@ -9,7 +9,8 @@ use spacetimedb::Identity;
|
|||
use spacetimedb_sdk::{DbContext, Table, credentials};
|
||||
|
||||
use crate::{
|
||||
SpacetimeDB, creds_store, game,
|
||||
SpacetimeDB, creds_store,
|
||||
game::{self, player::Player},
|
||||
stdb::{
|
||||
self, DbConnection, HandTableAccess, LobbyTableAccess, PlayerTableAccess, RemoteTables,
|
||||
ViewPlayerHandTableAccess, add_bot, join_or_create_lobby, login_or_add_player,
|
||||
|
|
@ -85,22 +86,10 @@ impl Plugin for Riichi {
|
|||
.add_systems(Update, on_lobby_insert_update)
|
||||
.add_systems(OnEnter(GameState::Setup), join_or_create_lobby)
|
||||
.add_systems(Update, view_hand.run_if(in_state(GameState::Play)))
|
||||
.add_systems(Update, (view_hand).run_if(in_state(GameState::Play)))
|
||||
// semicolon stopper
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
fn view_hand(
|
||||
stdb: SpacetimeDB,
|
||||
mut commands: Commands,
|
||||
// hand: Populated<&mut Children, With<Hand>>,
|
||||
) {
|
||||
if let Some(view) = stdb.db().view_player_hand().iter().next() {
|
||||
// hand.get_mut(entity)
|
||||
}
|
||||
}
|
||||
|
||||
fn on_connect(stdb: SpacetimeDB, mut messages: ReadStdbConnectedMessage, mut commands: Commands) {
|
||||
for msg in messages.read() {
|
||||
info!("you're now jongline");
|
||||
|
|
@ -138,9 +127,26 @@ fn on_player_insert_update(
|
|||
mut messages: ReadInsertUpdateMessage<stdb::Player>,
|
||||
|
||||
mut commands: Commands,
|
||||
mut player: Option<Single<&mut player::Player>>,
|
||||
) {
|
||||
use player::*;
|
||||
|
||||
for msg in messages.read() {
|
||||
debug!("player_insert_update msg:\n{:#?}", msg.new);
|
||||
if let Some(ref player) = player {
|
||||
// player.as_mut() = msg.new
|
||||
} else {
|
||||
let player = Player {
|
||||
name: msg
|
||||
.new
|
||||
.name
|
||||
.as_ref()
|
||||
.unwrap_or(&"nameless".to_string())
|
||||
.clone(),
|
||||
};
|
||||
let bundle = (player, Hand, Pond, MainPlayer, CurrentPlayer);
|
||||
commands.spawn(bundle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -198,20 +204,6 @@ fn on_lobby_insert_update(
|
|||
}
|
||||
stdb::GameState::Play => {
|
||||
trace!("game entered play");
|
||||
|
||||
// TODO this should run once to spawn the hand? or do elsewhere
|
||||
if let Some(hand) = stdb.db().view_player_hand().iter().next() {
|
||||
debug!("hand: {hand:?}");
|
||||
let tiles = hand
|
||||
.tiles
|
||||
.iter()
|
||||
.map(Into::into)
|
||||
.map(|t: Tile| commands.spawn(t).id())
|
||||
.collect::<Vec<_>>();
|
||||
commands.spawn(Hand).add_children(&tiles);
|
||||
} else {
|
||||
error!("entered play without a hand")
|
||||
}
|
||||
}
|
||||
stdb::GameState::Exit => {
|
||||
trace!("game enetered exit");
|
||||
|
|
@ -219,3 +211,33 @@ fn on_lobby_insert_update(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn view_hand(
|
||||
stdb: SpacetimeDB,
|
||||
|
||||
mut commands: Commands,
|
||||
tiles: Query<(&Tile, Entity)>,
|
||||
hand_ent: Single<Entity, With<Hand>>,
|
||||
) {
|
||||
trace!("view_hand");
|
||||
if let Some(view) = stdb.db().view_player_hand().iter().next() {
|
||||
debug!("view_hand: {view:?}");
|
||||
|
||||
let mut view = view.tiles.iter().map(Tile::from).collect::<Vec<_>>();
|
||||
|
||||
let tiles = tiles
|
||||
.iter()
|
||||
.filter(|(tt, _)| {
|
||||
if let Some((i, _)) = view.iter().enumerate().find(|(_, t)| t == tt) {
|
||||
view.swap_remove(i);
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
})
|
||||
.map(|(_, e)| e)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
commands.entity(*hand_ent).replace_children(&tiles);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue