use bevy::{ecs::entity::MapEntities, prelude::*}; use strum::FromRepr; use tracing::instrument; use crate::game::wall::WallTiles; #[derive(Component)] #[relationship(relationship_target = WallTiles)] pub struct InWall(pub Entity); // #[derive(Component)] // #[relationship(relationship_target = WallTiles)] // pub(crate) struct InHand(pub Entity); #[derive(Component, Debug)] pub struct Tile { pub suit: Suit, } #[derive(MapEntities, Debug)] pub enum Suit { Pin(Rank), Sou(Rank), Man(Rank), Wind(Wind), Dragon(Dragon), } #[derive(Deref, DerefMut, Debug)] pub struct Rank(pub u8); #[derive(FromRepr, Debug)] pub enum Wind { Ton, Nan, Shaa, Pei, } #[derive(Debug, FromRepr)] pub enum Dragon { Haku, Hatsu, Chun, } #[derive(Component)] pub struct Dora; pub fn init_tiles(mut commands: Commands) { for _ in 0..4 { for i in 1..=9 { commands.spawn(Tile { suit: Suit::Pin(Rank(i)), }); commands.spawn(Tile { suit: Suit::Sou(Rank(i)), }); commands.spawn(Tile { suit: Suit::Man(Rank(i)), }); } for i in 0..4 { commands.spawn(Tile { suit: Suit::Wind(Wind::from_repr(i).unwrap()), }); } for i in 0..3 { commands.spawn(Tile { suit: Suit::Dragon(Dragon::from_repr(i).unwrap()), }); } } }