|
@@ -1,8 +1,7 @@
|
|
|
+use crate::{CombatStats, InputEvent, Map, MoveEvent, Position, RunState, State, WantsToMelee};
|
|
|
use rltk::{Rltk, VirtualKeyCode};
|
|
|
-use crate::{CombatStats, Map, Position, MoveEvent, RunState, State, WantsToMelee, InputEvent};
|
|
|
use specs::prelude::*;
|
|
|
|
|
|
-
|
|
|
/// Handles converting low-level `InputEvent` components (which may
|
|
|
/// represent one of several actions, or even a completely invalid
|
|
|
/// action such as walking into a wall) and dispatches them to the
|
|
@@ -21,7 +20,10 @@ impl<'a> System<'a> for HandleInputEvent {
|
|
|
WriteStorage<'a, MoveEvent>,
|
|
|
);
|
|
|
|
|
|
- fn run(&mut self, (mut event, map, entities, position, stats, mut attack, mut mov): Self::SystemData) {
|
|
|
+ fn run(
|
|
|
+ &mut self,
|
|
|
+ (mut event, map, entities, position, stats, mut attack, mut mov): Self::SystemData,
|
|
|
+ ) {
|
|
|
for (e, ev, pos) in (&entities, &event, &position).join() {
|
|
|
match *ev {
|
|
|
InputEvent::PlayerMovement { delta_x, delta_y } => {
|
|
@@ -31,11 +33,19 @@ impl<'a> System<'a> for HandleInputEvent {
|
|
|
let tgt_y = pos.y + delta_y;
|
|
|
let destination = map.xy_idx(tgt_x, tgt_y);
|
|
|
if let Some(target) = map.get_attackable(destination, &stats) {
|
|
|
- attack.insert(e, WantsToMelee { target })
|
|
|
+ attack
|
|
|
+ .insert(e, WantsToMelee { target })
|
|
|
.expect("Unable to add WantsToAttack");
|
|
|
} else {
|
|
|
- mov.insert(e, MoveEvent { destination, tgt_x, tgt_y })
|
|
|
- .expect("Unable to add MoveEvent");
|
|
|
+ mov.insert(
|
|
|
+ e,
|
|
|
+ MoveEvent {
|
|
|
+ destination,
|
|
|
+ tgt_x,
|
|
|
+ tgt_y,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ .expect("Unable to add MoveEvent");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -52,33 +62,74 @@ pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState {
|
|
|
match ctx.key {
|
|
|
None => return RunState::AwaitingInput, // Nothing happened
|
|
|
Some(key) => match key {
|
|
|
- VirtualKeyCode::Left | VirtualKeyCode::Numpad4 | VirtualKeyCode::H =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: -1, delta_y: 0 }),
|
|
|
+ VirtualKeyCode::Left | VirtualKeyCode::Numpad4 | VirtualKeyCode::H => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: -1,
|
|
|
+ delta_y: 0,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Right | VirtualKeyCode::Numpad6 | VirtualKeyCode::L =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: 1, delta_y: 0 }),
|
|
|
+ VirtualKeyCode::Right | VirtualKeyCode::Numpad6 | VirtualKeyCode::L => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: 1,
|
|
|
+ delta_y: 0,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Up | VirtualKeyCode::Numpad8 | VirtualKeyCode::K =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: 0, delta_y: -1 }),
|
|
|
+ VirtualKeyCode::Up | VirtualKeyCode::Numpad8 | VirtualKeyCode::K => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: 0,
|
|
|
+ delta_y: -1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Down | VirtualKeyCode::Numpad2 | VirtualKeyCode::J =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: 0, delta_y: 1 }),
|
|
|
+ VirtualKeyCode::Down | VirtualKeyCode::Numpad2 | VirtualKeyCode::J => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: 0,
|
|
|
+ delta_y: 1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
// Diagonals
|
|
|
- VirtualKeyCode::Numpad9 | VirtualKeyCode::U =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: 1, delta_y: -1 }),
|
|
|
+ VirtualKeyCode::Numpad9 | VirtualKeyCode::U => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: 1,
|
|
|
+ delta_y: -1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Numpad7 | VirtualKeyCode::Y =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: -1, delta_y: -1 }),
|
|
|
+ VirtualKeyCode::Numpad7 | VirtualKeyCode::Y => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: -1,
|
|
|
+ delta_y: -1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Numpad3 | VirtualKeyCode::N =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: 1, delta_y: 1 }),
|
|
|
+ VirtualKeyCode::Numpad3 | VirtualKeyCode::N => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: 1,
|
|
|
+ delta_y: 1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
- VirtualKeyCode::Numpad1 | VirtualKeyCode::B =>
|
|
|
- input.insert(player, InputEvent::PlayerMovement { delta_x: -1, delta_y: 1 }),
|
|
|
+ VirtualKeyCode::Numpad1 | VirtualKeyCode::B => input.insert(
|
|
|
+ player,
|
|
|
+ InputEvent::PlayerMovement {
|
|
|
+ delta_x: -1,
|
|
|
+ delta_y: 1,
|
|
|
+ },
|
|
|
+ ),
|
|
|
|
|
|
_ => return RunState::AwaitingInput,
|
|
|
},
|
|
|
- }.expect("Unable to insert player movement");
|
|
|
+ }
|
|
|
+ .expect("Unable to insert player movement");
|
|
|
RunState::PlayerTurn
|
|
|
}
|