Skip to content
Snippets Groups Projects
player.rs 781 B
Newer Older
use bevy::math::ivec2;
use bevy::prelude::*;

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

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

	if input.just_released(KeyCode::D) || input.just_released(KeyCode::Right) {
		dx += 1;
	}
	if input.just_released(KeyCode::W) || input.just_released(KeyCode::Up) {
		dy += 1;
	}
	if input.just_released(KeyCode::A) || input.just_released(KeyCode::Left) {
		dx -= 1;
	}
	if input.just_released(KeyCode::S) || input.just_released(KeyCode::Down) {
		dy -= 1;
	}

	for mut position in &mut query {
		let next_position = (position.0.as_ivec2()) + ivec2(dx, dy);
		**position = next_position.as_uvec2();
	}
}