1
- use std:: collections:: HashMap ;
2
-
3
1
use bevy:: prelude:: * ;
4
2
3
+ #[ derive( Default ) ]
5
4
struct Enemy {
6
5
hit_points : u32 ,
7
6
}
8
7
9
- struct CharacterTemplate {
10
- hit_points : HashMap < & ' static str , u32 > ,
11
- }
12
-
13
8
fn despawn_dead_enemies ( mut commands : Commands , enemies : Query < ( Entity , & Enemy ) > ) {
14
9
for ( entity, enemy) in enemies. iter ( ) {
15
10
if enemy. hit_points == 0 {
@@ -24,10 +19,10 @@ fn hurt_enemies(mut enemies: Query<&mut Enemy>) {
24
19
}
25
20
}
26
21
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
+ }
31
26
}
32
27
33
28
#[ test]
@@ -72,7 +67,7 @@ fn did_despawn_enemy() {
72
67
}
73
68
74
69
#[ test]
75
- fn spawned_from_resource ( ) {
70
+ fn spawn_enemy_using_input_resource ( ) {
76
71
// Setup world
77
72
let mut world = World :: default ( ) ;
78
73
@@ -81,18 +76,21 @@ fn spawned_from_resource() {
81
76
update_stage. add_system ( spawn_enemy. system ( ) ) ;
82
77
83
78
// 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 ) ;
87
82
88
83
// Run systems
89
84
update_stage. run ( & mut world) ;
90
85
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 ) ;
98
96
}
0 commit comments