Input can now deduce pressing and holding keys
This commit is contained in:
parent
39e0c8e808
commit
8bb59e7b6c
@ -87,7 +87,7 @@ namespace nf {
|
||||
break;
|
||||
}
|
||||
}
|
||||
updateInput();
|
||||
updateMouse();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
}
|
||||
mainThread.join();
|
||||
@ -137,13 +137,21 @@ namespace nf {
|
||||
return m_FPS;
|
||||
}
|
||||
|
||||
bool Application::isInput(unsigned int code) {
|
||||
bool Application::isKeyHeld(unsigned int code) {
|
||||
if (code < 164) {
|
||||
return m_input[code];
|
||||
return m_keys[code].first;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Application::isKeyPressed(unsigned int code) {
|
||||
if (code < 164) {
|
||||
if (m_keys[code].second) {
|
||||
m_keys[code].second = false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Application::trackMouse(bool track) {
|
||||
@ -216,13 +224,7 @@ namespace nf {
|
||||
}
|
||||
}
|
||||
|
||||
void Application::updateInput() {
|
||||
for (unsigned int i = 0; i < 164; i++) {
|
||||
if (GetFocus() == m_window)
|
||||
m_input[i] = GetKeyState(i) & 0x8000;
|
||||
else
|
||||
m_input[i] = false;
|
||||
}
|
||||
void Application::updateMouse() {
|
||||
POINT mouse;
|
||||
GetCursorPos(&mouse);
|
||||
ScreenToClient(m_window, &mouse);
|
||||
@ -343,6 +345,18 @@ namespace nf {
|
||||
case WM_MENUCHAR: {
|
||||
return MNC_CLOSE << 16;
|
||||
}
|
||||
case WM_KEYDOWN: {
|
||||
if (wParam < 164 && !(lParam & (1 << 30)))
|
||||
app->m_keys[wParam].first = app->m_keys[wParam].second = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
case WM_KEYUP: {
|
||||
if (wParam < 164)
|
||||
app->m_keys[wParam].first = app->m_keys[wParam].second = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
case WM_SETCURSOR: {
|
||||
if (LOWORD(lParam) != HTCLIENT)
|
||||
break;
|
||||
|
@ -24,10 +24,10 @@ namespace nf {
|
||||
scale += 0.12 * deltaTime;
|
||||
}
|
||||
|
||||
if (dur.count() > 3.5 || app->isInput(NFI_SPACE)) {
|
||||
if (dur.count() > 3.5 || app->isKeyPressed(NFI_SPACE)) {
|
||||
app->changeState(app->getDefaultState());
|
||||
}
|
||||
if (app->isInput(NFI_ESCAPE))
|
||||
if (app->isKeyPressed(NFI_ESCAPE))
|
||||
app->quit();
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include <chrono>
|
||||
#include <unordered_map>
|
||||
#include <array>
|
||||
#include <Windows.h>
|
||||
|
||||
#include "Config.h"
|
||||
@ -29,7 +30,8 @@ namespace nf {
|
||||
void changeConfig(const Config& in);
|
||||
const Config& getConfig() const;
|
||||
int getFPS() const;
|
||||
bool isInput(unsigned int code);
|
||||
bool isKeyHeld(unsigned int code);
|
||||
bool isKeyPressed(unsigned int code);
|
||||
void trackMouse(bool track);
|
||||
void getMouseDiff(int& x, int& y);
|
||||
static Application* getApp();
|
||||
@ -41,7 +43,7 @@ namespace nf {
|
||||
RECT getWindowRect() const;
|
||||
void calculateNewWindowPos(int& x, int& y);
|
||||
void toggleFullscreen();
|
||||
void updateInput();
|
||||
void updateMouse();
|
||||
void runMainGameThread();
|
||||
void doStateChange();
|
||||
static void setApp(Application* app);
|
||||
@ -77,7 +79,7 @@ namespace nf {
|
||||
std::string m_nextState;
|
||||
|
||||
//Array of booleans that represent keyboard and mouse input minus the scrollwheel
|
||||
bool m_input[164];
|
||||
std::array<std::pair<bool, bool>, 164> m_keys;
|
||||
unsigned int m_mouseX, m_mouseY;
|
||||
bool m_trackingMouse;
|
||||
bool m_mouseTrackFirst;
|
||||
|
@ -3,6 +3,7 @@
|
||||
#pragma once
|
||||
#include <chrono>
|
||||
#include <unordered_map>
|
||||
#include <array>
|
||||
#include <Windows.h>
|
||||
|
||||
#include "Config.h"
|
||||
@ -82,7 +83,8 @@ namespace nf {
|
||||
void changeConfig(const Config& in);
|
||||
const Config& getConfig() const;
|
||||
int getFPS() const;
|
||||
bool isInput(unsigned int code);
|
||||
bool isKeyHeld(unsigned int code);
|
||||
bool isKeyPressed(unsigned int code);
|
||||
void trackMouse(bool track);
|
||||
void getMouseDiff(int& x, int& y);
|
||||
static Application* getApp();
|
||||
@ -94,7 +96,7 @@ namespace nf {
|
||||
RECT getWindowRect() const;
|
||||
void calculateNewWindowPos(int& x, int& y);
|
||||
void toggleFullscreen();
|
||||
void updateInput();
|
||||
void updateMouse();
|
||||
void runMainGameThread();
|
||||
void doStateChange();
|
||||
static void setApp(Application* app);
|
||||
@ -130,7 +132,7 @@ namespace nf {
|
||||
std::string m_nextState;
|
||||
|
||||
//Array of booleans that represent keyboard and mouse input minus the scrollwheel
|
||||
bool m_input[164];
|
||||
std::array<std::pair<bool, bool>, 164> m_keys;
|
||||
unsigned int m_mouseX, m_mouseY;
|
||||
bool m_trackingMouse;
|
||||
bool m_mouseTrackFirst;
|
||||
|
Reference in New Issue
Block a user