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 spacetimedb_sdk::{DbContext, Table, credentials};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
SpacetimeDB, creds_store, game,
|
SpacetimeDB, creds_store,
|
||||||
|
game::{self, player::Player},
|
||||||
stdb::{
|
stdb::{
|
||||||
self, DbConnection, HandTableAccess, LobbyTableAccess, PlayerTableAccess, RemoteTables,
|
self, DbConnection, HandTableAccess, LobbyTableAccess, PlayerTableAccess, RemoteTables,
|
||||||
ViewPlayerHandTableAccess, add_bot, join_or_create_lobby, login_or_add_player,
|
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(Update, on_lobby_insert_update)
|
||||||
.add_systems(OnEnter(GameState::Setup), join_or_create_lobby)
|
.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)))
|
||||||
.add_systems(Update, (view_hand).run_if(in_state(GameState::Play)))
|
|
||||||
// semicolon stopper
|
// 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) {
|
fn on_connect(stdb: SpacetimeDB, mut messages: ReadStdbConnectedMessage, mut commands: Commands) {
|
||||||
for msg in messages.read() {
|
for msg in messages.read() {
|
||||||
info!("you're now jongline");
|
info!("you're now jongline");
|
||||||
|
|
@ -138,9 +127,26 @@ fn on_player_insert_update(
|
||||||
mut messages: ReadInsertUpdateMessage<stdb::Player>,
|
mut messages: ReadInsertUpdateMessage<stdb::Player>,
|
||||||
|
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
|
mut player: Option<Single<&mut player::Player>>,
|
||||||
) {
|
) {
|
||||||
|
use player::*;
|
||||||
|
|
||||||
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 {
|
||||||
|
// 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 => {
|
stdb::GameState::Play => {
|
||||||
trace!("game entered 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 => {
|
stdb::GameState::Exit => {
|
||||||
trace!("game enetered 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