From 1e6a3ca84b9039ce22b7dc3a4d49b196e0af55bb Mon Sep 17 00:00:00 2001 From: Tao Tien <29749622+taotien@users.noreply.github.com> Date: Tue, 10 Feb 2026 01:40:13 -0800 Subject: [PATCH] turn_state logic --- jong-types/src/lib.rs | 23 ++++++++++++++++++++++- jong/src/game.rs | 4 ++-- jong/src/game/round.rs | 13 +------------ jong/src/stdb/lobby_table.rs | 1 + jong/src/stdb/lobby_type.rs | 2 ++ jong/src/stdb/mod.rs | 2 ++ jong/src/stdb/turn_state_type.rs | 28 ++++++++++++++++++++++++++++ spacetimedb/src/game.rs | 1 + spacetimedb/src/game/wall.rs | 2 +- spacetimedb/src/tables.rs | 1 + 10 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 jong/src/stdb/turn_state_type.rs diff --git a/jong-types/src/lib.rs b/jong-types/src/lib.rs index bc2c1b4..dadb0b0 100644 --- a/jong-types/src/lib.rs +++ b/jong-types/src/lib.rs @@ -11,7 +11,7 @@ use derive_aliases::derive; use bevy::prelude::*; use spacetimedb::SpacetimeType; -use strum::FromRepr; +use strum::{EnumCount, FromRepr}; #[derive(..Base, Hash, Default)] #[derive(States, SpacetimeType)] @@ -112,3 +112,24 @@ pub fn tiles() -> Vec { } tiles } + +#[derive( + Default, + ..Copy, + PartialEq, + Eq, + Hash, + Debug, +)] +#[derive(SubStates, FromRepr, EnumCount, SpacetimeType)] +#[source(GameState = GameState::Play)] +pub enum TurnState { + #[default] + None, + Tsumo, + Menzen, + RiichiKan, + Discard, + RonChiiPonKan, + End, +} diff --git a/jong/src/game.rs b/jong/src/game.rs index e72112c..d84c597 100644 --- a/jong/src/game.rs +++ b/jong/src/game.rs @@ -21,7 +21,7 @@ use crate::{ game::{ hand::{Hand, Pond}, player::{CurrentPlayer, MainPlayer}, - round::{TurnState, Wind}, + round::Wind, wall::Wall, }, tile::{self}, @@ -65,7 +65,7 @@ impl Plugin for Riichi { app.add_plugins(plugins) .init_state::() - // .add_sub_state::() + .add_sub_state::() // .init_resource::() // .init_resource::() .add_message::() diff --git a/jong/src/game/round.rs b/jong/src/game/round.rs index 9a76ac1..9953c57 100644 --- a/jong/src/game/round.rs +++ b/jong/src/game/round.rs @@ -12,6 +12,7 @@ use crate::{ wall::Wall, }, }; +use jong_types::TurnState; // #[derive(Resource)] // pub struct CurrentPlayer(pub Entity); @@ -48,18 +49,6 @@ pub enum WindRelation { Kamicha, } -#[derive(SubStates, Default, Clone, Copy, PartialEq, Eq, Hash, Debug, FromRepr, EnumCount)] -#[source(GameState = GameState::Play)] -pub(crate) enum TurnState { - #[default] - Tsumo, - Menzen, - RiichiKan, - Discard, - RonChiiPonKan, - End, -} - #[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] pub(crate) enum CallType { Skip, diff --git a/jong/src/stdb/lobby_table.rs b/jong/src/stdb/lobby_table.rs index ab1d881..98b9f62 100644 --- a/jong/src/stdb/lobby_table.rs +++ b/jong/src/stdb/lobby_table.rs @@ -5,6 +5,7 @@ use super::game_state_type::GameState; use super::lobby_type::Lobby; use super::player_or_bot_type::PlayerOrBot; +use super::turn_state_type::TurnState; use spacetimedb_sdk::__codegen::{self as __sdk, __lib, __sats, __ws}; /// Table handle for the table `lobby`. diff --git a/jong/src/stdb/lobby_type.rs b/jong/src/stdb/lobby_type.rs index 110a274..ce82250 100644 --- a/jong/src/stdb/lobby_type.rs +++ b/jong/src/stdb/lobby_type.rs @@ -6,6 +6,7 @@ use spacetimedb_sdk::__codegen::{self as __sdk, __lib, __sats, __ws}; use super::game_state_type::GameState; use super::player_or_bot_type::PlayerOrBot; +use super::turn_state_type::TurnState; #[derive(__lib::ser::Serialize, __lib::de::Deserialize, Clone, PartialEq, Debug)] #[sats(crate = __lib)] @@ -14,6 +15,7 @@ pub struct Lobby { pub host_player_id: u32, pub players: Vec, pub game_state: GameState, + pub turn_state: TurnState, } impl __sdk::InModule for Lobby { diff --git a/jong/src/stdb/mod.rs b/jong/src/stdb/mod.rs index 6c87060..d46c734 100644 --- a/jong/src/stdb/mod.rs +++ b/jong/src/stdb/mod.rs @@ -26,6 +26,7 @@ pub mod rank_type; pub mod shuffle_deal_reducer; pub mod suit_type; pub mod tile_type; +pub mod turn_state_type; pub mod view_player_hand_table; pub mod wall_table; pub mod wall_type; @@ -55,6 +56,7 @@ pub use rank_type::Rank; pub use shuffle_deal_reducer::{set_flags_for_shuffle_deal, shuffle_deal, ShuffleDealCallbackId}; pub use suit_type::Suit; pub use tile_type::Tile; +pub use turn_state_type::TurnState; pub use view_player_hand_table::*; pub use wall_table::*; pub use wall_type::Wall; diff --git a/jong/src/stdb/turn_state_type.rs b/jong/src/stdb/turn_state_type.rs new file mode 100644 index 0000000..1bbd7d5 --- /dev/null +++ b/jong/src/stdb/turn_state_type.rs @@ -0,0 +1,28 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#![allow(unused, clippy::all)] +use spacetimedb_sdk::__codegen::{self as __sdk, __lib, __sats, __ws}; + +#[derive(__lib::ser::Serialize, __lib::de::Deserialize, Clone, PartialEq, Debug)] +#[sats(crate = __lib)] +#[derive(Copy, Eq, Hash)] +pub enum TurnState { + None, + + Tsumo, + + Menzen, + + RiichiKan, + + Discard, + + RonChiiPonKan, + + End, +} + +impl __sdk::InModule for TurnState { + type Module = super::RemoteModule; +} diff --git a/spacetimedb/src/game.rs b/spacetimedb/src/game.rs index 1266e64..b122bcf 100644 --- a/spacetimedb/src/game.rs +++ b/spacetimedb/src/game.rs @@ -23,6 +23,7 @@ pub fn join_or_create_lobby(ctx: &ReducerContext, mut lobby_id: u32) -> Result<( host_player_id: player.id, players: vec![PlayerOrBot::Player { id: player.id }], game_state: GameState::Setup, + turn_state: TurnState::None, }); info!("created lobby: {:?}", lobby); diff --git a/spacetimedb/src/game/wall.rs b/spacetimedb/src/game/wall.rs index dca40d4..d46b92c 100644 --- a/spacetimedb/src/game/wall.rs +++ b/spacetimedb/src/game/wall.rs @@ -13,7 +13,6 @@ pub fn shuffle_deal(ctx: &ReducerContext, lobby_id: u32) { lobby.game_state = GameState::Deal; let mut lobby = ctx.db.lobby().id().update(lobby); - let tiles = new_shuffled_wall(ctx); ctx.db.wall().insert(Wall { // id: 0, @@ -24,6 +23,7 @@ pub fn shuffle_deal(ctx: &ReducerContext, lobby_id: u32) { deal_hands(ctx, lobby_id); lobby.game_state = GameState::Play; + lobby.turn_state = TurnState::Tsumo; ctx.db.lobby().id().update(lobby); } diff --git a/spacetimedb/src/tables.rs b/spacetimedb/src/tables.rs index c53daf7..e3a3928 100644 --- a/spacetimedb/src/tables.rs +++ b/spacetimedb/src/tables.rs @@ -50,6 +50,7 @@ pub struct Lobby { pub players: Vec, pub game_state: GameState, + pub turn_state: TurnState, } #[table(name = wall)]