summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/src/camera/fly.rs10
-rw-r--r--engine/src/windowing/keyboard.rs28
2 files changed, 33 insertions, 5 deletions
diff --git a/engine/src/camera/fly.rs b/engine/src/camera/fly.rs
index a034851..7996b4d 100644
--- a/engine/src/camera/fly.rs
+++ b/engine/src/camera/fly.rs
@@ -8,7 +8,7 @@ use ecs::{Component, Query};
use crate::builder;
use crate::camera::{Active as ActiveCamera, Camera};
use crate::delta_time::DeltaTime;
-use crate::input::keyboard::{Key, KeyState, Keyboard};
+use crate::input::keyboard::{Key, Keyboard};
use crate::input::mouse::Motion as MouseMotion;
use crate::transform::WorldPosition;
use crate::vector::{Vec2, Vec3};
@@ -112,24 +112,24 @@ fn update(
camera.global_up = cam_right.cross(&direction).normalize();
- if keyboard.get_key_state(Key::W) == KeyState::Pressed {
+ if keyboard.pressed(Key::W) {
camera_world_pos.position +=
direction * fly_camera.speed * delta_time.as_secs_f32();
}
- if keyboard.get_key_state(Key::S) == KeyState::Pressed {
+ if keyboard.pressed(Key::S) {
camera_world_pos.position -=
direction * fly_camera.speed * delta_time.as_secs_f32();
}
- if keyboard.get_key_state(Key::A) == KeyState::Pressed {
+ if keyboard.pressed(Key::A) {
let cam_left = -direction.cross(&Vec3::UP).normalize();
camera_world_pos.position +=
cam_left * fly_camera.speed * delta_time.as_secs_f32();
}
- if keyboard.get_key_state(Key::D) == KeyState::Pressed {
+ if keyboard.pressed(Key::D) {
let cam_right = direction.cross(&Vec3::UP).normalize();
camera_world_pos.position +=
diff --git a/engine/src/windowing/keyboard.rs b/engine/src/windowing/keyboard.rs
index e4fffe5..a1c3e22 100644
--- a/engine/src/windowing/keyboard.rs
+++ b/engine/src/windowing/keyboard.rs
@@ -10,6 +10,34 @@ pub struct Keyboard
impl Keyboard
{
+ /// Returns whether the given key was just pressed this frame. This function will
+ /// return `false` if the key was also pressed the previous frame.
+ pub fn just_pressed(&self, key: Key) -> bool
+ {
+ self.get_key_state(key) == KeyState::Pressed
+ && self.get_prev_key_state(key) == KeyState::Released
+ }
+
+ /// Returns whether the given key was just released this frame. This function will
+ /// return `false` if the key was also released the previous frame.
+ pub fn just_released(&self, key: Key) -> bool
+ {
+ self.get_key_state(key) == KeyState::Released
+ && self.get_prev_key_state(key) == KeyState::Pressed
+ }
+
+ /// Returns whether the given key is currently pressed.
+ pub fn pressed(&self, key: Key) -> bool
+ {
+ self.get_key_state(key) == KeyState::Pressed
+ }
+
+ /// Returns whether the given key is currently released.
+ pub fn released(&self, key: Key) -> bool
+ {
+ self.get_key_state(key) == KeyState::Released
+ }
+
#[must_use]
pub fn get_key_state(&self, key: Key) -> KeyState
{