Editor controls

This commit is contained in:
maelstrom 2024-12-02 11:01:51 +01:00
parent 2b33ec92ed
commit b12f71564c
4 changed files with 80 additions and 40 deletions

View file

@ -16,43 +16,13 @@
#include "mainglwidget.h" #include "mainglwidget.h"
MainGLWidget::MainGLWidget(QWidget* parent): QOpenGLWidget(parent) {} MainGLWidget::MainGLWidget(QWidget* parent): QOpenGLWidget(parent) {
setFocusPolicy(Qt::FocusPolicy::ClickFocus);
}
void MainGLWidget::initializeGL() { void MainGLWidget::initializeGL() {
// Set up the rendering context, load shaders and other resources, etc.:
// QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
// f->glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glewInit(); glewInit();
simulationInit();
renderInit(NULL); renderInit(NULL);
// Baseplate
parts.push_back(Part {
.position = glm::vec3(0, -5, 0),
.rotation = glm::vec3(0),
.scale = glm::vec3(512, 1.2, 512),
.material = Material {
.diffuse = glm::vec3(0.388235, 0.372549, 0.384314),
.specular = glm::vec3(0.5f, 0.5f, 0.5f),
.shininess = 32.0f,
},
.anchored = true,
});
syncPartPhysics(parts.back());
parts.push_back(Part {
.position = glm::vec3(0),
.rotation = glm::vec3(0),
.scale = glm::vec3(4, 1.2, 2),
.material = Material {
.diffuse = glm::vec3(0.639216f, 0.635294f, 0.647059f),
.specular = glm::vec3(0.5f, 0.5f, 0.5f),
.shininess = 32.0f,
}
});
syncPartPhysics(parts.back());
} }
void MainGLWidget::resizeGL(int w, int h) { void MainGLWidget::resizeGL(int w, int h) {
@ -87,3 +57,45 @@ void MainGLWidget::mousePressEvent(QMouseEvent* evt) {
void MainGLWidget::mouseReleaseEvent(QMouseEvent* evt) { void MainGLWidget::mouseReleaseEvent(QMouseEvent* evt) {
isMouseDragging = false; isMouseDragging = false;
} }
static int moveZ = 0;
static int moveX = 0;
static std::chrono::time_point lastTime = std::chrono::steady_clock::now();
void MainGLWidget::updateCycle() {
float deltaTime = std::chrono::duration_cast<std::chrono::duration<float>>(std::chrono::steady_clock::now() - lastTime).count();
lastTime = std::chrono::steady_clock::now();
if (moveZ)
camera.processMovement(moveZ == 1 ? DIRECTION_FORWARD : DIRECTION_BACKWARDS, deltaTime);
if (moveX)
camera.processMovement(moveX == 1 ? DIRECTION_LEFT : DIRECTION_RIGHT, deltaTime);
}
void MainGLWidget::keyPressEvent(QKeyEvent* evt) {
if (evt->key() == Qt::Key_W) moveZ = 1;
else if (evt->key() == Qt::Key_S) moveZ = -1;
if (evt->key() == Qt::Key_A) moveX = 1;
else if (evt->key() == Qt::Key_D) moveX = -1;
if (evt->key() == Qt::Key_F) {
parts.push_back(Part {
.position = camera.cameraPos + camera.cameraFront * glm::vec3(3),
.rotation = glm::vec3(0),
.scale = glm::vec3(1, 1, 1),
.material = Material {
.diffuse = glm::vec3(1.0f, 0.5f, 0.31f),
.specular = glm::vec3(0.5f, 0.5f, 0.5f),
.shininess = 32.0f,
}
});
syncPartPhysics(parts.back());
}
}
void MainGLWidget::keyReleaseEvent(QKeyEvent* evt) {
if (evt->key() == Qt::Key_W || evt->key() == Qt::Key_S) moveZ = 0;
else if (evt->key() == Qt::Key_A || evt->key() == Qt::Key_D) moveX = 0;
}

View file

@ -1,12 +1,14 @@
#ifndef MAINGLWIDGET_H #ifndef MAINGLWIDGET_H
#define MAINGLWIDGET_H #define MAINGLWIDGET_H
#include "qevent.h"
#include <QOpenGLWidget> #include <QOpenGLWidget>
#include <QWidget> #include <QWidget>
class MainGLWidget : public QOpenGLWidget { class MainGLWidget : public QOpenGLWidget {
public: public:
MainGLWidget(QWidget *parent = nullptr); MainGLWidget(QWidget *parent = nullptr);
void updateCycle();
protected: protected:
void initializeGL() override; void initializeGL() override;
@ -16,6 +18,8 @@ protected:
void mouseMoveEvent(QMouseEvent* evt) override; void mouseMoveEvent(QMouseEvent* evt) override;
void mousePressEvent(QMouseEvent* evt) override; void mousePressEvent(QMouseEvent* evt) override;
void mouseReleaseEvent(QMouseEvent* evt) override; void mouseReleaseEvent(QMouseEvent* evt) override;
void keyPressEvent(QKeyEvent* evt) override;
void keyReleaseEvent(QKeyEvent* evt) override;
}; };
#endif // MAINGLWIDGET_H #endif // MAINGLWIDGET_H

View file

@ -21,9 +21,37 @@ MainWindow::MainWindow(QWidget *parent)
ui->setupUi(this); ui->setupUi(this);
timer.start(33, this); timer.start(33, this);
setMouseTracking(true); setMouseTracking(true);
simulationInit();
// Baseplate
parts.push_back(Part {
.position = glm::vec3(0, -5, 0),
.rotation = glm::vec3(0),
.scale = glm::vec3(512, 1.2, 512),
.material = Material {
.diffuse = glm::vec3(0.388235, 0.372549, 0.384314),
.specular = glm::vec3(0.5f, 0.5f, 0.5f),
.shininess = 32.0f,
},
.anchored = true,
});
syncPartPhysics(parts.back());
parts.push_back(Part {
.position = glm::vec3(0),
.rotation = glm::vec3(0),
.scale = glm::vec3(4, 1.2, 2),
.material = Material {
.diffuse = glm::vec3(0.639216f, 0.635294f, 0.647059f),
.specular = glm::vec3(0.5f, 0.5f, 0.5f),
.shininess = 32.0f,
}
});
syncPartPhysics(parts.back());
} }
std::chrono::time_point lastTime = std::chrono::steady_clock::now(); static std::chrono::time_point lastTime = std::chrono::steady_clock::now();
void MainWindow::timerEvent(QTimerEvent* evt) { void MainWindow::timerEvent(QTimerEvent* evt) {
if (evt->timerId() != timer.timerId()) { if (evt->timerId() != timer.timerId()) {
QWidget::timerEvent(evt); QWidget::timerEvent(evt);
@ -35,10 +63,7 @@ void MainWindow::timerEvent(QTimerEvent* evt) {
physicsStep(deltaTime); physicsStep(deltaTime);
ui->mainWidget->update(); ui->mainWidget->update();
} ui->mainWidget->updateCycle();
void MainWindow::updateMainWidget() {
ui->mainWidget->update();
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()

View file

@ -19,7 +19,6 @@ class MainWindow : public QMainWindow
public: public:
MainWindow(QWidget *parent = nullptr); MainWindow(QWidget *parent = nullptr);
~MainWindow(); ~MainWindow();
void updateMainWidget();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;