Fix direction chance sound effect

This commit is contained in:
2023-03-18 17:51:00 +01:00
parent 5d92c82db4
commit 18f55a9cce
3 changed files with 18 additions and 22 deletions

View File

@@ -24,7 +24,7 @@ pub struct EatenEvent(Option<Entity>);
#[derive(Component)] #[derive(Component)]
pub struct Fruit; pub struct Fruit;
fn eaten_event_sent(mut eaten_event_reader: EventReader<EatenEvent>) -> bool { pub fn eaten_event_sent(mut eaten_event_reader: EventReader<EatenEvent>) -> bool {
eaten_event_reader.iter().count() != 0 eaten_event_reader.iter().count() != 0
} }

View File

@@ -56,7 +56,7 @@ impl Plugin for SnakePlugin {
game_over_system game_over_system
.in_schedule(CoreSchedule::FixedUpdate) .in_schedule(CoreSchedule::FixedUpdate)
.in_set(SystemSet::CollisionDetection) .in_set(SystemSet::CollisionDetection)
.in_set(OnUpdate(GameState::InGame)) .run_if(in_state(GameState::InGame))
.after(collision_system) .after(collision_system)
.run_if(about_to_collide), .run_if(about_to_collide),
) )
@@ -65,20 +65,13 @@ impl Plugin for SnakePlugin {
.run_if(in_state(GameState::InGame)) .run_if(in_state(GameState::InGame))
.run_if(about_to_collide), .run_if(about_to_collide),
) )
.add_system(
tick_sound_system
.in_schedule(CoreSchedule::FixedUpdate)
.run_if(in_state(GameState::InGame))
.run_if(not(about_to_collide)),
)
.add_system( .add_system(
blip_sound_system blip_sound_system
.in_schedule(CoreSchedule::FixedUpdate) .run_if(fruit::eaten_event_sent),
.run_if(in_state(GameState::InGame)),
) )
.add_system(direction::start_game_system.in_set(OnUpdate(GameState::Begin))) .add_system(direction::start_game_system.run_if(in_state(GameState::Begin)))
.add_system(direction::change_direction_system) .add_system(direction::change_direction_system)
.add_system(grid_transform_system.in_set(OnUpdate(GameState::InGame))) .add_system(grid_transform_system.run_if(in_state(GameState::InGame)))
.add_system(add_tail_system) .add_system(add_tail_system)
.add_system(bulge::add_bulge_system) .add_system(bulge::add_bulge_system)
.add_system(bulge::propagate_bulge_system) .add_system(bulge::propagate_bulge_system)
@@ -272,10 +265,6 @@ fn collision_sound_system(audio: Res<Audio>, audio_assets: Res<audio::Assets>) {
audio.play(audio_assets.collision.clone()); audio.play(audio_assets.collision.clone());
} }
fn tick_sound_system(audio: Res<Audio>, audio_assets: Res<audio::Assets>) {
audio.play(audio_assets.tick.clone());
}
fn blip_sound_system( fn blip_sound_system(
audio: Res<Audio>, audio: Res<Audio>,
audio_assets: Res<audio::Assets>, audio_assets: Res<audio::Assets>,

View File

@@ -1,9 +1,9 @@
use super::Snake; use super::Snake;
use crate::GameState; use crate::{audio, GameState};
use bevy::prelude::*; use bevy::prelude::*;
use leafwing_input_manager::prelude::*; use leafwing_input_manager::prelude::*;
#[derive(Actionlike, Component, Copy, Clone, Debug)] #[derive(Actionlike, Component, Copy, Clone, Debug, PartialEq, Eq)]
pub(super) enum Direction { pub(super) enum Direction {
Up, Up,
Down, Down,
@@ -11,7 +11,7 @@ pub(super) enum Direction {
Right, Right,
} }
#[derive(Component, Copy, Clone, Debug)] #[derive(Component, Copy, Clone, Debug, PartialEq, Eq)]
#[component(storage = "SparseSet")] #[component(storage = "SparseSet")]
pub(super) struct NewDirection(Direction); pub(super) struct NewDirection(Direction);
@@ -41,12 +41,14 @@ pub(super) fn apply_direction_system(
pub(super) fn change_direction_system( pub(super) fn change_direction_system(
mut commands: Commands, mut commands: Commands,
mut query: Query<(Entity, &ActionState<Direction>, Option<&Direction>), With<Snake>>, mut query: Query<(Entity, &ActionState<Direction>, Option<&Direction>), With<Snake>>,
audio: Res<Audio>,
audio_assets: Res<audio::Assets>,
) { ) {
let (snake, action_state, direction) = query.single_mut(); let (snake, action_state, direction) = query.single_mut();
let new_direction = action_state.get_pressed().iter().cloned().last(); let new_direction = action_state.get_just_pressed().iter().cloned().last();
if let Some(new_direction) = new_direction { if let Some(new_direction) = new_direction {
if let Some(current_direction) = direction { if let Some(&current_direction) = direction {
if let (Direction::Up, Direction::Down) if let (Direction::Up, Direction::Down)
| (Direction::Down, Direction::Up) | (Direction::Down, Direction::Up)
| (Direction::Left, Direction::Right) | (Direction::Left, Direction::Right)
@@ -54,8 +56,13 @@ pub(super) fn change_direction_system(
{ {
return; return;
} }
}
if new_direction == current_direction {
return;
}
}
commands.entity(snake).insert(NewDirection(new_direction)); commands.entity(snake).insert(NewDirection(new_direction));
audio.play(audio_assets.tick.clone());
} }
} }