use bevy::prelude::*; use bevy_ecs_ldtk::prelude::*; use crate::player::Player; #[derive(Default, Component)] pub struct Goal; #[derive(Default, Bundle, LdtkEntity)] pub struct GoalBundle { goal: Goal, #[sprite_sheet_bundle] sprite_sheet_bundle: LdtkSpriteSheetBundle, #[grid_coords] grid_coords: GridCoords, } pub fn check_goal( level_selection: ResMut, players: Query<&GridCoords, (With, Changed)>, goals: Query<&GridCoords, With>, ) { if players .iter() .zip(goals.iter()) .any(|(player_grid_coords, goal_grid_coords)| player_grid_coords == goal_grid_coords) { let indices = match level_selection.into_inner() { LevelSelection::Indices(indices) => indices, _ => panic!("level selection should always be Indices in this game"), }; indices.level += 1; } }