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:
parent
66bc968331
commit
127b57b820
11 changed files with 80 additions and 16 deletions
|
@ -12,6 +12,7 @@ set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
set(QT_MIN_VERSION 5.15)
|
set(QT_MIN_VERSION 5.15)
|
||||||
|
set(KF_MIN_VERSION 5.100)
|
||||||
|
|
||||||
find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
|
find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
|
||||||
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
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(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(Vulkan REQUIRED)
|
||||||
find_package(glm REQUIRED)
|
find_package(glm REQUIRED)
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ target_link_libraries(armoury PUBLIC
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
Qt5::Concurrent
|
Qt5::Concurrent
|
||||||
renderer
|
|
||||||
magic_enum
|
magic_enum
|
||||||
physis z
|
physis z
|
||||||
mdlpart
|
mdlpart
|
||||||
|
|
|
@ -5,13 +5,16 @@
|
||||||
#include <physis.hpp>
|
#include <physis.hpp>
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
physis_initialize_logging();
|
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();
|
w.show();
|
||||||
|
|
||||||
return QApplication::exec();
|
return QApplication::exec();
|
||||||
|
|
|
@ -5,13 +5,15 @@ add_library(NovusCommon STATIC)
|
||||||
target_sources(NovusCommon PRIVATE
|
target_sources(NovusCommon PRIVATE
|
||||||
include/aboutwindow.h
|
include/aboutwindow.h
|
||||||
include/filecache.h
|
include/filecache.h
|
||||||
|
include/settings.h
|
||||||
src/aboutwindow.cpp
|
src/aboutwindow.cpp
|
||||||
src/filecache.cpp)
|
src/filecache.cpp
|
||||||
|
src/settings.cpp)
|
||||||
target_include_directories(NovusCommon PUBLIC
|
target_include_directories(NovusCommon PUBLIC
|
||||||
include
|
include
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_BINARY_DIR})
|
${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
|
# meant for including the license text
|
||||||
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSES/GPL-3.0-or-later.txt LICENSE_TXT)
|
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../LICENSES/GPL-3.0-or-later.txt LICENSE_TXT)
|
||||||
|
|
5
common/include/settings.h
Normal file
5
common/include/settings.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
QString getGameDirectory();
|
21
common/src/settings.cpp
Normal file
21
common/src/settings.cpp
Normal 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 {};
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,5 +2,5 @@
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
add_library(mdlpart STATIC mdlpart.cpp)
|
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})
|
target_include_directories(mdlpart PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
@ -7,7 +7,7 @@ if(USE_STANDALONE_WINDOW)
|
||||||
set(EXTRA_LIBRARIES SDL2::SDL2)
|
set(EXTRA_LIBRARIES SDL2::SDL2)
|
||||||
endif()
|
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_include_directories(renderer PUBLIC include)
|
||||||
target_link_libraries(renderer PUBLIC Qt5::Core Vulkan::Vulkan physis z glm::glm ${EXTRA_LIBRARIES})
|
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)
|
target_compile_definitions(renderer PUBLIC GLM_FORCE_RADIANS GLM_FORCE_DEPTH_ZERO_TO_ONE)
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
# SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
# SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
# 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
|
add_executable(sdklauncher
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/mainwindow.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)
|
target_include_directories(sdklauncher PUBLIC include)
|
||||||
|
|
|
@ -1,13 +1,45 @@
|
||||||
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include <KConfig>
|
||||||
|
#include <KConfigGroup>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <physis.hpp>
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
QApplication app(argc, 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;
|
MainWindow window;
|
||||||
window.show();
|
window.show();
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,14 @@
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
#include <KConfig>
|
||||||
|
#include <KConfigGroup>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFormLayout>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QFormLayout>
|
|
||||||
#include <QComboBox>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
static QMap<QString, QString> applications = {
|
static QMap<QString, QString> applications = {
|
||||||
{"Armoury", "armoury"},
|
{"Armoury", "armoury"},
|
||||||
|
@ -48,10 +50,13 @@ MainWindow::MainWindow() {
|
||||||
|
|
||||||
auto formLayout = new QFormLayout();
|
auto formLayout = new QFormLayout();
|
||||||
|
|
||||||
|
KConfig config("novusrc");
|
||||||
|
KConfigGroup game = config.group("Game");
|
||||||
|
|
||||||
auto gameCombo = new QComboBox();
|
auto gameCombo = new QComboBox();
|
||||||
formLayout->addRow("Current Game", gameCombo);
|
formLayout->addRow("Current Game", gameCombo);
|
||||||
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
|
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
|
||||||
gameCombo->addItem("Placeholder");
|
gameCombo->addItem(game.readEntry("GameDir"));
|
||||||
|
|
||||||
auto mainLayout = new QVBoxLayout();
|
auto mainLayout = new QVBoxLayout();
|
||||||
mainLayout->addWidget(centralFrame);
|
mainLayout->addWidget(centralFrame);
|
||||||
|
|
Loading…
Add table
Reference in a new issue