Skip to content
Snippets Groups Projects
player.rs 1003 B
Newer Older
use std::time::Duration;

use bevy::math::ivec2;
use bevy::prelude::*;

use crate::entities::lifecycle::Player;
use crate::entities::timing::ActionCooldown;
use crate::world::level_map::GridPosition;

pub fn handle_player_input(
	mut commands: Commands,
	input: Res<Input<KeyCode>>,
	mut query: Query<(Entity, &mut GridPosition), (With<Player>, Without<ActionCooldown>)>,
) {
	let mut dx = 0;
	let mut dy = 0;

	if input.pressed(KeyCode::D) || input.pressed(KeyCode::Right) {
	if input.pressed(KeyCode::W) || input.pressed(KeyCode::Up) {
	if input.pressed(KeyCode::A) || input.pressed(KeyCode::Left) {
	if input.pressed(KeyCode::S) || input.pressed(KeyCode::Down) {
	for (entity, mut position) in &mut query {
		if dx != 0 || dy != 0 {
			let next_position = (position.0.as_ivec2()) + ivec2(dx, dy);
			**position = next_position.as_uvec2();
			commands
				.entity(entity)
				.insert(ActionCooldown::from(Duration::from_millis(250)));
		}