Skip to content
This repository was archived by the owner on Oct 25, 2021. It is now read-only.

Commit efaf66d

Browse files
sunreefmarotili
authored andcommitted
Add camera movement when using the arrow keys. (#75)
* Add camera movement
1 parent 60cf0f1 commit efaf66d

File tree

5 files changed

+70
-1
lines changed

5 files changed

+70
-1
lines changed

resources/input.ron

+18
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,23 @@
1515
"SlowDown": [
1616
[Key(Subtract)]
1717
],
18+
"CameraMoveUp": [
19+
[Key(Up)]
20+
],
21+
"CameraMoveDown": [
22+
[Key(Down)]
23+
],
24+
"CameraMoveLeft": [
25+
[Key(Left)]
26+
],
27+
"CameraMoveRight": [
28+
[Key(Right)]
29+
],
30+
"CameraMoveForward": [
31+
[Key(LShift), Key(Up)]
32+
],
33+
"CameraMoveBackward": [
34+
[Key(LShift), Key(Down)]
35+
],
1836
},
1937
)

src/states/main_game.rs

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ impl MainGameState {
3737
MainGameState {
3838
dispatcher: DispatcherBuilder::new()
3939
.with_pool(pool)
40+
.with(
41+
camera_movement::CameraMovementSystem::default(),
42+
"camera_movement",
43+
&[],
44+
)
4045
.with(perception::SpatialGridSystem, "spatial_grid", &[])
4146
.with(
4247
perception::EntityDetectionSystem,

src/systems/camera_movement.rs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use amethyst::{
2+
core::{Named, Time, Transform},
3+
ecs::*,
4+
input::InputHandler,
5+
renderer::Camera,
6+
};
7+
8+
#[derive(Default)]
9+
pub struct CameraMovementSystem {}
10+
11+
impl<'s> System<'s> for CameraMovementSystem {
12+
type SystemData = (
13+
ReadStorage<'s, Camera>,
14+
ReadStorage<'s, Named>,
15+
WriteStorage<'s, Transform>,
16+
Read<'s, InputHandler<String, String>>,
17+
Read<'s, Time>,
18+
);
19+
20+
fn run(&mut self, (cameras, names, mut transforms, input_handler, time): Self::SystemData) {
21+
let delta_time = time.delta_real_seconds();
22+
let move_factor = 12.0 * delta_time;
23+
for (_, name, transform) in (&cameras, &names, &mut transforms).join() {
24+
if name.name == "Main camera" {
25+
if input_handler.action_is_down("CameraMoveUp").unwrap() {
26+
transform.move_up(move_factor);
27+
}
28+
if input_handler.action_is_down("CameraMoveDown").unwrap() {
29+
transform.move_down(move_factor);
30+
}
31+
if input_handler.action_is_down("CameraMoveLeft").unwrap() {
32+
transform.move_left(move_factor);
33+
}
34+
if input_handler.action_is_down("CameraMoveRight").unwrap() {
35+
transform.move_right(move_factor);
36+
}
37+
if input_handler.action_is_down("CameraMoveForward").unwrap() {
38+
transform.move_forward(move_factor);
39+
}
40+
if input_handler.action_is_down("CameraMoveBackward").unwrap() {
41+
transform.move_backward(move_factor);
42+
}
43+
}
44+
}
45+
}
46+
}

src/systems/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod behaviors;
2+
pub mod camera_movement;
23
pub mod collision;
34
pub mod combat;
45
pub mod debug;

src/systems/movement.rs

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ impl<'s> System<'s> for MovementSystem {
1616
if movement.velocity.magnitude() > movement.max_movement_speed {
1717
movement.velocity = movement.velocity.normalize() * movement.max_movement_speed;
1818
}
19-
2019
transform.translate_x(movement.velocity.x * delta_time);
2120
transform.translate_y(movement.velocity.y * delta_time);
2221
}

0 commit comments

Comments
 (0)