Abstract GLFW away from main loop close
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include "inferno/core.h"
|
||||
#include "inferno/event/applicationevent.h"
|
||||
#include "inferno/event/event.h"
|
||||
#include "inferno/event/keyevent.h"
|
||||
#include "inferno/input.h"
|
||||
#include "inferno/log.h"
|
||||
#include "inferno/settings.h"
|
||||
@@ -103,11 +104,7 @@ namespace Inferno {
|
||||
{
|
||||
dbg() << "Application startup";
|
||||
|
||||
while(!glfwWindowShouldClose(m_window->getWindow())) {
|
||||
|
||||
if(glfwGetKey(m_window->getWindow(), GLFW_KEY_ESCAPE) == GLFW_PRESS) {
|
||||
glfwSetWindowShouldClose(m_window->getWindow(), GL_TRUE);
|
||||
}
|
||||
while(!m_window->shouldClose()) {
|
||||
|
||||
Command::clearColor({ 0.2f, 0.3f, 0.3f, 1.0f });
|
||||
Command::clear();
|
||||
@@ -137,6 +134,7 @@ namespace Inferno {
|
||||
EventDispatcher dispatcher(e);
|
||||
dispatcher.dispatch<WindowCloseEvent>(NF_BIND_EVENT(Application::onWindowClose));
|
||||
dispatcher.dispatch<WindowResizeEvent>(NF_BIND_EVENT(Application::onWindowResize));
|
||||
dispatcher.dispatch<KeyPressEvent>(NF_BIND_EVENT(Application::onKeyPress));
|
||||
}
|
||||
|
||||
bool Application::onWindowClose(WindowCloseEvent& e)
|
||||
@@ -163,4 +161,20 @@ namespace Inferno {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Application::onKeyPress(KeyPressEvent& e)
|
||||
{
|
||||
// Suppress unused warning
|
||||
(void)e;
|
||||
|
||||
dbgln(Log::Info, "KeyPressEvent {} ({}) triggered",
|
||||
Input::getKeyName(e.getKey()),
|
||||
e.getKey());
|
||||
|
||||
// Stop the main loop on 'Escape' keypress
|
||||
if (e.getKey() == GLFW_KEY_ESCAPE) {
|
||||
m_window->setShouldClose(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
namespace Inferno {
|
||||
|
||||
class Event;
|
||||
class KeyPressEvent;
|
||||
class Texture;
|
||||
class TextureManager;
|
||||
class Window;
|
||||
@@ -25,6 +26,7 @@ namespace Inferno {
|
||||
void onEvent(Event& e);
|
||||
bool onWindowClose(WindowCloseEvent& e);
|
||||
bool onWindowResize(WindowResizeEvent& e);
|
||||
bool onKeyPress(KeyPressEvent& e);
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
|
||||
@@ -68,4 +68,14 @@ namespace Inferno {
|
||||
return getMousePosition().second;
|
||||
}
|
||||
|
||||
const char* Input::getKeyName(int key)
|
||||
{
|
||||
return glfwGetKeyName(key, getKeyScancode(key));
|
||||
}
|
||||
|
||||
int Input::getKeyScancode(int key)
|
||||
{
|
||||
return glfwGetKeyScancode(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,9 @@ namespace Inferno {
|
||||
static float getMouseX();
|
||||
static float getMouseY();
|
||||
|
||||
static const char* getKeyName(int key);
|
||||
static int getKeyScancode(int key);
|
||||
|
||||
// -----------------------------------------
|
||||
|
||||
static inline float getXOffset() { return m_xOffset; }
|
||||
|
||||
@@ -209,4 +209,13 @@ namespace Inferno {
|
||||
glfwSetWindowMonitor(m_window, monitor, xPos, yPos, width, height, refresh);
|
||||
}
|
||||
|
||||
bool Window::shouldClose() const {
|
||||
return glfwWindowShouldClose(m_window);
|
||||
}
|
||||
|
||||
void Window::setShouldClose(bool close) const
|
||||
{
|
||||
glfwSetWindowShouldClose(m_window, close ? GL_TRUE : GL_FALSE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ namespace Inferno {
|
||||
// -----------------------------------------
|
||||
|
||||
void setWindowMonitor();
|
||||
bool shouldClose() const;
|
||||
void setShouldClose(bool close) const;
|
||||
|
||||
inline int getWidth() const { return m_windowProperties.width; }
|
||||
inline int getHeight() const { return m_windowProperties.height; }
|
||||
|
||||
Reference in New Issue
Block a user