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