use deprecated RLS until views work in bevy_stdb
This commit is contained in:
parent
f6bd7fd6f7
commit
7cef787f38
4 changed files with 32 additions and 29 deletions
1
.ignore
Normal file
1
.ignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
jong/src/stdb
|
||||
|
|
@ -12,7 +12,9 @@ bevy.default-features = false
|
|||
bevy_ratatui = "0.10.0"
|
||||
bevy_spacetimedb = "0.7"
|
||||
|
||||
spacetimedb = "1.11.*"
|
||||
spacetimedb.version = "1.11.*"
|
||||
spacetimedb.features = ["unstable"]
|
||||
|
||||
spacetimedb-sdk = "1.11.*"
|
||||
|
||||
strum.version = "0.27.2"
|
||||
|
|
|
|||
|
|
@ -45,11 +45,15 @@ impl Plugin for Riichi {
|
|||
.with_uri("http://localhost:3000")
|
||||
.with_module_name("jongline")
|
||||
.with_run_fn(DbConnection::run_threaded)
|
||||
// TODO why don't I need to call add_reducer?
|
||||
|
||||
// TODO do these need to be subscription & vice-versa?
|
||||
.add_table(RemoteTables::player)
|
||||
.add_table(RemoteTables::lobby)
|
||||
|
||||
// TODO until views work, we're using RLS
|
||||
.add_table(RemoteTables::hand)
|
||||
// .add_table_without_pk(RemoteTables::view_player_hand)
|
||||
|
||||
// semicolon stopper
|
||||
;
|
||||
|
|
@ -83,7 +87,11 @@ impl Plugin for Riichi {
|
|||
.add_systems(Update, on_player_insert_update)
|
||||
.add_systems(Update, on_lobby_insert_update)
|
||||
// .add_systems(OnEnter(GameState::Lobby), join_or_create_lobby)
|
||||
.add_systems(Update, view_hand.run_if(in_state(GameState::Play)))
|
||||
|
||||
// TODO figure out how to run_if OR run_if?
|
||||
.add_systems(Update, on_hand_insert_update.run_if(in_state(GameState::Deal)))
|
||||
.add_systems(Update, on_hand_insert_update.run_if(in_state(GameState::Play)))
|
||||
|
||||
// semicolon stopper
|
||||
;
|
||||
}
|
||||
|
|
@ -115,7 +123,8 @@ fn subscriptions(stdb: SpacetimeDB) {
|
|||
stdb.identity()
|
||||
),
|
||||
"SELECT l.* FROM lobby l JOIN player p ON l.host_player_id = p.id".to_string(),
|
||||
"SELECT * FROM view_player_hand vph".to_string(),
|
||||
// "SELECT * FROM view_player_hand vph".to_string(),
|
||||
"SELECT * FROM hand".to_string(), // TODO remove once views work
|
||||
]);
|
||||
// .subscribe_to_all_tables();
|
||||
}
|
||||
|
|
@ -130,7 +139,7 @@ fn on_player_insert_update(
|
|||
use player::*;
|
||||
|
||||
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 msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready {
|
||||
// trace!("entered ready");
|
||||
|
|
@ -152,21 +161,6 @@ fn on_player_insert_update(
|
|||
}
|
||||
}
|
||||
|
||||
// fn join_or_create_lobby(stdb: SpacetimeDB) {
|
||||
// let player = stdb
|
||||
// .db()
|
||||
// .player()
|
||||
// .identity()
|
||||
// .find(&stdb.identity())
|
||||
// .unwrap();
|
||||
|
||||
// if player.lobby_id == 0 {
|
||||
// stdb.reducers().join_or_create_lobby(0).unwrap();
|
||||
// } else {
|
||||
// info!("in lobby: {}", player.lobby_id)
|
||||
// }
|
||||
// }
|
||||
|
||||
fn on_lobby_insert_update(
|
||||
stdb: SpacetimeDB,
|
||||
mut messages: ReadInsertUpdateMessage<stdb::Lobby>,
|
||||
|
|
@ -175,7 +169,7 @@ fn on_lobby_insert_update(
|
|||
mut next_gamestate: ResMut<NextState<GameState>>,
|
||||
) {
|
||||
for msg in messages.read() {
|
||||
trace!("on_lobby_insert_update msg:\n{:#?}", msg.new);
|
||||
// trace!("on_lobby_insert_update msg:\n{:#?}", msg.new);
|
||||
|
||||
let player = stdb
|
||||
.db()
|
||||
|
|
@ -218,19 +212,17 @@ fn on_lobby_insert_update(
|
|||
}
|
||||
}
|
||||
|
||||
fn view_hand(
|
||||
fn on_hand_insert_update(
|
||||
stdb: SpacetimeDB,
|
||||
mut messages: ReadInsertUpdateMessage<stdb::Hand>,
|
||||
|
||||
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() {
|
||||
let mut view = view.tiles.iter().map(Tile::from).collect::<Vec<_>>();
|
||||
// view.sort();
|
||||
debug!("view: {view:?}");
|
||||
|
||||
for msg in messages.read() {
|
||||
trace!("view_hand");
|
||||
let mut view: Vec<_> = msg.new.tiles.iter().map(Tile::from).collect();
|
||||
let tiles = tiles
|
||||
.iter()
|
||||
.filter(|(tt, _)| {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use spacetimedb::{Identity, SpacetimeType, table};
|
||||
use spacetimedb::{Filter, Identity, SpacetimeType, client_visibility_filter, table};
|
||||
|
||||
use jong_types::*;
|
||||
|
||||
|
|
@ -63,7 +63,15 @@ pub struct Wall {
|
|||
pub tiles: Vec<Tile>,
|
||||
}
|
||||
|
||||
#[table(name = hand)]
|
||||
// TODO temp use deprecated RLS instead of view until bevy_spacetimedb supp is better
|
||||
#[client_visibility_filter]
|
||||
const HAND_FILTER: Filter = Filter::Sql(
|
||||
"SELECT h.* FROM hand h
|
||||
JOIN player p ON h.id = p.hand_id
|
||||
WHERE p.identity = :sender",
|
||||
);
|
||||
|
||||
#[table(name = hand, public)]
|
||||
pub struct Hand {
|
||||
#[primary_key]
|
||||
#[auto_inc]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue