Проектная работа - WIP

This commit is contained in:
8 changed files with 171 additions and 139 deletions
+55
View File
@@ -0,0 +1,55 @@
use crate::domain::*;
use bevy::prelude::*;
#[allow(unused)]
/// Слушатель событий [GridBarier] для хвоста, обновляющий направление его движения из ресурса [SnakePath] и позволяющий следовать за головой
pub fn tail_observer(
event: On<GridBarier>,
mut query: Query<(&mut Direction, &Transform)>,
snake_path: Res<SnakePath>,
) {
trace!("...changing direction: triggered");
if event.observer() == event.0 {
trace!("...changing direction: observer == event.0");
if let Ok((mut direction, transform)) = query.get_mut(event.0) {
trace!("...changing direction: query success");
if let Some(new_direction) = snake_path.pick(transform) {
trace!("change direction for {:?} to {:?}", event.0, new_direction);
*direction = new_direction;
}
}
}
}
/// Слушатель событий [GridBarier] для конца змеи, обновляющий направление его движения из ресурса [SnakePath] и удаляющий полученные значения из [SnakePath]
pub fn cleanup_snake_path(
event: On<GridBarier>,
mut commands: Commands,
query: Query<&Transform, With<End>>,
) {
if let Ok(transform) = query.get(event.0) {
// trace!("schedule cleaning SnakePath for {:?}", transform);
let transform = transform.clone();
commands.queue(move |world: &mut World| {
let mut snake_path = world.resource_mut::<SnakePath>();
if let Some((x, y, dir)) = snake_path.drop(&transform) {
trace!(
"removed entry from SnakePath: ({:?}, {:?}) => {:?}\n\tsnake_path: {:?}",
x, y, dir, *snake_path
);
}
});
}
}
/// Запланировать установку скорости движения [Velocity] при следующем событии [GridBarier]
pub fn schedule_set_velocity(tail: Entity) -> impl Fn(On<GridBarier>, Commands) {
move |event: On<GridBarier>, mut commands: Commands| {
commands
.entity(tail)
.entry::<Velocity>()
.and_modify(|mut velocity| velocity.0 = SNAKE_VELOCITY as f32);
commands.entity(event.observer()).despawn();
}
}