more refactor, start using stdb for everything???
4.5th rewrite for tui
This commit is contained in:
parent
034e543d40
commit
c3686221aa
29 changed files with 478 additions and 744 deletions
|
|
@ -9,127 +9,8 @@ mod derive_alias {
|
|||
}
|
||||
use derive_aliases::derive;
|
||||
|
||||
use bevy::prelude::*;
|
||||
use spacetimedb::SpacetimeType;
|
||||
use strum::{EnumCount, FromRepr};
|
||||
pub mod states;
|
||||
pub mod tiles;
|
||||
|
||||
#[derive(..Base, Hash, Default, FromRepr)]
|
||||
#[derive(States, SpacetimeType)]
|
||||
pub enum GameState {
|
||||
#[default]
|
||||
None,
|
||||
Lobby,
|
||||
Setup,
|
||||
Deal,
|
||||
Play,
|
||||
Exit,
|
||||
}
|
||||
|
||||
#[derive(..Base)]
|
||||
#[derive(Component, SpacetimeType)]
|
||||
pub struct Tile {
|
||||
pub suit: Suit,
|
||||
}
|
||||
|
||||
#[derive(..Base)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Suit {
|
||||
Man(Rank),
|
||||
Pin(Rank),
|
||||
Sou(Rank),
|
||||
Wind(Wind),
|
||||
Dragon(Dragon),
|
||||
}
|
||||
|
||||
impl Suit {
|
||||
pub fn rank(&self) -> Option<Rank> {
|
||||
match self {
|
||||
Suit::Man(rank) => Some(*rank),
|
||||
Suit::Pin(rank) => Some(*rank),
|
||||
Suit::Sou(rank) => Some(*rank),
|
||||
// Suit::Wind(wind) | Suit::Dragon(dragon) => None,
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
Deref,
|
||||
DerefMut,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub struct Rank {
|
||||
pub number: u8,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
FromRepr,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Wind {
|
||||
Ton,
|
||||
Nan,
|
||||
Shaa,
|
||||
Pei,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
FromRepr,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Dragon {
|
||||
Haku,
|
||||
Hatsu,
|
||||
Chun,
|
||||
}
|
||||
|
||||
pub fn tiles() -> Vec<Tile> {
|
||||
let mut tiles = vec![];
|
||||
for _ in 0..4 {
|
||||
for i in 1..=9 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Pin(Rank { number: i }),
|
||||
});
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Sou(Rank { number: i }),
|
||||
});
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Man(Rank { number: i }),
|
||||
});
|
||||
}
|
||||
for i in 0..4 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Wind(Wind::from_repr(i).unwrap()),
|
||||
});
|
||||
}
|
||||
for i in 0..3 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Dragon(Dragon::from_repr(i).unwrap()),
|
||||
});
|
||||
}
|
||||
}
|
||||
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,
|
||||
RonChiiPonKan,
|
||||
End,
|
||||
}
|
||||
pub use states::*;
|
||||
pub use tiles::*;
|
||||
|
|
|
|||
37
jong-types/src/states.rs
Normal file
37
jong-types/src/states.rs
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
use bevy::prelude::*;
|
||||
use spacetimedb::SpacetimeType;
|
||||
use strum::{EnumCount, FromRepr};
|
||||
|
||||
use super::derive;
|
||||
|
||||
#[derive(..Base, Hash, Default, FromRepr)]
|
||||
#[derive(States, SpacetimeType)]
|
||||
pub enum GameState {
|
||||
#[default]
|
||||
None,
|
||||
Lobby,
|
||||
Setup,
|
||||
Deal,
|
||||
Play,
|
||||
Exit,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Default,
|
||||
..Copy,
|
||||
PartialEq,
|
||||
Eq,
|
||||
Hash,
|
||||
Debug,
|
||||
)]
|
||||
#[derive(SubStates, FromRepr, EnumCount, SpacetimeType)]
|
||||
#[source(GameState = GameState::Play)]
|
||||
pub enum TurnState {
|
||||
#[default]
|
||||
None,
|
||||
Tsumo,
|
||||
Menzen,
|
||||
RiichiKan,
|
||||
RonChiiPonKan,
|
||||
End,
|
||||
}
|
||||
94
jong-types/src/tiles.rs
Normal file
94
jong-types/src/tiles.rs
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
use bevy::prelude::*;
|
||||
use spacetimedb::SpacetimeType;
|
||||
use strum::{EnumCount, FromRepr};
|
||||
|
||||
use super::derive;
|
||||
|
||||
#[derive(..Base)]
|
||||
#[derive(Component, SpacetimeType)]
|
||||
pub struct Tile {
|
||||
pub suit: Suit,
|
||||
}
|
||||
|
||||
#[derive(..Base)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Suit {
|
||||
Man(Rank),
|
||||
Pin(Rank),
|
||||
Sou(Rank),
|
||||
Wind(Wind),
|
||||
Dragon(Dragon),
|
||||
}
|
||||
|
||||
impl Suit {
|
||||
pub fn rank(&self) -> Option<Rank> {
|
||||
match self {
|
||||
Suit::Man(rank) => Some(*rank),
|
||||
Suit::Pin(rank) => Some(*rank),
|
||||
Suit::Sou(rank) => Some(*rank),
|
||||
// Suit::Wind(wind) | Suit::Dragon(dragon) => None,
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
Deref,
|
||||
DerefMut,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub struct Rank {
|
||||
pub number: u8,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
FromRepr,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Wind {
|
||||
Ton,
|
||||
Nan,
|
||||
Shaa,
|
||||
Pei,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
..Base,
|
||||
FromRepr,
|
||||
)]
|
||||
#[derive(SpacetimeType)]
|
||||
pub enum Dragon {
|
||||
Haku,
|
||||
Hatsu,
|
||||
Chun,
|
||||
}
|
||||
|
||||
pub fn tiles() -> Vec<Tile> {
|
||||
let mut tiles = vec![];
|
||||
for _ in 0..4 {
|
||||
for i in 1..=9 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Pin(Rank { number: i }),
|
||||
});
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Sou(Rank { number: i }),
|
||||
});
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Man(Rank { number: i }),
|
||||
});
|
||||
}
|
||||
for i in 0..4 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Wind(Wind::from_repr(i).unwrap()),
|
||||
});
|
||||
}
|
||||
for i in 0..3 {
|
||||
tiles.push(Tile {
|
||||
suit: Suit::Dragon(Dragon::from_repr(i).unwrap()),
|
||||
});
|
||||
}
|
||||
}
|
||||
tiles
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue