@@ -47,6 +47,7 @@ pub struct GameState {
4747 pub projectiles_to_despawn : HashSet < EntityId > ,
4848 pub message_from_elf : Option < String > ,
4949 pub assets : Assets ,
50+ pub num_lvlups : u32 ,
5051}
5152
5253impl GameState {
@@ -125,10 +126,11 @@ I will summon magic to to beat the evil!.
125126 projectiles_to_despawn : HashSet :: new ( ) ,
126127 message_from_elf : Some ( tmp. to_owned ( ) ) ,
127128 assets,
129+ num_lvlups : 1 ,
128130 }
129131 }
130132
131- pub fn check_collisions ( & mut self ) {
133+ pub fn check_collisions ( & mut self ) -> u32 {
132134 // Check player-enemy collisions
133135 let mut game_over = false ;
134136 for enemy in & self . enemies {
@@ -148,11 +150,11 @@ I will summon magic to to beat the evil!.
148150 self . set_next_state ( GameStateEnum :: GameOver ) ;
149151 }
150152
151- // Check projectile-enemy collisions
152- self . check_projectile_enemy_collisions ( ) ;
153-
154153 // Check enemy-enemy collisions with elastic bounce
155154 self . check_enemy_collisions ( ) ;
155+
156+ // Check projectile-enemy collisions
157+ self . check_projectile_enemy_collisions ( )
156158 }
157159
158160 fn check_enemy_collisions ( & mut self ) {
@@ -198,7 +200,8 @@ I will summon magic to to beat the evil!.
198200 }
199201 }
200202
201- fn check_projectile_enemy_collisions ( & mut self ) {
203+ fn check_projectile_enemy_collisions ( & mut self ) -> u32 {
204+ let mut killed_enemies = 0 ;
202205 for projectile in & self . projectiles {
203206 for enemy in & self . enemies {
204207 let collision_data = check_collision (
@@ -209,7 +212,10 @@ I will summon magic to to beat the evil!.
209212 ) ;
210213
211214 if collision_data. collided {
215+ killed_enemies += 1 ;
212216 self . enemies_to_despawn . insert ( enemy. id ) ;
217+ // we killed it by ourselves, one more xp:
218+
213219 // Energy balls get removed on hit, pulses stay
214220 match projectile. projectile_type {
215221 ProjectileType :: EnergyBall | ProjectileType :: HomingMissile => {
@@ -222,6 +228,7 @@ I will summon magic to to beat the evil!.
222228 }
223229 }
224230 }
231+ killed_enemies
225232 }
226233
227234 pub fn check_player_bounds ( & mut self ) {
@@ -286,6 +293,13 @@ I will summon magic to to beat the evil!.
286293 if is_key_pressed ( KeyCode :: P ) {
287294 self . paused = !self . paused ;
288295 }
296+
297+ if is_key_pressed ( KeyCode :: X ) {
298+ self . num_lvlups = self . player . add_xp ( 100 ) ;
299+ if self . num_lvlups > 0 {
300+ self . set_next_state ( GameStateEnum :: WeaponSelection ) ;
301+ }
302+ }
289303 }
290304
291305 pub fn reload_roto_scripts ( & mut self ) {
@@ -458,17 +472,7 @@ I will summon magic to to beat the evil!.
458472 }
459473
460474 pub fn process_despawns ( & mut self ) {
461- // Award XP for each enemy killed
462- let enemies_killed = self . enemies_to_despawn . len ( ) as u32 ;
463- if enemies_killed > 0 {
464- // Award 1 XP per enemy killed
465- let leveled_up = self . player . add_xp ( enemies_killed) ;
466-
467- // If player leveled up, transition to weapon selection
468- if leveled_up {
469- self . set_next_state ( GameStateEnum :: WeaponSelection ) ;
470- }
471- }
475+ self . enemies_to_despawn . len ( ) as u32 ;
472476
473477 self . enemies
474478 . retain ( |e| !self . enemies_to_despawn . contains ( & e. id ) ) ;
0 commit comments