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; #[derive(Component)] pub struct Tile { suit: Suit, } #[derive(MapEntities)] pub enum Suit { Pin(Rank), Sou(Rank), Man(Rank), Wind(Wind), Dragon(Dragon), } #[derive(Deref, DerefMut)] pub struct Rank(u8); #[derive(FromRepr)] pub enum Wind { Ton, Nan, Shaa, Pei, } #[derive(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()), }); } } }