use bevy::{log::LogPlugin, prelude::*}; use bevy_ecs_markers::{ params::{Marker, MarkerMut}, EntityMarker, MarkerExt, }; #[derive(EntityMarker)] enum Players { Red, Blue, Green, Yellow, } #[derive(Component)] struct Player { field: usize, } fn main() { App::new() .add_plugins(LogPlugin::default()) .init_marker::() .add_systems(Startup, (setup, move_red_player).chain()) .run(); } fn setup(mut commands: Commands, mut players: MarkerMut) { players[Players::Red].assign(commands.spawn(Player { field: 2 }).id()); players[Players::Blue].assign(commands.spawn(Player { field: 5 }).id()); players[Players::Green].assign(commands.spawn(Player { field: 7 }).id()); players[Players::Yellow].assign(commands.spawn(Player { field: 1 }).id()); } fn move_red_player(mut query: Query<&mut Player>, current: Marker) { let Ok(mut player) = query.get_mut(current[Players::Red].id()) else { warn!("Red Player not set yet!"); return; }; let old = player.field; player.field += 2; let new = player.field; info!("Player moved from field {old} to field {new}"); }