From e570d3fb2f64fe04d2b625339848a44b491286ed Mon Sep 17 00:00:00 2001 From: eri Date: Sun, 21 Jul 2024 16:10:16 +0200 Subject: [PATCH] feat: enemy flash --- src/enemy.rs | 55 +++++++++++++++++++++++++++++++++++------ src/tilemap.rs | 43 +++++++++++++++++--------------- src/ui/menu/mappings.rs | 5 ++-- src/ui/widgets.rs | 2 +- 4 files changed, 74 insertions(+), 31 deletions(-) diff --git a/src/enemy.rs b/src/enemy.rs index d0c54f4..34865c2 100644 --- a/src/enemy.rs +++ b/src/enemy.rs @@ -19,12 +19,12 @@ const WEIGHTS: [[u32; 7]; 12] = [ [5, 40, 30, 5, 00, 20, 0], [00, 20, 45, 25, 00, 9, 1], [00, 10, 20, 50, 10, 9, 1], - [00, 00, 5, 55, 20, 19, 1], - [00, 00, 00, 60, 15, 19, 1], - [00, 00, 00, 40, 35, 24, 1], - [00, 00, 00, 20, 50, 29, 1], - [00, 00, 00, 10, 70, 19, 1], - [00, 00, 00, 5, 85, 9, 1], + [00, 00, 5, 55, 20, 19, 0], + [00, 00, 00, 60, 15, 19, 0], + [00, 00, 00, 40, 35, 24, 0], + [00, 00, 00, 20, 50, 29, 0], + [00, 00, 00, 10, 70, 19, 0], + [00, 00, 00, 5, 85, 9, 0], ]; // ······ @@ -43,7 +43,10 @@ impl Plugin for EnemyPlugin { ) .add_systems( Update, - on_damage.in_set(PlaySet::Events), + ( + on_damage.in_set(PlaySet::Events), + enemy_flash.in_set(PlaySet::Animation), + ), ); } } @@ -99,6 +102,9 @@ pub struct Enemy { #[derive(Component)] struct EnemyTurn(Timer); +#[derive(Component)] +struct EnemyFlash(Timer); + // ······ // Events // ······ @@ -119,6 +125,12 @@ fn on_damage( mut next_play_state: ResMut>, ) { for DamageEvent(entity) in damage_reader.read() { + cmd.entity(*entity) + .try_insert(EnemyFlash(Timer::from_seconds( + 0.15, + TimerMode::Once, + ))); + if let Ok(mut enemy) = enemies.get_mut(*entity) { if let EnemyType::EndGame = enemy.typ { next_play_state.set(PlayState::GameWon); @@ -285,6 +297,26 @@ fn enemy_turn(mut cmd: Commands) { ))); } +fn enemy_flash( + mut cmd: Commands, + mut enemies: Query<( + Entity, + &Enemy, + &mut Sprite, + &mut EnemyFlash, + )>, + time: Res