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