35 lines
919 B
Rust
35 lines
919 B
Rust
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<LevelSelection>,
|
|
players: Query<&GridCoords, (With<Player>, Changed<GridCoords>)>,
|
|
goals: Query<&GridCoords, With<Goal>>,
|
|
) {
|
|
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;
|
|
}
|
|
} |