mahjong_core/table/
mod.rs1pub use self::draw_wall::{DrawWall, DrawWallPlace, PositionTilesOpts};
2use crate::{Hands, PlayerId, TileId};
3use rustc_hash::FxHashMap;
4use serde::{Deserialize, Serialize};
5use ts_rs::TS;
6
7mod draw_wall;
8
9#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, TS)]
10#[ts(export)]
11pub struct Board(pub Vec<TileId>);
12
13#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, TS)]
14#[ts(export)]
15pub struct BonusTiles(pub FxHashMap<PlayerId, Vec<TileId>>);
16
17#[derive(Clone, Debug, Serialize, Deserialize, TS)]
18#[ts(export)]
19pub struct Table {
20 pub board: Board,
21 pub draw_wall: DrawWall,
22 pub hands: Hands,
23 pub bonus_tiles: BonusTiles,
24}
25
26impl Board {
28 pub fn len(&self) -> usize {
29 self.0.len()
30 }
31 pub fn is_empty(&self) -> bool {
32 self.0.is_empty()
33 }
34}
35
36impl BonusTiles {
37 pub fn get_or_create(&mut self, player_id: &PlayerId) -> &mut Vec<TileId> {
38 self.0.entry(player_id.clone()).or_default()
39 }
40}