diff --git a/assets/grass.jpg b/assets/grass.jpg new file mode 100644 index 0000000..d6f64ec Binary files /dev/null and b/assets/grass.jpg differ diff --git a/assets/grass.png b/assets/grass.png new file mode 100644 index 0000000..c05675e Binary files /dev/null and b/assets/grass.png differ diff --git a/src/main.rs b/src/main.rs index 3530c6b..692e2fb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,20 @@ fn setup(mut commands: Commands, assets: Res) { // cameras commands.spawn_bundle(OrthographicCameraBundle::new_2d()); commands.spawn_bundle(UiCameraBundle::default()); + // background + + for x in -20..20 { + for y in -20..20 { + commands.spawn_bundle(SpriteBundle { + texture: assets.load("grass.png"), + transform: Transform { + translation: Vec3::new(x as f32 * 128.0, y as f32 * 128.0, 0.0), + ..Default::default() + }, + ..Default::default() + }); + } + } // arnold himself commands .spawn_bundle(SpriteBundle { @@ -47,13 +61,13 @@ fn setup(mut commands: Commands, assets: Res) { }) .insert(Arnold::new()) .insert(Transform { - translation: Vec3::new(0.0, 0.0, 0.0), + translation: Vec3::new(0.0, 0.0, 10.0), ..Default::default() }); // enemy spawner commands .spawn() - .insert(EnemySpawner::new(Timer::from_seconds(3.0, true))); + .insert(EnemySpawner::new(Timer::from_seconds(1.5, true))); // scoreboard commands .spawn_bundle(TextBundle { @@ -146,6 +160,8 @@ fn projectile_collide_system( projectile_query: Query<(&Projectile, &Transform)>, mut target_query: Query<(Entity, &mut Hitpoints, &Transform)>, ) { + let mut rng = rand::thread_rng(); + for (entity, mut hp, target_transform) in target_query.iter_mut() { for (projectile, projectile_transform) in projectile_query.iter() { if target_transform @@ -153,8 +169,10 @@ fn projectile_collide_system( .distance(projectile_transform.translation) < 32.0 { - hp.hp -= projectile.damage; - stats.damage_dealt += projectile.damage; + let damage_variable = projectile.damage / 5; + let actual_damage = projectile.damage - damage_variable / 2 + rng.gen_range(0..damage_variable + 1); + hp.hp -= actual_damage; + stats.damage_dealt += actual_damage; let font = assets.load("fonts/PressStart2P-Regular.ttf"); let text_style = TextStyle { @@ -169,7 +187,7 @@ fn projectile_collide_system( commands .spawn_bundle(Text2dBundle { text: Text::with_section( - &format!("{}", projectile.damage), + &format!("{}", actual_damage), text_style, text_alignment, ), @@ -361,7 +379,7 @@ fn enemy_spawner_system( }, ..Default::default() }) - .insert(FollowArnold::new(1.0)) + .insert(FollowArnold::new(0.8)) .insert(Hitpoints::new(8)); }