init wall

This commit is contained in:
Tao Tien 2026-01-08 23:58:26 -08:00
parent 76b720b0a2
commit 3fb03cfbcb
7 changed files with 69 additions and 27 deletions

View file

@ -53,6 +53,7 @@
xorg.libXcursor xorg.libXcursor
libxkbcommon libxkbcommon
]; ];
# RUST_LOG = "jong=off";
}; };
} }
); );

View file

@ -4,24 +4,20 @@ use bevy::prelude::*;
use crate::tiles::{self, *}; use crate::tiles::{self, *};
mod player;
pub(crate) mod wall;
pub struct Riichi; pub struct Riichi;
impl Plugin for Riichi { impl Plugin for Riichi {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
app.init_resource::<Compass>() app.init_resource::<Compass>()
.add_systems(Startup, init_match) .add_systems(Startup, init_match)
.add_systems(Startup, tiles::init_tiles); .add_systems(Startup, tiles::init_tiles)
.add_systems(Startup, wall::build_wall);
} }
} }
#[derive(Component)]
pub(crate) struct Player {
pub(crate) name: String,
}
#[derive(Component)]
pub(crate) struct Points(isize);
#[derive(Component)] #[derive(Component)]
pub(crate) struct Dice(u8, u8); pub(crate) struct Dice(u8, u8);
@ -52,14 +48,11 @@ pub(crate) struct MatchSettings {
pub(crate) player_count: u8, pub(crate) player_count: u8,
} }
#[derive(Component)]
pub(crate) struct Wall(VecDeque<Tile>);
pub(crate) fn next_round(mut compass: Res<Compass>) {} pub(crate) fn next_round(mut compass: Res<Compass>) {}
pub(crate) fn init_match( pub(crate) fn init_match(
mut commands: Commands, mut commands: Commands,
// , mut compass: ResMut<Compass> // mut compass: ResMut<Compass>
) { ) {
let starting = 25000; let starting = 25000;
let player_count = 4; let player_count = 4;
@ -72,10 +65,10 @@ pub(crate) fn init_match(
let players = (1..=player_count) let players = (1..=player_count)
.map(|i| { .map(|i| {
( (
Player { player::Player {
name: format!("Player {i}"), name: format!("Player {i}"),
}, },
Points(starting), player::Points(starting),
) )
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();

9
src/game/player.rs Normal file
View file

@ -0,0 +1,9 @@
use bevy::prelude::*;
#[derive(Component)]
pub(crate) struct Player {
pub(crate) name: String,
}
#[derive(Component)]
pub(crate) struct Points(pub isize);

12
src/game/wall.rs Normal file
View file

@ -0,0 +1,12 @@
use std::collections::VecDeque;
use bevy::prelude::*;
use crate::tiles::Tile;
#[derive(Component)]
pub(crate) struct Wall(Vec<Entity>);
pub(crate) fn build_wall(tiles: Query<&Tile>) {
info!("built a wall!")
}

View file

@ -1,8 +1,26 @@
use bevy::prelude::*; use bevy::{ecs::entity::MapEntities, prelude::*};
use strum::FromRepr; use strum::FromRepr;
use crate::game::wall::Wall;
// #[derive(Component)]
// #[derive(relasionship(re))]
// pub struct TileEntity {
// #[relationship]
// pub parent: Entity,
// r#type: Tile,
// }
struct Hand;
#[derive(Component)] #[derive(Component)]
pub enum Tile { pub struct Tile {
suit: Suit,
}
#[derive(MapEntities)]
pub enum Suit {
Pin(Rank), Pin(Rank),
Sou(Rank), Sou(Rank),
Man(Rank), Man(Rank),
@ -34,15 +52,25 @@ pub struct Dora;
pub fn init_tiles(mut commands: Commands) { pub fn init_tiles(mut commands: Commands) {
for _ in 0..4 { for _ in 0..4 {
for i in 1..=9 { for i in 1..=9 {
commands.spawn(Tile::Pin(Rank(i))); commands.spawn(Tile {
commands.spawn(Tile::Sou(Rank(i))); suit: Suit::Pin(Rank(i)),
commands.spawn(Tile::Man(Rank(i))); });
commands.spawn(Tile {
suit: Suit::Sou(Rank(i)),
});
commands.spawn(Tile {
suit: Suit::Man(Rank(i)),
});
} }
for i in 0..4 { for i in 0..4 {
commands.spawn(Tile::Wind(Wind::from_repr(i).unwrap())); commands.spawn(Tile {
suit: Suit::Wind(Wind::from_repr(i).unwrap()),
});
} }
for i in 0..3 { for i in 0..3 {
commands.spawn(Tile::Dragon(Dragon::from_repr(i).unwrap())); commands.spawn(Tile {
suit: Suit::Dragon(Dragon::from_repr(i).unwrap()),
});
} }
} }
} }

View file

@ -5,8 +5,7 @@ use bevy::prelude::*;
use bevy_ratatui::crossterm::event::KeyCode; use bevy_ratatui::crossterm::event::KeyCode;
pub(crate) fn keyboard_input_system( pub(crate) fn keyboard_input_system(
input: Res<ButtonInput<KeyCode>>, input: Option<Res<ButtonInput<KeyCode>>>,
key_input: Res<ButtonInput<Key>>, key_input: Option<Res<ButtonInput<Key>>>,
) { ) {
} }

View file

@ -22,8 +22,8 @@ impl Plugin for RiichiTui {
..Default::default() ..Default::default()
}, },
)) ))
.add_systems(Update, draw_system) .add_systems(Update, input::keyboard_input_system)
.add_systems(Update, input::keyboard_input_system); .add_systems(Update, draw_system);
} }
} }