1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-22 03:57:45 +00:00

Add a settings file to store the game directory

This commit is contained in:
Joshua Goins 2023-09-23 15:21:36 -04:00
parent 66bc968331
commit 127b57b820
11 changed files with 80 additions and 16 deletions

View file

@ -12,6 +12,7 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(QT_MIN_VERSION 5.15)
set(KF_MIN_VERSION 5.100)
find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
@ -35,6 +36,7 @@ ecm_setup_version(${PROJECT_VERSION}
)
find_package(Qt5 ${QT_MIN_VERSION} COMPONENTS Core Widgets Concurrent CONFIG REQUIRED)
find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS Config)
find_package(Vulkan REQUIRED)
find_package(glm REQUIRED)

View file

@ -24,7 +24,6 @@ target_link_libraries(armoury PUBLIC
Qt5::Core
Qt5::Widgets
Qt5::Concurrent
renderer
magic_enum
physis z
mdlpart

View file

@ -5,13 +5,16 @@
#include <physis.hpp>
#include "mainwindow.h"
#include "settings.h"
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
physis_initialize_logging();
MainWindow w(physis_gamedata_initialize(argv[1]));
const QString gameDir{getGameDirectory()};
const std::string gameDirStd{gameDir.toStdString()};
MainWindow w(physis_gamedata_initialize(gameDirStd.c_str()));
w.show();
return QApplication::exec();

View file

@ -5,13 +5,15 @@ add_library(NovusCommon STATIC)
target_sources(NovusCommon PRIVATE
include/aboutwindow.h
include/filecache.h
include/settings.h
src/aboutwindow.cpp
src/filecache.cpp)
src/filecache.cpp
src/settings.cpp)
target_include_directories(NovusCommon PUBLIC
include
PRIVATE
${CMAKE_BINARY_DIR})
target_link_libraries(NovusCommon PUBLIC Qt5::Core Qt5::Widgets physis)
target_link_libraries(NovusCommon PUBLIC Qt5::Core Qt5::Widgets KF5::ConfigCore physis)
# meant for including the license text
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSES/GPL-3.0-or-later.txt LICENSE_TXT)

View file

@ -0,0 +1,5 @@
#pragma once
#include <QString>
QString getGameDirectory();

21
common/src/settings.cpp Normal file
View file

@ -0,0 +1,21 @@
#include "settings.h"
#include <KConfig>
#include <KConfigGroup>
#include <QCoreApplication>
#include <QMessageBox>
QString getGameDirectory() {
KConfig config("novusrc");
KConfigGroup game = config.group("Game");
if (game.hasKey("GameDir")) {
return game.readEntry("GameDir");
} else {
QMessageBox msgBox;
msgBox.setText("The game directory has not been set. Please open the Novus SDK launcher and set it.");
msgBox.exec();
QCoreApplication::quit();
return {};
}
}

View file

@ -2,5 +2,5 @@
# SPDX-License-Identifier: CC0-1.0
add_library(mdlpart STATIC mdlpart.cpp)
target_link_libraries(mdlpart PUBLIC physis z ${LIBRARIES} Qt5::Core Qt5::Widgets renderer NovusCommon tinygltf)
target_link_libraries(mdlpart PUBLIC physis z Qt5::Core Qt5::Widgets renderer NovusCommon tinygltf)
target_include_directories(mdlpart PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

View file

@ -7,7 +7,7 @@ if(USE_STANDALONE_WINDOW)
set(EXTRA_LIBRARIES SDL2::SDL2)
endif()
add_library(renderer src/renderer.cpp ${EXTRA_SRC})
add_library(renderer STATIC src/renderer.cpp ${EXTRA_SRC})
target_include_directories(renderer PUBLIC include)
target_link_libraries(renderer PUBLIC Qt5::Core Vulkan::Vulkan physis z glm::glm ${EXTRA_LIBRARIES})
target_compile_definitions(renderer PUBLIC GLM_FORCE_RADIANS GLM_FORCE_DEPTH_ZERO_TO_ONE)

View file

@ -1,13 +1,8 @@
# SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
# SPDX-License-Identifier: CC0-1.0
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(sdklauncher
src/main.cpp
src/mainwindow.cpp)
target_link_libraries(sdklauncher PUBLIC Qt5::Widgets)
target_link_libraries(sdklauncher PUBLIC Qt5::Widgets KF5::ConfigCore physis)
target_include_directories(sdklauncher PUBLIC include)

View file

@ -1,13 +1,45 @@
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#include <KConfig>
#include <KConfigGroup>
#include <QApplication>
#include <QFileDialog>
#include <QMessageBox>
#include <physis.hpp>
#include "mainwindow.h"
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
KConfig config("novusrc");
KConfigGroup game = config.group("Game");
if (!game.hasKey("GameDir")) {
while (true) {
QMessageBox msgBox;
msgBox.setText("The game directory has not been set, please select it now. Select the 'game' folder.");
msgBox.exec();
const QString dir = QFileDialog::getExistingDirectory(
nullptr,
"Open Game Directory",
QStandardPaths::standardLocations(QStandardPaths::StandardLocation::HomeLocation).last(),
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
const std::string dirStd = dir.toStdString();
if (!physis_gamedata_initialize(dirStd.c_str()))
continue;
game.writeEntry("GameDir", dir);
config.sync();
break;
}
}
MainWindow window;
window.show();

View file

@ -3,12 +3,14 @@
#include "mainwindow.h"
#include <KConfig>
#include <KConfigGroup>
#include <QComboBox>
#include <QDebug>
#include <QFormLayout>
#include <QListWidget>
#include <QProcess>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QComboBox>
#include <QDebug>
static QMap<QString, QString> applications = {
{"Armoury", "armoury"},
@ -48,10 +50,13 @@ MainWindow::MainWindow() {
auto formLayout = new QFormLayout();
KConfig config("novusrc");
KConfigGroup game = config.group("Game");
auto gameCombo = new QComboBox();
formLayout->addRow("Current Game", gameCombo);
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
gameCombo->addItem("Placeholder");
gameCombo->addItem(game.readEntry("GameDir"));
auto mainLayout = new QVBoxLayout();
mainLayout->addWidget(centralFrame);