#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include #include struct PowerUpInfo { QVector3D mPosition; QVector4D mRotation; QVector3D mScale; }; struct LevelInfo { QString mLevelName; QString mDescription; QString mPublishedID; int mMusic; int mSkybox; QPixmap mPreview; QVector mPowerUps; int mMaxViewID; QVector mObjectPositions; QString mMapPath; QJsonObject mMapData; }; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE #define MAX_POWERUPS 100 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void initializeAsync(); // Async initialization for splash screen void findSteamPath(); void updateLevels(); QVector findPowerUps(QJsonObject aMapData); QVector getObjectPositions(QJsonObject aObj); void saveMap(LevelInfo aLevelInfo, bool aBackup = true); int getMaxViewID(QJsonObject aMapData); signals: void loadingProgress(int percent, const QString &status); void loadingComplete(); private slots: void on_listWidget_MapSelect_currentRowChanged(int currentRow); void on_listWidget_powerups_currentRowChanged(int currentRow); void on_pushButton_Generate_clicked(); void on_pushButton_SavePowerUp_clicked(); void on_pushButton_NewPowerUp_clicked(); void on_pushButton_DeletePowerUp_clicked(); void on_pushButton_Restore_clicked(); private: void clearMapDetails(); void clearPowerupDetails(); void refreshPowerupList(int mapRow); Ui::MainWindow *ui; QString mSteamPath; QVector mLevels; }; #endif // MAINWINDOW_H