Some refactoring

This commit is contained in:
2022-12-19 21:38:48 +01:00
parent c771e5f95e
commit 2b1adfc4b7
7 changed files with 59 additions and 34 deletions

4
Cargo.lock generated
View File

@@ -92,9 +92,9 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
[[package]] [[package]]
name = "android_logger" name = "android_logger"
version = "0.11.2" version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c0c6cfd3264e874d461c0316a78fb78e4147562c68a64881af36fe10573613e" checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a"
dependencies = [ dependencies = [
"android_log-sys", "android_log-sys",
"env_logger", "env_logger",

View File

@@ -16,7 +16,6 @@ impl Plugin for FruitPlugin {
app.add_event::<EatenEvent>() app.add_event::<EatenEvent>()
.add_startup_system(spawn_fruit_system) .add_startup_system(spawn_fruit_system)
.add_system(eat_fruit_system.run_if(tick_triggered)) .add_system(eat_fruit_system.run_if(tick_triggered))
.add_system(debug_eaten_event_system)
.add_system(despawn_fruit_system) .add_system(despawn_fruit_system)
.add_system(spawn_fruit_system.run_if(eaten_event_sent)); .add_system(spawn_fruit_system.run_if(eaten_event_sent));
} }
@@ -88,12 +87,3 @@ fn despawn_fruit_system(mut commands: Commands, mut event_reader: EventReader<Ea
} }
} }
} }
fn debug_eaten_event_system(
mut event_writer: EventWriter<EatenEvent>,
keypress: Res<Input<KeyCode>>,
) {
if keypress.just_pressed(KeyCode::Space) {
event_writer.send(EatenEvent(None));
}
}

View File

