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_ratatui = "0.10.0"
|
||||||
bevy_spacetimedb = "0.7"
|
bevy_spacetimedb = "0.7"
|
||||||
|
|
||||||
spacetimedb = "1.11.*"
|
spacetimedb.version = "1.11.*"
|
||||||
|
spacetimedb.features = ["unstable"]
|
||||||
|
|
||||||
spacetimedb-sdk = "1.11.*"
|
spacetimedb-sdk = "1.11.*"
|
||||||
|
|
||||||
strum.version = "0.27.2"
|
strum.version = "0.27.2"
|
||||||
|
|
|
||||||
|
|
@ -45,11 +45,15 @@ impl Plugin for Riichi {
|
||||||
.with_uri("http://localhost:3000")
|
.with_uri("http://localhost:3000")
|
||||||
.with_module_name("jongline")
|
.with_module_name("jongline")
|
||||||
.with_run_fn(DbConnection::run_threaded)
|
.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?
|
// TODO do these need to be subscription & vice-versa?
|
||||||
.add_table(RemoteTables::player)
|
.add_table(RemoteTables::player)
|
||||||
.add_table(RemoteTables::lobby)
|
.add_table(RemoteTables::lobby)
|
||||||
|
|
||||||
|
// TODO until views work, we're using RLS
|
||||||
.add_table(RemoteTables::hand)
|
.add_table(RemoteTables::hand)
|
||||||
|
// .add_table_without_pk(RemoteTables::view_player_hand)
|
||||||
|
|
||||||
// semicolon stopper
|
// semicolon stopper
|
||||||
;
|
;
|
||||||
|
|
@ -83,7 +87,11 @@ impl Plugin for Riichi {
|
||||||
.add_systems(Update, on_player_insert_update)
|
.add_systems(Update, on_player_insert_update)
|
||||||
.add_systems(Update, on_lobby_insert_update)
|
.add_systems(Update, on_lobby_insert_update)
|
||||||
// .add_systems(OnEnter(GameState::Lobby), join_or_create_lobby)
|
// .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
|
// semicolon stopper
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +123,8 @@ fn subscriptions(stdb: SpacetimeDB) {
|
||||||
stdb.identity()
|
stdb.identity()
|
||||||
),
|
),
|
||||||
"SELECT l.* FROM lobby l JOIN player p ON l.host_player_id = p.id".to_string(),
|
"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();
|
// .subscribe_to_all_tables();
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +139,7 @@ fn on_player_insert_update(
|
||||||
use 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 {
|
if let Some(ref player) = player {
|
||||||
// if msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready {
|
// if msg.old.as_ref().is_some_and(|m| !m.ready) && msg.new.ready {
|
||||||
// trace!("entered 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(
|
fn on_lobby_insert_update(
|
||||||
stdb: SpacetimeDB,
|
stdb: SpacetimeDB,
|
||||||
mut messages: ReadInsertUpdateMessage<stdb::Lobby>,
|
mut messages: ReadInsertUpdateMessage<stdb::Lobby>,
|
||||||
|
|
@ -175,7 +169,7 @@ fn on_lobby_insert_update(
|
||||||
mut next_gamestate: ResMut<NextState<GameState>>,
|
mut next_gamestate: ResMut<NextState<GameState>>,
|
||||||
) {
|
) {
|
||||||
for msg in messages.read() {
|
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
|
let player = stdb
|
||||||
.db()
|
.db()
|
||||||
|
|
@ -218,19 +212,17 @@ fn on_lobby_insert_update(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn view_hand(
|
fn on_hand_insert_update(
|
||||||
stdb: SpacetimeDB,
|
stdb: SpacetimeDB,
|
||||||
|
mut messages: ReadInsertUpdateMessage<stdb::Hand>,
|
||||||
|
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
tiles: Query<(&Tile, Entity)>,
|
tiles: Query<(&Tile, Entity)>,
|
||||||
hand_ent: Single<Entity, With<Hand>>,
|
hand_ent: Single<Entity, With<Hand>>,
|
||||||
) {
|
) {
|
||||||
// trace!("view_hand");
|
for msg in messages.read() {
|
||||||
if let Some(view) = stdb.db().view_player_hand().iter().next() {
|
trace!("view_hand");
|
||||||
let mut view = view.tiles.iter().map(Tile::from).collect::<Vec<_>>();
|
let mut view: Vec<_> = msg.new.tiles.iter().map(Tile::from).collect();
|
||||||
// view.sort();
|
|
||||||
debug!("view: {view:?}");
|
|
||||||
|
|
||||||
let tiles = tiles
|
let tiles = tiles
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|(tt, _)| {
|
.filter(|(tt, _)| {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use spacetimedb::{Identity, SpacetimeType, table};
|
use spacetimedb::{Filter, Identity, SpacetimeType, client_visibility_filter, table};
|
||||||
|
|
||||||
use jong_types::*;
|
use jong_types::*;
|
||||||
|
|
||||||
|
|
@ -63,7 +63,15 @@ pub struct Wall {
|
||||||
pub tiles: Vec<Tile>,
|
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 {
|
pub struct Hand {
|
||||||
#[primary_key]
|
#[primary_key]
|
||||||
#[auto_inc]
|
#[auto_inc]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue