Compare commits
No commits in common. "034e543d4049a27638e35120a8c8606b6402b58a" and "1afb7f4e3dd92dceb61553e3b4a3e42a854e9a9b" have entirely different histories.
034e543d40
...
1afb7f4e3d
51 changed files with 336 additions and 546 deletions
626
Cargo.lock
generated
626
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,6 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["jong", "jong-types", "jong-line", "jong-db"]
|
members = ["jong", "jong-types", "spacetimedb"]
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
jong = { version = "0.1.0", path = "jong" }
|
jong = { version = "0.1.0", path = "jong" }
|
||||||
|
|
|
||||||
12
devenv.lock
12
devenv.lock
|
|
@ -3,10 +3,10 @@
|
||||||
"devenv": {
|
"devenv": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"dir": "src/modules",
|
"dir": "src/modules",
|
||||||
"lastModified": 1771157881,
|
"lastModified": 1770666213,
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "devenv",
|
"repo": "devenv",
|
||||||
"rev": "b0b3dfa70ec90fa49f672e579f186faf4f61bd4b",
|
"rev": "d4ffee46c9088df6e000470b998a2d2c16517f62",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -40,10 +40,10 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1770726378,
|
"lastModified": 1769939035,
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae",
|
"rev": "a8ca480175326551d6c4121498316261cbb5b260",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -125,10 +125,10 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1771211437,
|
"lastModified": 1770606655,
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "c62195b3d6e1bb11e0c2fb2a494117d3b55d410f",
|
"rev": "11a396520bf911e4ed01e78e11633d3fc63b350e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
# processes.lspmux.exec = "lspmux server";
|
# processes.lspmux.exec = "lspmux server";
|
||||||
processes.spacetimedb_start.exec = "spacetime start";
|
processes.spacetimedb_start.exec = "spacetime start";
|
||||||
processes.spacetimedb_dev = {
|
processes.spacetimedb_dev = {
|
||||||
exec = "spacetime dev --module-bindings-path jong-db/src/db jong-line --delete-data=always";
|
exec = "spacetime dev --module-bindings-path jong/src/stdb jongline --delete-data=always";
|
||||||
# notify.enable = true;
|
# notify.enable = true;
|
||||||
# TODO features not yet supp???
|
# TODO features not yet supp???
|
||||||
# restart = "always";
|
# restart = "always";
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "jong-db"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
jong-types.workspace = true
|
|
||||||
spacetimedb-sdk.workspace = true
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
pub mod db;
|
|
||||||
pub use db::*;
|
|
||||||
|
|
||||||
impl From<GameState> for jong_types::GameState {
|
|
||||||
fn from(value: GameState) -> Self {
|
|
||||||
Self::from_repr(value as usize).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<TurnState> for jong_types::TurnState {
|
|
||||||
fn from(value: TurnState) -> Self {
|
|
||||||
Self::from_repr(value as usize).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<&Tile> for jong_types::Tile {
|
|
||||||
fn from(value: &tile_type::Tile) -> Self {
|
|
||||||
Self {
|
|
||||||
suit: value.suit.clone().into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Suit> for jong_types::Suit {
|
|
||||||
fn from(value: Suit) -> Self {
|
|
||||||
match value {
|
|
||||||
Suit::Man(rank) => Self::Man(rank.into()),
|
|
||||||
Suit::Pin(rank) => Self::Pin(rank.into()),
|
|
||||||
Suit::Sou(rank) => Self::Sou(rank.into()),
|
|
||||||
Suit::Wind(wind) => Self::Wind(wind.into()),
|
|
||||||
Suit::Dragon(dragon) => Self::Dragon(dragon.into()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Rank> for jong_types::Rank {
|
|
||||||
fn from(value: Rank) -> Self {
|
|
||||||
Self {
|
|
||||||
number: value.number,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Wind> for jong_types::Wind {
|
|
||||||
fn from(value: Wind) -> Self {
|
|
||||||
Self::from_repr(value as usize).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Dragon> for jong_types::Dragon {
|
|
||||||
fn from(value: Dragon) -> Self {
|
|
||||||
Self::from_repr(value as usize).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "jong-line"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2024"
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
crate-type = ["cdylib"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
jong-types.workspace = true
|
|
||||||
spacetimedb.workspace = true
|
|
||||||
log.workspace = true
|
|
||||||
|
|
@ -8,8 +8,6 @@ edition = "2024"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bevy.workspace = true
|
bevy.workspace = true
|
||||||
bevy.features = ["bevy_state"]
|
bevy.features = ["bevy_state"]
|
||||||
|
|
||||||
spacetimedb.workspace = true
|
|
||||||
|
|
||||||
strum.workspace = true
|
|
||||||
derive_aliases = "0.4.7"
|
derive_aliases = "0.4.7"
|
||||||
|
spacetimedb.workspace = true
|
||||||
|
strum.workspace = true
|
||||||
|
|
|
||||||
|
|
@ -10,30 +10,21 @@ readme = false
|
||||||
[lib]
|
[lib]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
# jong
|
|
||||||
jong-types.workspace = true
|
jong-types.workspace = true
|
||||||
jong-db.path = "../jong-db"
|
|
||||||
|
|
||||||
# bevy
|
bevy = { workspace = true, features = ["default", "dynamic_linking"] }
|
||||||
bevy.workspace = true
|
|
||||||
bevy.features = ["default", "dynamic_linking"]
|
|
||||||
bevy_ratatui.workspace = true
|
bevy_ratatui.workspace = true
|
||||||
|
bevy_spacetimedb.workspace = true
|
||||||
# spacetimedb
|
clap = { workspace = true, features = ["derive"] }
|
||||||
|
log = { workspace = true, features = [
|
||||||
|
"release_max_level_error",
|
||||||
|
"max_level_trace",
|
||||||
|
] }
|
||||||
|
rand.workspace = true
|
||||||
|
ratatui.workspace = true
|
||||||
spacetimedb-sdk.workspace = true
|
spacetimedb-sdk.workspace = true
|
||||||
spacetimedb.workspace = true
|
spacetimedb.workspace = true
|
||||||
bevy_spacetimedb.workspace = true
|
|
||||||
|
|
||||||
# tui
|
|
||||||
ratatui.workspace = true
|
|
||||||
tui-logger.workspace = true
|
|
||||||
tui-logger.features = ["tracing-support", "crossterm"]
|
|
||||||
|
|
||||||
clap.features = ["derive"]
|
|
||||||
clap.workspace = true
|
|
||||||
log.features = ["release_max_level_error", "max_level_trace"]
|
|
||||||
log.workspace = true
|
|
||||||
rand.workspace = true
|
|
||||||
strum.workspace = true
|
strum.workspace = true
|
||||||
tracing-subscriber.workspace = true
|
|
||||||
tracing.workspace = true
|
tracing.workspace = true
|
||||||
|
tracing-subscriber.workspace = true
|
||||||
|
tui-logger = { workspace = true, features = ["tracing-support", "crossterm"] }
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,15 @@ use bevy_spacetimedb::{
|
||||||
};
|
};
|
||||||
use spacetimedb_sdk::{DbContext, Table};
|
use spacetimedb_sdk::{DbContext, Table};
|
||||||
|
|
||||||
|
use crate::stdb::{self, DbConnection, LobbyTableAccess, PlayerTableAccess, RemoteTables};
|
||||||
|
use crate::stdb::{
|
||||||
|
add_bot, draw_tile, set_ready, shuffle_deal,
|
||||||
|
skip_call, start_game,
|
||||||
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
SpacetimeDB, creds_store,
|
SpacetimeDB, creds_store,
|
||||||
game::hand::{Drawn, Hand, Pond},
|
game::hand::{Drawn, Hand, Pond},
|
||||||
};
|
};
|
||||||
use jong_db::{self, DbConnection, LobbyTableAccess, PlayerTableAccess, RemoteTables};
|
|
||||||
use jong_db::{add_bot, draw_tile, set_ready, shuffle_deal, skip_call, start_game};
|
|
||||||
use jong_types::*;
|
use jong_types::*;
|
||||||
|
|
||||||
pub mod hand;
|
pub mod hand;
|
||||||
|
|
@ -105,7 +108,7 @@ pub struct TileId(pub u32);
|
||||||
|
|
||||||
fn on_player_insert_update(
|
fn on_player_insert_update(
|
||||||
_stdb: SpacetimeDB,
|
_stdb: SpacetimeDB,
|
||||||
mut messages: ReadInsertUpdateMessage<jong_db::Player>,
|
mut messages: ReadInsertUpdateMessage<stdb::Player>,
|
||||||
|
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
|
|
||||||
|
|
@ -161,7 +164,7 @@ fn on_player_insert_update(
|
||||||
|
|
||||||
fn on_lobby_insert_update(
|
fn on_lobby_insert_update(
|
||||||
stdb: SpacetimeDB,
|
stdb: SpacetimeDB,
|
||||||
mut messages: ReadInsertUpdateMessage<jong_db::Lobby>,
|
mut messages: ReadInsertUpdateMessage<stdb::Lobby>,
|
||||||
|
|
||||||
_commands: Commands,
|
_commands: Commands,
|
||||||
mut next_gamestate: ResMut<NextState<GameState>>,
|
mut next_gamestate: ResMut<NextState<GameState>>,
|
||||||
|
|
@ -179,10 +182,10 @@ fn on_lobby_insert_update(
|
||||||
|
|
||||||
next_gamestate.set(msg.new.game_state.into());
|
next_gamestate.set(msg.new.game_state.into());
|
||||||
match msg.new.game_state {
|
match msg.new.game_state {
|
||||||
jong_db::GameState::None => {
|
stdb::GameState::None => {
|
||||||
trace!("game entered none");
|
trace!("game entered none");
|
||||||
}
|
}
|
||||||
jong_db::GameState::Lobby => {
|
stdb::GameState::Lobby => {
|
||||||
trace!("game entered lobby");
|
trace!("game entered lobby");
|
||||||
if !player.ready {
|
if !player.ready {
|
||||||
for _ in 0..3 {
|
for _ in 0..3 {
|
||||||
|
|
@ -192,31 +195,31 @@ fn on_lobby_insert_update(
|
||||||
stdb.reducers().start_game().unwrap();
|
stdb.reducers().start_game().unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
jong_db::GameState::Setup => {
|
stdb::GameState::Setup => {
|
||||||
trace!("game entered setup");
|
trace!("game entered setup");
|
||||||
stdb.reducers().shuffle_deal(player.lobby_id).unwrap();
|
stdb.reducers().shuffle_deal(player.lobby_id).unwrap();
|
||||||
}
|
}
|
||||||
jong_db::GameState::Deal => {
|
stdb::GameState::Deal => {
|
||||||
trace!("game entered deal");
|
trace!("game entered deal");
|
||||||
}
|
}
|
||||||
jong_db::GameState::Play => {
|
stdb::GameState::Play => {
|
||||||
trace!("game entered play");
|
trace!("game entered play");
|
||||||
match msg.new.turn_state {
|
match msg.new.turn_state {
|
||||||
jong_db::TurnState::None => {}
|
stdb::TurnState::None => {}
|
||||||
jong_db::TurnState::Tsumo => {
|
stdb::TurnState::Tsumo => {
|
||||||
stdb.reducers().draw_tile().unwrap();
|
stdb.reducers().draw_tile().unwrap();
|
||||||
}
|
}
|
||||||
jong_db::TurnState::Menzen => todo!(),
|
stdb::TurnState::Menzen => todo!(),
|
||||||
jong_db::TurnState::RiichiKan => todo!(),
|
stdb::TurnState::RiichiKan => todo!(),
|
||||||
jong_db::TurnState::RonChiiPonKan => {
|
stdb::TurnState::RonChiiPonKan => {
|
||||||
stdb.reducers().skip_call().unwrap();
|
stdb.reducers().skip_call().unwrap();
|
||||||
}
|
}
|
||||||
jong_db::TurnState::End => todo!(),
|
stdb::TurnState::End => todo!(),
|
||||||
// _ => todo!(),
|
// _ => todo!(),
|
||||||
}
|
}
|
||||||
next_turnstate.set(msg.new.turn_state.into());
|
next_turnstate.set(msg.new.turn_state.into());
|
||||||
}
|
}
|
||||||
jong_db::GameState::Exit => {
|
stdb::GameState::Exit => {
|
||||||
trace!("game enetered exit");
|
trace!("game enetered exit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ use bevy_spacetimedb::StdbConnection;
|
||||||
use spacetimedb_sdk::credentials;
|
use spacetimedb_sdk::credentials;
|
||||||
|
|
||||||
pub mod game;
|
pub mod game;
|
||||||
|
pub mod stdb;
|
||||||
pub mod tile;
|
pub mod tile;
|
||||||
pub mod yakus;
|
pub mod yakus;
|
||||||
|
|
||||||
|
|
@ -12,9 +13,60 @@ trait EnumNextCycle {
|
||||||
fn next(&self) -> Self;
|
fn next(&self) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type SpacetimeDB<'a> = Res<'a, StdbConnection<jong_db::DbConnection>>;
|
pub type SpacetimeDB<'a> = Res<'a, StdbConnection<stdb::DbConnection>>;
|
||||||
|
|
||||||
fn creds_store() -> credentials::File {
|
fn creds_store() -> credentials::File {
|
||||||
credentials::File::new("jongline")
|
credentials::File::new("jongline")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<stdb::GameState> for jong_types::GameState {
|
||||||
|
fn from(value: stdb::GameState) -> Self {
|
||||||
|
Self::from_repr(value as usize).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<stdb::TurnState> for jong_types::TurnState {
|
||||||
|
fn from(value: stdb::TurnState) -> Self {
|
||||||
|
Self::from_repr(value as usize).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<&stdb::Tile> for jong_types::Tile {
|
||||||
|
fn from(value: &stdb::tile_type::Tile) -> Self {
|
||||||
|
Self {
|
||||||
|
suit: value.suit.clone().into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<stdb::Suit> for jong_types::Suit {
|
||||||
|
fn from(value: stdb::Suit) -> Self {
|
||||||
|
match value {
|
||||||
|
stdb::Suit::Man(rank) => Self::Man(rank.into()),
|
||||||
|
stdb::Suit::Pin(rank) => Self::Pin(rank.into()),
|
||||||
|
stdb::Suit::Sou(rank) => Self::Sou(rank.into()),
|
||||||
|
stdb::Suit::Wind(wind) => Self::Wind(wind.into()),
|
||||||
|
stdb::Suit::Dragon(dragon) => Self::Dragon(dragon.into()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<stdb::Rank> for jong_types::Rank {
|
||||||
|
fn from(value: stdb::Rank) -> Self {
|
||||||
|
Self {
|
||||||
|
number: value.number,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<stdb::Wind> for jong_types::Wind {
|
||||||
|
fn from(value: stdb::Wind) -> Self {
|
||||||
|
Self::from_repr(value as usize).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<stdb::Dragon> for jong_types::Dragon {
|
||||||
|
fn from(value: stdb::Dragon) -> Self {
|
||||||
|
Self::from_repr(value as usize).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ use jong::game::player::MainPlayer;
|
||||||
use tui_logger::TuiWidgetState;
|
use tui_logger::TuiWidgetState;
|
||||||
|
|
||||||
use crate::tui::{input::ConfirmSelect, states::ConsoleWidget};
|
use crate::tui::{input::ConfirmSelect, states::ConsoleWidget};
|
||||||
|
use jong::stdb::{self, discard_tile as _};
|
||||||
use jong::{
|
use jong::{
|
||||||
SpacetimeDB,
|
SpacetimeDB,
|
||||||
game::{
|
game::{
|
||||||
|
|
@ -16,7 +17,6 @@ use jong::{
|
||||||
player::{CurrentPlayer, Player},
|
player::{CurrentPlayer, Player},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use jong_db::{self, discard_tile as _};
|
|
||||||
use jong_types::{GameState, TurnState};
|
use jong_types::{GameState, TurnState};
|
||||||
|
|
||||||
mod input;
|
mod input;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy_ratatui::crossterm::event::KeyCode;
|
use bevy_ratatui::crossterm::event::KeyCode;
|
||||||
use bevy_ratatui::event::KeyMessage;
|
use bevy_ratatui::event::KeyMessage;
|
||||||
use jong_db::PlayerTableAccess;
|
use jong::stdb::PlayerTableAccess;
|
||||||
use jong_db::join_or_create_lobby;
|
use jong::stdb::join_or_create_lobby;
|
||||||
use jong_db::start_game;
|
use jong::stdb::start_game;
|
||||||
use tui_logger::TuiWidgetEvent;
|
use tui_logger::TuiWidgetEvent;
|
||||||
|
|
||||||
use jong::SpacetimeDB;
|
use jong::SpacetimeDB;
|
||||||
|
|
|
||||||
16
justfile
16
justfile
|
|
@ -4,11 +4,16 @@ alias rt := run-tui
|
||||||
alias s := spacetime
|
alias s := spacetime
|
||||||
alias g := spacetime_generate-bindings
|
alias g := spacetime_generate-bindings
|
||||||
|
|
||||||
|
rrt:
|
||||||
|
just spacetime_restart_dev
|
||||||
|
sleep 3sec
|
||||||
|
just run-tui
|
||||||
|
|
||||||
default:
|
default:
|
||||||
just --list
|
just --list
|
||||||
|
|
||||||
run-tui:
|
run-tui:
|
||||||
spacetime call jong-line "clear_all"
|
spacetime call jongline "clear_all"
|
||||||
cargo run -- run-tui
|
cargo run -- run-tui
|
||||||
|
|
||||||
update:
|
update:
|
||||||
|
|
@ -19,16 +24,11 @@ spacetime:
|
||||||
devenv up
|
devenv up
|
||||||
|
|
||||||
spacetime_dev:
|
spacetime_dev:
|
||||||
spacetime dev --module-bindings-path jong-db/src/db jong-line --delete-data=always
|
spacetime dev --module-bindings-path jong/src/stdb jongline --delete-data=always
|
||||||
|
|
||||||
spacetime_generate-bindings:
|
spacetime_generate-bindings:
|
||||||
spacetime generate --lang rust --out-dir jong-db/src/db --project-path jong-line
|
spacetime generate --lang rust --out-dir jong/src/stdb --project-path spacetimedb
|
||||||
|
|
||||||
spacetime_restart_dev:
|
spacetime_restart_dev:
|
||||||
mprocs -s localhost:4050 --ctl $"({c: restart-proc, name: spacetimedb_dev} | to yaml)"
|
mprocs -s localhost:4050 --ctl $"({c: restart-proc, name: spacetimedb_dev} | to yaml)"
|
||||||
|
|
||||||
rrt:
|
|
||||||
just spacetime_restart_dev
|
|
||||||
sleep 3sec
|
|
||||||
just run-tui
|
|
||||||
|
|
||||||
|
|
|
||||||
14
spacetimedb/Cargo.toml
Normal file
14
spacetimedb/Cargo.toml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
[package]
|
||||||
|
name = "jongline"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
spacetimedb = { workspace = true }
|
||||||
|
log = { workspace = true }
|
||||||
|
jong-types = { workspace = true }
|
||||||
Loading…
Add table
Add a link
Reference in a new issue