use bevy::prelude::*; use strum::{EnumCount, FromRepr}; use crate::{ EnumNextCycle, game::{ hand::{DrawnTile, Hand}, player::{MainPlayer, Player}, round::{CurrentPlayer, TurnState, Wind}, wall::Wall, }, tile::{self, *}, }; pub mod hand; pub mod player; pub mod round; pub mod wall; #[derive(States, Default, Hash, Clone, Eq, Debug, PartialEq, Copy)] pub enum GameState { #[default] None, Setup, Deal, Play, } pub struct Riichi; impl Plugin for Riichi { fn build(&self, app: &mut App) { app // start stopper .init_state::() .add_sub_state::() .init_resource::() .init_resource::() .add_systems(Startup, tile::init_tiles) .add_systems(OnEnter(GameState::Setup), setup) .add_systems(OnEnter(GameState::Deal), hand::shuffle_deal) .add_systems(Update, hand::sort_hands.run_if(in_state(GameState::Play))) // .add_systems(Update, turn_manager.run_if(in_state(GameState::Play))) .add_systems(OnEnter(TurnState::Tsumo), round::tsumo) // semicolon stopper ; } } // struct TurnEvent { // pub next: Option, // pub prev: Option, // } // fn turn_manager() {} pub(crate) fn setup( mut commands: Commands, matchsettings: Res, // mut compass: ResMut // tiles: Query>, mut next_gamestate: ResMut>, ) { for i in 1..=matchsettings.player_count { let player = player::Player { name: format!("Player {}", i), }; let points = player::Points(matchsettings.starting_points); let bundle = ( player, points, Hand, Wind::from_repr((i - 1) as usize).unwrap(), ); if i == 1 { let player = commands.spawn((bundle, MainPlayer)).id(); commands.insert_resource(CurrentPlayer(player)); } else { commands.spawn(bundle); } } commands.spawn(Wall); next_gamestate.set(GameState::Deal); }