From 178c3448594638c4214d09dd435dfc53063497f0 Mon Sep 17 00:00:00 2001 From: Tao Tien <29749622+taotien@users.noreply.github.com> Date: Thu, 8 Jan 2026 20:49:19 -0800 Subject: [PATCH] plugins --- src/game.rs | 91 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 107 +++-------------------------------------------- src/tui/input.rs | 17 +++----- src/tui/mod.rs | 28 +++++++++++-- 4 files changed, 125 insertions(+), 118 deletions(-) create mode 100644 src/game.rs diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..c514b02 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,91 @@ +use std::collections::VecDeque; + +use bevy::prelude::*; + +use crate::tiles::{self, *}; + +pub struct Riichi; + +impl Plugin for Riichi { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_systems(Startup, init_match) + .add_systems(Startup, tiles::init_tiles); + } +} + +#[derive(Component)] +pub(crate) struct Player { + pub(crate) name: String, +} + +#[derive(Component)] +pub(crate) struct Points(isize); + +#[derive(Component)] +pub(crate) struct Dice(u8, u8); + +#[derive(Resource)] +pub(crate) struct Compass { + pub(crate) prevalent_wind: Wind, + pub(crate) round: u8, + pub(crate) dealer_wind: Wind, + pub(crate) riichi: usize, + pub(crate) honba: usize, +} + +impl Default for Compass { + fn default() -> Self { + Self { + prevalent_wind: Wind::Ton, + round: 1, + dealer_wind: Wind::Ton, + riichi: 0, + honba: 0, + } + } +} + +#[derive(Resource)] +pub(crate) struct MatchSettings { + pub(crate) starting_points: isize, + pub(crate) player_count: u8, +} + +#[derive(Component)] +pub(crate) struct Wall(VecDeque); + +pub(crate) fn next_round(mut compass: Res) {} + +pub(crate) fn init_match( + mut commands: Commands, + // , mut compass: ResMut +) { + let starting = 25000; + let player_count = 4; + + commands.insert_resource(MatchSettings { + starting_points: starting, + player_count, + }); + + let players = (1..=player_count) + .map(|i| { + ( + Player { + name: format!("Player {i}"), + }, + Points(starting), + ) + }) + .collect::>(); + commands.spawn_batch(players); + + // *compass = Compass { + // prevalent_wind: Wind::Ton, + // round: 1, + // dealer_wind: todo!(), + // riichi: 0, + // honba: 0, + // } +} diff --git a/src/main.rs b/src/main.rs index c7a8c7e..3d20dcd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,14 +1,11 @@ -use std::{collections::VecDeque, time::Duration}; - -use bevy::{app::ScheduleRunnerPlugin, input::keyboard::Key, prelude::*}; -use bevy_ratatui::RatatuiPlugins; +use bevy::prelude::*; use clap::{Parser, Subcommand}; -use crate::tiles::*; - mod tiles; mod yakus; +mod game; + mod gui; mod tui; @@ -30,104 +27,10 @@ fn main() { let mut app = App::new(); let app = match args.mode { Mode::RunGui => app.add_plugins(DefaultPlugins), - Mode::RunTui => app - .add_plugins(( - MinimalPlugins.set(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f32( - 1. / 1., - ))), - RatatuiPlugins { - // enable_kitty_protocol: todo!(), - // enable_mouse_capture: todo!(), - enable_input_forwarding: true, - ..Default::default() - }, - )) - .add_systems(Update, tui::draw_system), + Mode::RunTui => app.add_plugins(tui::RiichiTui), }; - app.init_resource::() - .add_systems(Startup, init_match) - .add_systems(Startup, init_tiles); + app.add_plugins(game::Riichi); app.run(); } - -fn keyboard_input_system( - input: Res>, - key_input: Res>, -) { -} - -#[derive(Component)] -struct Player { - name: String, -} - -#[derive(Component)] -struct Points(isize); - -#[derive(Component)] -struct Dice(u8, u8); - -#[derive(Resource)] -struct Compass { - prevalent_wind: Wind, - round: u8, - dealer_wind: Wind, - riichi: usize, - honba: usize, -} - -impl Default for Compass { - fn default() -> Self { - Self { - prevalent_wind: Wind::Ton, - round: 1, - dealer_wind: Wind::Ton, - riichi: 0, - honba: 0, - } - } -} - -#[derive(Resource)] -struct MatchSettings { - starting_points: isize, - player_count: u8, -} - -#[derive(Component)] -struct Wall(VecDeque); - -fn next_round(mut compass: Res) {} - -fn init_match(mut commands: Commands, // , mut compass: ResMut -) { - let starting = 25000; - let player_count = 4; - - commands.insert_resource(MatchSettings { - starting_points: starting, - player_count, - }); - - let players = (1..=player_count) - .map(|i| { - ( - Player { - name: format!("Player {i}"), - }, - Points(starting), - ) - }) - .collect::>(); - commands.spawn_batch(players); - - // *compass = Compass { - // prevalent_wind: Wind::Ton, - // round: 1, - // dealer_wind: todo!(), - // riichi: 0, - // honba: 0, - // } -} diff --git a/src/tui/input.rs b/src/tui/input.rs index f99de03..4e6a41f 100644 --- a/src/tui/input.rs +++ b/src/tui/input.rs @@ -1,19 +1,12 @@ // use bevy::ecs::message::MessageReader; use bevy::app::AppExit; +use bevy::input::keyboard::Key; use bevy::prelude::*; use bevy_ratatui::crossterm::event::KeyCode; -use bevy_ratatui::event::KeyMessage; -pub(crate) fn input_system( - mut messages: MessageReader, - mut exit: MessageWriter, +pub(crate) fn keyboard_input_system( + input: Res>, + key_input: Res>, ) { - for message in messages.read() { - match message.code { - KeyCode::Char('q') => { - exit.write_default(); - } - _ => {} - } - } + } diff --git a/src/tui/mod.rs b/src/tui/mod.rs index 395523b..007589c 100644 --- a/src/tui/mod.rs +++ b/src/tui/mod.rs @@ -1,11 +1,31 @@ -use bevy::prelude::*; -use bevy_ratatui::RatatuiContext; +use std::time::Duration; + +use bevy::{app::ScheduleRunnerPlugin, prelude::*}; +use bevy_ratatui::{RatatuiContext, RatatuiPlugins}; use crate::tiles::Tile; -pub(crate) mod input; +mod input; -pub(crate) use input::input_system; +pub struct RiichiTui; + +impl Plugin for RiichiTui { + fn build(&self, app: &mut App) { + app.add_plugins(( + MinimalPlugins.set(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f32( + 1. / 1., + ))), + RatatuiPlugins { + // enable_kitty_protocol: todo!(), + // enable_mouse_capture: todo!(), + enable_input_forwarding: true, + ..Default::default() + }, + )) + .add_systems(Update, draw_system) + .add_systems(Update, input::keyboard_input_system); + } +} pub(crate) fn draw_system(mut context: ResMut, query: Query<&Tile>) -> Result { context.draw(|frame| {