shuffle
This commit is contained in:
parent
78029687d7
commit
bea146d439
9 changed files with 88 additions and 41 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -3274,8 +3274,10 @@ dependencies = [
|
|||
"bevy_ratatui",
|
||||
"clap",
|
||||
"log",
|
||||
"rand 0.9.2",
|
||||
"ratatui",
|
||||
"strum",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"tui-logger",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@ log = { version = "0.4.29", features = [
|
|||
"release_max_level_error",
|
||||
"max_level_trace",
|
||||
] }
|
||||
rand = "0.9.2"
|
||||
ratatui = "0.30.0"
|
||||
strum = { version = "0.27.2", features = ["derive"] }
|
||||
tracing = "0.1.44"
|
||||
tracing-subscriber = "0.3.22"
|
||||
tui-logger = { version = "0.18.0", features = ["tracing-support", "crossterm"] }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::tiles::{self, *};
|
||||
|
||||
mod player;
|
||||
pub(crate) mod wall;
|
||||
pub mod wall;
|
||||
|
||||
pub struct Riichi;
|
||||
|
||||
|
|
@ -13,10 +12,21 @@ impl Plugin for Riichi {
|
|||
app.init_resource::<Compass>()
|
||||
.add_systems(Startup, init_match)
|
||||
.add_systems(Startup, tiles::init_tiles)
|
||||
.add_systems(Startup, wall::build_wall);
|
||||
.add_systems(Update, wall::build_wall)
|
||||
// semicolon stopper
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(States, Default, Hash, Clone, Eq, Debug, PartialEq)]
|
||||
enum GameState {
|
||||
#[default]
|
||||
Setup,
|
||||
Deal,
|
||||
Play,
|
||||
Score,
|
||||
}
|
||||
|
||||
#[derive(Component)]
|
||||
pub(crate) struct Dice(u8, u8);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,24 @@
|
|||
|
||||
use bevy::log::tracing::instrument;
|
||||
use bevy::prelude::*;
|
||||
use rand::seq::SliceRandom;
|
||||
|
||||
use crate::game::InWall;
|
||||
use crate::tiles::Tile;
|
||||
|
||||
#[derive(Component)]
|
||||
pub(crate) struct Wall(Vec<Entity>);
|
||||
#[relationship_target(relationship = InWall)]
|
||||
pub struct Wall(Vec<Entity>);
|
||||
|
||||
pub(crate) fn build_wall(_tiles: Query<&Tile>) {
|
||||
info!("built a wall!")
|
||||
#[instrument(level = "trace", skip_all)]
|
||||
pub(crate) fn build_wall(mut commands: Commands, tiles: Query<Entity, With<Tile>>) -> Result {
|
||||
let mut rng = rand::rng();
|
||||
|
||||
let mut wall = commands.spawn(Wall(vec![]));
|
||||
|
||||
let mut shuffled = tiles.iter().collect::<Vec<_>>();
|
||||
shuffled.shuffle(&mut rng);
|
||||
|
||||
wall.replace_children(&shuffled);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
#![allow(unused)]
|
||||
|
||||
pub mod tiles;
|
||||
pub mod yakus;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#![allow(unused)]
|
||||
|
||||
use bevy::prelude::*;
|
||||
use clap::{Parser, Subcommand};
|
||||
use tracing_subscriber::{layer::SubscriberExt, registry::LookupSpan, util::SubscriberInitExt};
|
||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||
|
||||
mod gui;
|
||||
mod tui;
|
||||
|
|
@ -18,11 +20,6 @@ enum Mode {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
// tracing_subscriber::fmt()
|
||||
// .with_writer(std::io::stderr)
|
||||
// .with_env_filter("warn,jong=trace")
|
||||
// .init();
|
||||
|
||||
let args = Args::parse();
|
||||
|
||||
let mut app = App::new();
|
||||
|
|
|
|||
28
src/tiles.rs
28
src/tiles.rs
|
|
@ -1,24 +1,22 @@
|
|||
use bevy::{ecs::entity::MapEntities, prelude::*};
|
||||
use strum::FromRepr;
|
||||
|
||||
|
||||
// #[derive(Component)]
|
||||
// #[derive(relasionship(re))]
|
||||
// pub struct TileEntity {
|
||||
// #[relationship]
|
||||
// pub parent: Entity,
|
||||
|
||||
// r#type: Tile,
|
||||
// }
|
||||
|
||||
struct Hand;
|
||||
use crate::game::wall::Wall;
|
||||
|
||||
#[derive(Component)]
|
||||
#[relationship(relationship_target = Wall)]
|
||||
pub struct InWall(pub Entity);
|
||||
|
||||
// #[derive(Component)]
|
||||
// #[relationship(relationship_target = WallTiles)]
|
||||
// pub(crate) struct InHand(pub Entity);
|
||||
|
||||
#[derive(Component, Debug)]
|
||||
pub struct Tile {
|
||||
suit: Suit,
|
||||
}
|
||||
|
||||
#[derive(MapEntities)]
|
||||
#[derive(MapEntities, Debug)]
|
||||
pub enum Suit {
|
||||
Pin(Rank),
|
||||
Sou(Rank),
|
||||
|
|
@ -27,10 +25,10 @@ pub enum Suit {
|
|||
Dragon(Dragon),
|
||||
}
|
||||
|
||||
#[derive(Deref, DerefMut)]
|
||||
#[derive(Deref, DerefMut, Debug)]
|
||||
pub struct Rank(u8);
|
||||
|
||||
#[derive(FromRepr)]
|
||||
#[derive(FromRepr, Debug)]
|
||||
pub enum Wind {
|
||||
Ton,
|
||||
Nan,
|
||||
|
|
@ -38,7 +36,7 @@ pub enum Wind {
|
|||
Pei,
|
||||
}
|
||||
|
||||
#[derive(FromRepr)]
|
||||
#[derive(Debug, FromRepr)]
|
||||
pub enum Dragon {
|
||||
Haku,
|
||||
Hatsu,
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
use tui_logger::TuiLoggerWidget;
|
||||
|
||||
use bevy_ratatui::RatatuiContext;
|
||||
|
||||
use bevy::input::keyboard::Key;
|
||||
use bevy::prelude::*;
|
||||
use bevy_ratatui::RatatuiContext;
|
||||
use tui_logger::TuiLoggerWidget;
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Default, States)]
|
||||
pub(crate) enum ConsoleState {
|
||||
Open,
|
||||
#[default]
|
||||
Open,
|
||||
Closed,
|
||||
}
|
||||
|
||||
|
|
@ -28,7 +27,6 @@ pub(crate) fn toggle_console(
|
|||
mut next_state: ResMut<NextState<ConsoleState>>,
|
||||
) {
|
||||
if input.just_pressed(Key::Character("`".into())) {
|
||||
trace!("toggled");
|
||||
next_state.set(!*curr_state.get());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
use std::time::Duration;
|
||||
|
||||
use bevy::{app::ScheduleRunnerPlugin, input::keyboard::Key, prelude::*, state::app::StatesPlugin};
|
||||
use bevy::{app::ScheduleRunnerPlugin, prelude::*, state::app::StatesPlugin};
|
||||
use bevy_ratatui::{RatatuiContext, RatatuiPlugins};
|
||||
use jong::tiles::Tile;
|
||||
use tui_logger::TuiLoggerSmartWidget;
|
||||
|
||||
use jong::{game::wall::Wall, tiles::Tile};
|
||||
use ratatui::widgets::Paragraph;
|
||||
mod console;
|
||||
mod input;
|
||||
|
||||
|
|
@ -40,10 +39,36 @@ impl Plugin for RiichiTui {
|
|||
// InGame,
|
||||
// }
|
||||
|
||||
pub(crate) fn draw_system(mut tui_ctx: ResMut<RatatuiContext>, query: Query<&Tile>) -> Result {
|
||||
pub(crate) fn draw_system(
|
||||
// mut commands: Commands,
|
||||
wall: Option<Single<&Wall>>,
|
||||
tiles: Option<Populated<&Tile>>,
|
||||
mut tui_ctx: ResMut<RatatuiContext>,
|
||||
) -> Result {
|
||||
let title = ratatui::text::Text::raw("tiny riichi");
|
||||
let wall = if let Some(wall) = wall {
|
||||
let text = (*wall)
|
||||
.iter()
|
||||
.map(|c| {
|
||||
tiles
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.get(c)
|
||||
.map(|tile| format!("{tile:?}"))
|
||||
})
|
||||
.collect::<Result<String, _>>()?;
|
||||
|
||||
Some(Paragraph::new(text))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
tui_ctx.draw(|frame| {
|
||||
let text = ratatui::text::Text::raw("tiny riichi");
|
||||
frame.render_widget(text, frame.area());
|
||||
frame.render_widget(title, frame.area());
|
||||
|
||||
if let Some(wall) = wall {
|
||||
frame.render_widget(wall, frame.area());
|
||||
}
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue