collectables per wave
All checks were successful
Build Bevy Game (Linux + Windows) / build-windows (push) Successful in 18m1s
Build Bevy Game (Linux + Windows) / build-linux (push) Successful in 18m38s

This commit is contained in:
Crizomb 2026-01-04 14:54:10 +01:00
parent 002ad4a162
commit 69fe717b22
3 changed files with 31 additions and 19 deletions

View file

@ -6,7 +6,8 @@ use rand::distr::slice::Empty;
use crate::{
core::{
bubble::{Bubble, bubble_spawn_wave},
game_state::Resetable,
collectible::{CollectableType, collectable_spawn},
game_state::{EndGameEvent, EndGameReason, Resetable},
kirby::Kirby,
life::Life,
},
@ -56,11 +57,12 @@ const GREEN_BUBBLE: BubbleType = BubbleType {
#[derive(Resource)]
pub struct BubbleWaves {
waves: Vec<Vec<BubbleSplash>>,
collectables: Vec<Vec<(CollectableType, Vec2)>>,
pub current_wave: usize,
}
fn get_bubble_waves() -> BubbleWaves {
BubbleWaves {
let return_thing = BubbleWaves {
waves: vec![
vec![BubbleSplash::new(NORMAL_BUBBLE, RIGHT, 10.0, 10)],
vec![BubbleSplash::new(NORMAL_BUBBLE, RIGHT, 10.0, 10), BubbleSplash::new(NORMAL_BUBBLE, TOP, 10.0, 10)],
@ -76,8 +78,17 @@ fn get_bubble_waves() -> BubbleWaves {
BubbleSplash::new(RED_BUBBLE, LEFT, 10.0, 100),
],
],
collectables: vec![
vec![],
vec![(CollectableType::NewKirby, LEFT)],
vec![(CollectableType::SpeedBoost, BOTTOM)],
vec![(CollectableType::ShieldBoost, BOTTOM)],
vec![],
],
current_wave: 0,
}
};
assert!(return_thing.waves.len() == return_thing.collectables.len());
return return_thing;
}
impl Resetable for BubbleWaves {
@ -92,11 +103,20 @@ fn no_ennemy_left(bubble_query: Query<(), With<Bubble>>) -> bool {
fn change_wave(mut bubble_wave: ResMut<BubbleWaves>, mut commands: Commands, asset_server: Res<AssetServer>) {
let max_bubble_wave = bubble_wave.waves.len();
bubble_wave.current_wave += 1;
if bubble_wave.current_wave >= max_bubble_wave {
panic!("GG you win");
commands.trigger(EndGameEvent { reason: EndGameReason::Victory });
return;
}
bubble_spawn_wave(&mut commands, &asset_server, bubble_wave.waves[bubble_wave.current_wave].as_slice());
let wave = &bubble_wave.waves[bubble_wave.current_wave];
let collectables = &bubble_wave.collectables[bubble_wave.current_wave];
bubble_spawn_wave(&mut commands, &asset_server, wave.as_slice());
for (collectable_type, collectable_pos) in collectables {
collectable_spawn(&mut commands, &asset_server, *collectable_type, *collectable_pos);
}
bubble_wave.current_wave += 1;
}
fn heal_kirby(query: Query<&mut Life, With<Kirby>>) {