48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
#pragma once
|
|
#include "../IInputDevice.h"
|
|
#include "KeyboardState.h"
|
|
#include "../../Utilities/Stopwatch.h"
|
|
|
|
using Stopwatch = TLAC::Utilities::Stopwatch;
|
|
|
|
namespace TLAC::Input
|
|
{
|
|
constexpr float DOUBLE_TAP_THRESHOLD = 200.0f;
|
|
constexpr float INTERVAL_TAP_DELAY_THRESHOLD = 500.0f;
|
|
constexpr float INTERVAL_TAP_THRESHOLD = 75.0f;
|
|
|
|
class Keyboard : public IInputDevice
|
|
{
|
|
public:
|
|
static Keyboard* GetInstance();
|
|
|
|
bool PollInput() override;
|
|
bool IsDown(BYTE keycode);
|
|
bool IsUp(BYTE keycode);
|
|
bool IsTapped(BYTE keycode);
|
|
bool IsDoubleTapped(BYTE keycode);
|
|
bool IsReleased(BYTE keycode);
|
|
bool IsIntervalTapped(BYTE keycode);
|
|
|
|
bool WasDown(BYTE keycode);
|
|
bool WasUp(BYTE keycode);
|
|
|
|
private:
|
|
Keyboard();
|
|
KeyboardState lastState;
|
|
KeyboardState currentState;
|
|
|
|
Stopwatch keyIntervalWatch;
|
|
|
|
BYTE keyDoubleTapStates[KEYBOARD_KEYS];
|
|
Stopwatch keyDoubleTapWatches[KEYBOARD_KEYS];
|
|
|
|
BOOL keyIntervalInitials[KEYBOARD_KEYS];
|
|
BYTE keyIntervalTapStates[KEYBOARD_KEYS];
|
|
FLOAT keyIntervalTapTimes[KEYBOARD_KEYS];
|
|
|
|
static Keyboard* instance;
|
|
};
|
|
}
|
|
|