97 lines
1.5 KiB
C
97 lines
1.5 KiB
C
|
|
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
|
||
|
|
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
|
||
|
|
// SPDX-License-Identifier: MIT
|
||
|
|
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
class ApplicationWindow;
|
||
|
|
|
||
|
|
enum class EKey
|
||
|
|
{
|
||
|
|
Invalid,
|
||
|
|
Unknown,
|
||
|
|
A,
|
||
|
|
B,
|
||
|
|
C,
|
||
|
|
D,
|
||
|
|
E,
|
||
|
|
F,
|
||
|
|
G,
|
||
|
|
H,
|
||
|
|
I,
|
||
|
|
J,
|
||
|
|
K,
|
||
|
|
L,
|
||
|
|
M,
|
||
|
|
N,
|
||
|
|
O,
|
||
|
|
P,
|
||
|
|
Q,
|
||
|
|
R,
|
||
|
|
S,
|
||
|
|
T,
|
||
|
|
U,
|
||
|
|
V,
|
||
|
|
W,
|
||
|
|
X,
|
||
|
|
Y,
|
||
|
|
Z,
|
||
|
|
Num0,
|
||
|
|
Num1,
|
||
|
|
Num2,
|
||
|
|
Num3,
|
||
|
|
Num4,
|
||
|
|
Num5,
|
||
|
|
Num6,
|
||
|
|
Num7,
|
||
|
|
Num8,
|
||
|
|
Num9,
|
||
|
|
Space,
|
||
|
|
Comma,
|
||
|
|
Period,
|
||
|
|
Escape,
|
||
|
|
LShift,
|
||
|
|
RShift,
|
||
|
|
LControl,
|
||
|
|
RControl,
|
||
|
|
LAlt,
|
||
|
|
RAlt,
|
||
|
|
Left,
|
||
|
|
Right,
|
||
|
|
Up,
|
||
|
|
Down,
|
||
|
|
Return,
|
||
|
|
NumKeys,
|
||
|
|
};
|
||
|
|
|
||
|
|
/// Keyboard interface class which keeps track on the status of all keys and keeps track of the list of keys pressed.
|
||
|
|
class Keyboard
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
/// Constructor
|
||
|
|
Keyboard() = default;
|
||
|
|
virtual ~Keyboard() = default;
|
||
|
|
|
||
|
|
/// Initialization / shutdown
|
||
|
|
virtual bool Initialize(ApplicationWindow *inWindow) = 0;
|
||
|
|
virtual void Shutdown() = 0;
|
||
|
|
|
||
|
|
/// Update the keyboard state
|
||
|
|
virtual void Poll() = 0;
|
||
|
|
|
||
|
|
/// Checks if a key is pressed or not
|
||
|
|
virtual bool IsKeyPressed(EKey inKey) const = 0;
|
||
|
|
|
||
|
|
/// Checks if a key is pressed and was not pressed the last time this function was called (state is stored in ioPrevState)
|
||
|
|
bool IsKeyPressedAndTriggered(EKey inKey, bool &ioPrevState) const
|
||
|
|
{
|
||
|
|
bool prev_state = ioPrevState;
|
||
|
|
ioPrevState = IsKeyPressed(inKey);
|
||
|
|
return ioPrevState && !prev_state;
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Buffered keyboard input, returns EKey::Invalid for none
|
||
|
|
virtual EKey GetFirstKey() = 0;
|
||
|
|
virtual EKey GetNextKey() = 0;
|
||
|
|
};
|