Some refactoring
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -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",
|
||||
|
||||
10
src/fruit.rs
10
src/fruit.rs
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
18
src/main.rs
18
src/main.rs
@@ -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) {
|
||||
|
||||
45
src/snake.rs
45
src/snake.rs
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
Reference in New Issue
Block a user