@@ -1,10 +1,12 @@
use crate::{canvas::CanvasPlugin, fruit::FruitPlugin, snake::SnakePlugin, tick::TickPlugin}; use crate::{canvas::CanvasPlugin, fruit::FruitPlugin, snake::SnakePlugin, tick::TickPlugin};
use bevy::{prelude::*, render::camera::ScalingMode}; use bevy::{prelude::*, render::camera::ScalingMode};
use bevy_editor_pls::prelude::*;
use bevy_tweening::TweeningPlugin; use bevy_tweening::TweeningPlugin;
use grid::{SEGMENT_SIZE, SIZE}; use grid::{SEGMENT_SIZE, SIZE};
use iyes_loopless::prelude::*; use iyes_loopless::prelude::*;
#[cfg(debug_assertions)]
use bevy_editor_pls::prelude::*;
mod canvas; mod canvas;
mod fruit; mod fruit;
mod grid; mod grid;
@@ -24,8 +26,9 @@ enum AppState {
} }
fn main() { fn main() {
App::new() let mut app = App::new();
.insert_resource(ClearColor(Color::rgb_u8(12, 12, 12)))
app.insert_resource(ClearColor(Color::rgb_u8(12, 12, 12)))
.add_loopless_state(AppState::Begin) .add_loopless_state(AppState::Begin)
.add_plugins(DefaultPlugins.set(WindowPlugin { .add_plugins(DefaultPlugins.set(WindowPlugin {
window: WindowDescriptor { window: WindowDescriptor {
@@ -37,7 +40,6 @@ fn main() {
}, },
..Default::default() ..Default::default()
})) }))
.add_plugin(EditorPlugin)
.add_plugin(TweeningPlugin) .add_plugin(TweeningPlugin)
.add_plugin(TickPlugin) .add_plugin(TickPlugin)
.add_plugin(SnakePlugin) .add_plugin(SnakePlugin)
@@ -46,8 +48,12 @@ fn main() {
.add_startup_system(setup_system) .add_startup_system(setup_system)
.add_system(camera_move_system) .add_system(camera_move_system)
.add_system(bevy::window::close_on_esc) .add_system(bevy::window::close_on_esc)
.add_system(pause_system) .add_system(pause_system);
.run();
#[cfg(debug_assertions)]
app.add_plugin(EditorPlugin);
app.run();
} }
fn setup_system(mut commands: Commands) { fn setup_system(mut commands: Commands) {

View File

@@ -4,9 +4,6 @@ mod movement;
use crate::{fruit, grid, tick::tick_triggered, AppState}; use crate::{fruit, grid, tick::tick_triggered, AppState};
use bevy::prelude::*; use bevy::prelude::*;
use bulge::{
add_bulge_system, animate_bulge_system, propagate_bulge_system, BulgePropagationTimer,
};
use itertools::Itertools; use itertools::Itertools;
use iyes_loopless::prelude::*; use iyes_loopless::prelude::*;
@@ -24,7 +21,8 @@ impl Plugin for SnakePlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
let movement_stage = SystemStage::parallel(); let movement_stage = SystemStage::parallel();
app.insert_resource(BulgePropagationTimer::default()) app.add_event::<AddTailEvent>()
.insert_resource(bulge::PropagationTimer::default())
.add_startup_system(setup_snake_system) .add_startup_system(setup_snake_system)
.add_stage_after(CoreStage::Update, MovementStage, movement_stage) .add_stage_after(CoreStage::Update, MovementStage, movement_stage)
.add_system_to_stage( .add_system_to_stage(
@@ -55,9 +53,13 @@ impl Plugin for SnakePlugin {
.add_system(change_direction_system.run_in_state(AppState::InGame)) .add_system(change_direction_system.run_in_state(AppState::InGame))
.add_system(grid_transform_system.run_in_state(AppState::InGame)) .add_system(grid_transform_system.run_in_state(AppState::InGame))
.add_system(add_tail_system) .add_system(add_tail_system)
.add_system(add_bulge_system) .add_system(bulge::add_bulge_system)
.add_system(propagate_bulge_system) .add_system(bulge::propagate_bulge_system)
.add_system(animate_bulge_system); .add_system(bulge::animate_bulge_system)
.add_system(eaten_event_system);
#[cfg(debug_assertions)]
app.add_system(debug::add_tail);
} }
} }
@@ -118,6 +120,8 @@ struct Collision {
about_to_collide: bool, about_to_collide: bool,
} }
pub struct AddTailEvent;
fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate) -> Entity { fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate) -> Entity {
commands commands
.spawn(SpriteBundle { .spawn(SpriteBundle {
@@ -167,12 +171,21 @@ fn add_direction_system(
} }
} }
fn eaten_event_system(
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
mut tail_event_writer: EventWriter<AddTailEvent>,
) {
eaten_event_reader
.iter()
.for_each(|_| tail_event_writer.send(AddTailEvent));
}
fn add_tail_system( fn add_tail_system(
mut commands: Commands, mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
mut snake_query: Query<(Entity, &mut Segments), With<Snake>>, mut snake_query: Query<(Entity, &mut Segments), With<Snake>>,
mut tail_event_reader: EventReader<AddTailEvent>,
) { ) {
for _ in eaten_event_reader.iter() { for _ in tail_event_reader.iter() {
let segment = let segment =
create_snake_segment(&mut commands, grid::Coordinate::splat(grid::Index::MIN / 2)); create_snake_segment(&mut commands, grid::Coordinate::splat(grid::Index::MIN / 2));
@@ -286,3 +299,17 @@ fn next_grid_coordinate(
Direction::Right => *current_coordinate + grid::Coordinate(1, 0), Direction::Right => *current_coordinate + grid::Coordinate(1, 0),
} }
} }
#[cfg(debug_assertions)]
mod debug {
use super::*;
pub(super) fn add_tail(
keypress: Res<Input<KeyCode>>,
mut tail_event_writer: EventWriter<AddTailEvent>,
) {
if keypress.just_pressed(KeyCode::Space) {
tail_event_writer.send(AddTailEvent);
}
}
}

View File

@@ -0,0 +1 @@

View File

@@ -1,5 +1,5 @@
use super::{Segments, Snake, SnakeHead, SnakeSegment}; use super::{AddTailEvent, Segments, Snake, SnakeHead, SnakeSegment};
use crate::{fruit, tick::TICK_PERIOD}; use crate::tick::TICK_PERIOD;
use bevy::prelude::*; use bevy::prelude::*;
use bevy_tweening::{lens::TransformScaleLens, *}; use bevy_tweening::{lens::TransformScaleLens, *};
use std::time::Duration; use std::time::Duration;
@@ -9,9 +9,9 @@ use std::time::Duration;
pub(super) struct BulgeMarker; pub(super) struct BulgeMarker;
#[derive(Resource)] #[derive(Resource)]
pub(super) struct BulgePropagationTimer(Timer); pub(super) struct PropagationTimer(Timer);
impl Default for BulgePropagationTimer { impl Default for PropagationTimer {
fn default() -> Self { fn default() -> Self {
Self(Timer::new( Self(Timer::new(
Duration::from_millis(TICK_PERIOD / 4), Duration::from_millis(TICK_PERIOD / 4),
@@ -22,10 +22,10 @@ impl Default for BulgePropagationTimer {
pub(super) fn add_bulge_system( pub(super) fn add_bulge_system(
mut commands: Commands, mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>, mut tail_event_reader: EventReader<AddTailEvent>,
query: Query<Entity, With<SnakeHead>>, query: Query<Entity, With<SnakeHead>>,
) { ) {
for _ in eaten_event_reader.iter() { for _ in tail_event_reader.iter() {
let snake_head_entity = query.single(); let snake_head_entity = query.single();
commands.entity(snake_head_entity).insert(BulgeMarker); commands.entity(snake_head_entity).insert(BulgeMarker);
} }
@@ -36,7 +36,7 @@ pub(super) fn propagate_bulge_system(
bulge_segment_query: Query<(Entity, &Parent), (With<SnakeSegment>, With<BulgeMarker>)>, bulge_segment_query: Query<(Entity, &Parent), (With<SnakeSegment>, With<BulgeMarker>)>,
snake_query: Query<&Segments, With<Snake>>, snake_query: Query<&Segments, With<Snake>>,
time: Res<Time>, time: Res<Time>,
mut timer: ResMut<BulgePropagationTimer>, mut timer: ResMut<PropagationTimer>,
) { ) {
timer.0.tick(time.delta()); timer.0.tick(time.delta());

View File

@@ -0,0 +1 @@