1- use std:: collections:: HashMap ;
2-
31use bevy:: prelude:: * ;
42
3+ #[ derive( Default ) ]
54struct Enemy {
65 hit_points : u32 ,
76}
87
9- struct CharacterTemplate {
10- hit_points : HashMap < & ' static str , u32 > ,
11- }
12-
138fn despawn_dead_enemies ( mut commands : Commands , enemies : Query < ( Entity , & Enemy ) > ) {
149 for ( entity, enemy) in enemies. iter ( ) {
1510 if enemy. hit_points == 0 {
@@ -24,10 +19,10 @@ fn hurt_enemies(mut enemies: Query<&mut Enemy>) {
2419 }
2520}
2621
27- fn spawn_enemy ( mut commands : Commands , character_template : Res < CharacterTemplate > ) {
28- commands . spawn ( ) . insert ( Enemy {
29- hit_points : * character_template . hit_points . get ( "enemy" ) . unwrap ( ) ,
30- } ) ;
22+ fn spawn_enemy ( mut commands : Commands , keyboard_input : Res < Input < KeyCode > > ) {
23+ if keyboard_input . just_pressed ( KeyCode :: Space ) {
24+ commands . spawn ( ) . insert ( Enemy { hit_points : 5 } ) ;
25+ }
3126}
3227
3328#[ test]
@@ -72,7 +67,7 @@ fn did_despawn_enemy() {
7267}
7368
7469#[ test]
75- fn spawned_from_resource ( ) {
70+ fn spawn_enemy_using_input_resource ( ) {
7671 // Setup world
7772 let mut world = World :: default ( ) ;
7873
@@ -81,18 +76,21 @@ fn spawned_from_resource() {
8176 update_stage. add_system ( spawn_enemy. system ( ) ) ;
8277
8378 // Setup test resource
84- let mut hit_points = HashMap :: new ( ) ;
85- hit_points . insert ( "enemy" , 25 ) ;
86- world. insert_resource ( CharacterTemplate { hit_points } ) ;
79+ let mut input = Input :: < KeyCode > :: default ( ) ;
80+ input . press ( KeyCode :: Space ) ;
81+ world. insert_resource ( input ) ;
8782
8883 // Run systems
8984 update_stage. run ( & mut world) ;
9085
91- // Check resulting changes
92- let mut query = world. query :: < & Enemy > ( ) ;
93- let results = query
94- . iter ( & world)
95- . map ( |enemy| enemy. hit_points )
96- . collect :: < Vec < _ > > ( ) ;
97- assert_eq ! ( results, vec![ 25 ] ) ;
86+ // Check resulting changes, one entity has been spawned with `Enemy` component
87+ assert_eq ! ( world. query:: <& Enemy >( ) . iter( & world) . len( ) , 1 ) ;
88+
89+ world. get_resource_mut :: < Input < KeyCode > > ( ) . unwrap ( ) . update ( ) ;
90+
91+ // Run systems
92+ update_stage. run ( & mut world) ;
93+
94+ // Check resulting changes, no new entity has been spawned
95+ assert_eq ! ( world. query:: <& Enemy >( ) . iter( & world) . len( ) , 1 ) ;
9896}
0 commit comments