Проектная работа - WIP
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user