#include "mainwindow.h" #include "./ui_mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include "common.h" #include "physics/simulation.h" #include "objects/part.h" #include "qitemselectionmodel.h" #include "qobject.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); timer.start(33, this); setMouseTracking(true); connect(ui->explorerView->selectionModel(), &QItemSelectionModel::selectionChanged, this, [&](const QItemSelection &selected, const QItemSelection &deselected) { if (selected.count() == 0) return; std::optional inst = selected.count() == 0 ? std::nullopt : std::make_optional(((Instance*)selected.indexes()[0].internalPointer())->shared_from_this()); ui->propertiesView->setSelected(inst); }); // ui->explorerView->Init(ui); simulationInit(); // Baseplate workspace->AddChild(ui->mainWidget->lastPart = Part::New({ .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, })); ui->mainWidget->lastPart->name = "Baseplate"; syncPartPhysics(ui->mainWidget->lastPart); workspace->AddChild(ui->mainWidget->lastPart = Part::New({ .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(ui->mainWidget->lastPart); } static std::chrono::time_point lastTime = std::chrono::steady_clock::now(); void MainWindow::timerEvent(QTimerEvent* evt) { if (evt->timerId() != timer.timerId()) { QWidget::timerEvent(evt); return; } float deltaTime = std::chrono::duration_cast>(std::chrono::steady_clock::now() - lastTime).count(); lastTime = std::chrono::steady_clock::now(); physicsStep(deltaTime); ui->mainWidget->update(); ui->mainWidget->updateCycle(); } MainWindow::~MainWindow() { delete ui; }