2#include <QtOpenGLWidgets/QOpenGLWidget>
3#include <QOpenGLFunctions_4_5_Core>
18namespace Physics {
class PhysicsSystem; }
20class OpenGLWindow :
public QOpenGLWidget,
public QOpenGLFunctions_4_5_Core {
30 bool isKeyPressed(
int qtKey)
const {
return pressedKeys.contains(qtKey); }
32 QPointF
getMousePos()
const {
return mapFromGlobal(QCursor::pos()); }
36 void setScene(std::unique_ptr<Scene> sc) { scene = std::move(sc); }
43 bool isMouseButtonHeld(Qt::MouseButton button)
const {
return pressedMouseButtons.contains(button); };
47 void setSimSpeed(
float newSpeed) { simSpeed.store(newSpeed); }
55 void resizeGL(
int w,
int h)
override;
65 std::chrono::steady_clock::time_point lastFrame;
66 float renderSimTime = 0.0f;
67 std::atomic<float> simSpeed = 1.0f;
68 bool simulating =
false;
70 QSet<int> pressedKeys;
71 QSet<Qt::MouseButton> pressedMouseButtons;
72 bool mouseLeftHeld =
false;
73 bool mouseRightHeld =
false;
75 QPoint mouseLastPosBeforeCapture;
77 bool firstMouse =
false;
78 bool mouseCaptured =
false;
80 std::unique_ptr<Scene> scene;
82 std::vector<QPushButton*> objectLabelButtons;
86 void updateObjectLabels();
87 void hideObjectLabels();
QSize getFramebufferSize() const
void mouseReleaseEvent(QMouseEvent *event) override
void resizeGL(int w, int h) override
void mousePressEvent(QMouseEvent *event) override
void keyReleaseEvent(QKeyEvent *event) override
void setRenderClockRunning(bool running)
void resetRenderClock(float simTime=0.0f)
bool isKeyPressed(int qtKey) const
void keyPressEvent(QKeyEvent *event) override
void setMouseCaptured(bool captured)
void setScene(std::unique_ptr< Scene > sc)
void fpsUpdated(double fps)
QPointF getMousePos() const
bool isMouseCaptured() const
void handleRawMouseDelta(int dx, int dy)
void setSimSpeed(float newSpeed)
~OpenGLWindow() override=default
float getSimSpeed() const
void setSceneManager(SceneManager *scm)
bool isMouseButtonHeld(Qt::MouseButton button) const
void initializeGL() override
bool isRenderClockRunning() const
void wheelEvent(QWheelEvent *event) override
Represents a ray in 3D space.