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]]
name = "android_logger"
version = "0.11.2"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c0c6cfd3264e874d461c0316a78fb78e4147562c68a64881af36fe10573613e"
checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a"
dependencies = [
"android_log-sys",
"env_logger",

View File

@@ -16,7 +16,6 @@ impl Plugin for FruitPlugin {
app.add_event::<EatenEvent>()
.add_startup_system(spawn_fruit_system)
.add_system(eat_fruit_system.run_if(tick_triggered))
.add_system(debug_eaten_event_system)
.add_system(despawn_fruit_system)
.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 bevy::{prelude::*, render::camera::ScalingMode};
use bevy_editor_pls::prelude::*;
use bevy_tweening::TweeningPlugin;
use grid::{SEGMENT_SIZE, SIZE};
use iyes_loopless::prelude::*;
#[cfg(debug_assertions)]
use bevy_editor_pls::prelude::*;
mod canvas;
mod fruit;
mod grid;
@@ -24,8 +26,9 @@ enum AppState {
}
fn main() {
App::new()
.insert_resource(ClearColor(Color::rgb_u8(12, 12, 12)))
let mut app = App::new();
app.insert_resource(ClearColor(Color::rgb_u8(12, 12, 12)))
.add_loopless_state(AppState::Begin)
.add_plugins(DefaultPlugins.set(WindowPlugin {
window: WindowDescriptor {
@@ -37,7 +40,6 @@ fn main() {
},
..Default::default()
}))
.add_plugin(EditorPlugin)
.add_plugin(TweeningPlugin)
.add_plugin(TickPlugin)
.add_plugin(SnakePlugin)
@@ -46,8 +48,12 @@ fn main() {
.add_startup_system(setup_system)
.add_system(camera_move_system)
.add_system(bevy::window::close_on_esc)
.add_system(pause_system)
.run();
.add_system(pause_system);
#[cfg(debug_assertions)]
app.add_plugin(EditorPlugin);
app.run();
}
fn setup_system(mut commands: Commands) {

View File

@@ -4,9 +4,6 @@ mod movement;
use crate::{fruit, grid, tick::tick_triggered, AppState};
use bevy::prelude::*;
use bulge::{
add_bulge_system, animate_bulge_system, propagate_bulge_system, BulgePropagationTimer,
};
use itertools::Itertools;
use iyes_loopless::prelude::*;
@@ -24,7 +21,8 @@ impl Plugin for SnakePlugin {
fn build(&self, app: &mut App) {
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_stage_after(CoreStage::Update, MovementStage, movement_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(grid_transform_system.run_in_state(AppState::InGame))
.add_system(add_tail_system)
.add_system(add_bulge_system)
.add_system(propagate_bulge_system)
.add_system(animate_bulge_system);
.add_system(bulge::add_bulge_system)
.add_system(bulge::propagate_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,
}
pub struct AddTailEvent;
fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate) -> Entity {
commands
.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(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
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 =
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),
}
}
#[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 crate::{fruit, tick::TICK_PERIOD};
use super::{AddTailEvent, Segments, Snake, SnakeHead, SnakeSegment};
use crate::tick::TICK_PERIOD;
use bevy::prelude::*;
use bevy_tweening::{lens::TransformScaleLens, *};
use std::time::Duration;
@@ -9,9 +9,9 @@ use std::time::Duration;
pub(super) struct BulgeMarker;
#[derive(Resource)]
pub(super) struct BulgePropagationTimer(Timer);
pub(super) struct PropagationTimer(Timer);
impl Default for BulgePropagationTimer {
impl Default for PropagationTimer {
fn default() -> Self {
Self(Timer::new(
Duration::from_millis(TICK_PERIOD / 4),
@@ -22,10 +22,10 @@ impl Default for BulgePropagationTimer {
pub(super) fn add_bulge_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
mut tail_event_reader: EventReader<AddTailEvent>,
query: Query<Entity, With<SnakeHead>>,
) {
for _ in eaten_event_reader.iter() {
for _ in tail_event_reader.iter() {
let snake_head_entity = query.single();
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>)>,
snake_query: Query<&Segments, With<Snake>>,
time: Res<Time>,
mut timer: ResMut<BulgePropagationTimer>,
mut timer: ResMut<PropagationTimer>,
) {
timer.0.tick(time.delta());

View File

@@ -0,0 +1 @@