diff --git a/.reuse/dep5 b/.reuse/dep5 index fba6a13..3a8b9e4 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -3,11 +3,11 @@ Upstream-Name: Novus Upstream-Contact: Joshua Goins Source: https://git.sr.ht/~redstrate/novus -Files: .gitmodules scripts/* README.md BUILDING.md CONTRIBUTING.md apps/argcracker/README.md apps/armoury/README.md apps/karuku/README.md apps/sagasu/README.md apps/mdlviewer/README.md renderer/README.md apps/launcher/README.md .clang-format .build.yml misc/* renderer/shaders/*.spv apps/mapeditor/README.md .github/* apps/mateditor/README.md +Files: .gitmodules scripts/* README.md BUILDING.md CONTRIBUTING.md apps/argcracker/README.md apps/armoury/README.md apps/gamelauncher/README.md apps/karuku/README.md apps/sagasu/README.md apps/mdlviewer/README.md renderer/README.md apps/sdklauncher/README.md .clang-format .build.yml misc/* renderer/shaders/*.spv apps/mapeditor/README.md .github/* apps/mateditor/README.md Copyright: Joshua Goins License: CC0-1.0 -Files: apps/armoury/zone.xiv.armoury.svg apps/karuku/zone.xiv.karaku.svg apps/launcher/zone.xiv.novus.svg apps/mapeditor/zone.xiv.mapeditor.svg apps/mdlviewer/zone.xiv.mdlviewer.svg apps/sagasu/zone.xiv.sagasu.svg resources/* +Files: apps/armoury/zone.xiv.armoury.svg apps/karuku/zone.xiv.karaku.svg apps/sdklauncher/zone.xiv.novus.svg apps/mapeditor/zone.xiv.mapeditor.svg apps/mdlviewer/zone.xiv.mdlviewer.svg apps/sagasu/zone.xiv.sagasu.svg resources/* Copyright: Joshua Goins License: CC-BY-SA-4.0 diff --git a/README.md b/README.md index 27519ee..f184a86 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ Here is an exhaustive list of tooling available here: * [Model Viewer](apps/mdlviewer), a graphical model viewer for MDL files. * [Data Viewer](apps/sagasu), a graphical interface to explore FFXIV data archive files. * [Material Editor](apps/mateditor), a program to view material files. +* [Game Launcher](apps/gamelauncher), a program to quickly launch the game for testing. ## Usage diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 89ed73f..155f822 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -7,5 +7,6 @@ add_subdirectory(argcracker) add_subdirectory(sagasu) add_subdirectory(mapeditor) add_subdirectory(mdlviewer) -add_subdirectory(launcher) -add_subdirectory(mateditor) \ No newline at end of file +add_subdirectory(sdklauncher) +add_subdirectory(mateditor) +add_subdirectory(gamelauncher) \ No newline at end of file diff --git a/apps/gamelauncher/CMakeLists.txt b/apps/gamelauncher/CMakeLists.txt new file mode 100644 index 0000000..5e32c60 --- /dev/null +++ b/apps/gamelauncher/CMakeLists.txt @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: 2024 Joshua Goins +# SPDX-License-Identifier: CC0-1.0 + +add_executable(novus-gamelauncher) +target_sources(novus-gamelauncher + PRIVATE + include/mainwindow.h + + src/main.cpp + src/mainwindow.cpp) +target_include_directories(novus-gamelauncher + PUBLIC + include) +target_link_libraries(novus-gamelauncher + PRIVATE + Novus::Common + Physis::Physis + Physis::Logger + KF6::I18n + Qt6::Core + Qt6::Widgets) + +install(TARGETS novus-gamelauncher ${KF${QT_MAJOR_VERSION}_INSTALL_TARGETS_DEFAULT_ARGS}) + +if (WIN32) + set_target_properties(novus-gamelauncher PROPERTIES + WIN32_EXECUTABLE TRUE + OUTPUT_NAME "GameLauncher") + + install(FILES $ DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() \ No newline at end of file diff --git a/apps/gamelauncher/README.md b/apps/gamelauncher/README.md new file mode 100644 index 0000000..14562f3 --- /dev/null +++ b/apps/gamelauncher/README.md @@ -0,0 +1,7 @@ +# Game Launcher + +This tool can display and preview game materials. + +## Note + +Vulkan 1.3 or higher is currently required. This requirement is planned to be lifted in the future. \ No newline at end of file diff --git a/apps/gamelauncher/include/mainwindow.h b/apps/gamelauncher/include/mainwindow.h new file mode 100644 index 0000000..1bf7f0e --- /dev/null +++ b/apps/gamelauncher/include/mainwindow.h @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include + +#include "novusmainwindow.h" + +struct GameData; + +class MainWindow : public NovusMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(); + +private: + QProcess *process = nullptr; +}; \ No newline at end of file diff --git a/apps/gamelauncher/src/main.cpp b/apps/gamelauncher/src/main.cpp new file mode 100644 index 0000000..373e3df --- /dev/null +++ b/apps/gamelauncher/src/main.cpp @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +#include +#include +#include +#include + +#include "aboutdata.h" +#include "mainwindow.h" +#include "settings.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + KLocalizedString::setApplicationDomain(QByteArrayLiteral("novus")); + + customizeAboutData(QStringLiteral("gamelauncher"), + QStringLiteral("zone.xiv.gamelauncher"), + QStringLiteral("Game Launcher"), + i18n("Program to launch the game for debug purposes.")); + + // Default to a sensible message pattern + if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { + qputenv("QT_MESSAGE_PATTERN", "[%{time yyyy-MM-dd h:mm:ss.zzz}] %{if-category}[%{category}] %{endif}[%{type}] %{message}"); + } + + setup_physis_logging(); + + MainWindow w; + w.show(); + + return app.exec(); +} \ No newline at end of file diff --git a/apps/gamelauncher/src/mainwindow.cpp b/apps/gamelauncher/src/mainwindow.cpp new file mode 100644 index 0000000..1db3ce8 --- /dev/null +++ b/apps/gamelauncher/src/mainwindow.cpp @@ -0,0 +1,43 @@ +// SPDX-FileCopyrightText: 2024 Joshua Goins +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "mainwindow.h" +#include "settings.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +MainWindow::MainWindow() : NovusMainWindow() +{ + setMinimumSize(1280, 720); + setupMenubar(); + + process = new QProcess(); + process->setWorkingDirectory(getGameDirectory()); + process->setProgram(QStringLiteral("ffxiv_dx11.exe")); + + auto dummyWidget = new QWidget(); + setCentralWidget(dummyWidget); + + auto layout = new QFormLayout(); + dummyWidget->setLayout(layout); + + auto argsBox = new QLineEdit(); + layout->addRow(i18n("Arguments"), argsBox); + + auto launchGameButton = new QPushButton(i18n("Launch Game")); + connect(launchGameButton, &QPushButton::clicked, this, [this, argsBox] { + process->setArguments(argsBox->text().split(QLatin1Char(' '))); + qInfo() << "Launching" << process->program() << process->arguments(); + process->start(); + }); + layout->addWidget(launchGameButton); +} + +#include "moc_mainwindow.cpp" \ No newline at end of file diff --git a/apps/launcher/CMakeLists.txt b/apps/sdklauncher/CMakeLists.txt similarity index 96% rename from apps/launcher/CMakeLists.txt rename to apps/sdklauncher/CMakeLists.txt index 7db8775..0d29308 100644 --- a/apps/launcher/CMakeLists.txt +++ b/apps/sdklauncher/CMakeLists.txt @@ -13,6 +13,7 @@ file (GENERATE #define MATEDITOR_EXECUTABLE QStringLiteral(\"$\")\n\ #define MDLVIEWER_EXECUTABLE QStringLiteral(\"$\")\n\ #define DATAEXPLORER_EXECUTABLE QStringLiteral(\"$\")\n\ +#define GAMELAUNCHER_EXECUTABLE QStringLiteral(\"$\")\n\ " ) diff --git a/apps/launcher/README.md b/apps/sdklauncher/README.md similarity index 100% rename from apps/launcher/README.md rename to apps/sdklauncher/README.md diff --git a/apps/launcher/include/mainwindow.h b/apps/sdklauncher/include/mainwindow.h similarity index 100% rename from apps/launcher/include/mainwindow.h rename to apps/sdklauncher/include/mainwindow.h diff --git a/apps/launcher/src/main.cpp b/apps/sdklauncher/src/main.cpp similarity index 100% rename from apps/launcher/src/main.cpp rename to apps/sdklauncher/src/main.cpp diff --git a/apps/launcher/src/mainwindow.cpp b/apps/sdklauncher/src/mainwindow.cpp similarity index 96% rename from apps/launcher/src/mainwindow.cpp rename to apps/sdklauncher/src/mainwindow.cpp index b4ed016..a59899a 100644 --- a/apps/launcher/src/mainwindow.cpp +++ b/apps/sdklauncher/src/mainwindow.cpp @@ -23,7 +23,8 @@ static QMap> applications = { {QStringLiteral("Material Editor"), {QStringLiteral("zone.xiv.mateditor"), MATEDITOR_EXECUTABLE}}, {QStringLiteral("Excel Editor"), {QStringLiteral("zone.xiv.karaku"), EXCELEDITOR_EXECUTABLE}}, {QStringLiteral("Data Explorer"), {QStringLiteral("zone.xiv.sagasu"), DATAEXPLORER_EXECUTABLE}}, - {QStringLiteral("Model Viewer"), {QStringLiteral("zone.xiv.mdlviewer"), MDLVIEWER_EXECUTABLE}}}; + {QStringLiteral("Model Viewer"), {QStringLiteral("zone.xiv.mdlviewer"), MDLVIEWER_EXECUTABLE}}, + {QStringLiteral("Game Launcher"), {QStringLiteral("zone.xiv.gamelauncher"), GAMELAUNCHER_EXECUTABLE}}}; static QMap links = {{QStringLiteral("XIV Dev Wiki"), QStringLiteral("https://xiv.dev")}, {QStringLiteral("XIV Docs"), QStringLiteral("https://docs.xiv.zone")}}; diff --git a/apps/launcher/zone.xiv.novus.desktop b/apps/sdklauncher/zone.xiv.novus.desktop similarity index 100% rename from apps/launcher/zone.xiv.novus.desktop rename to apps/sdklauncher/zone.xiv.novus.desktop diff --git a/apps/launcher/zone.xiv.novus.svg b/apps/sdklauncher/zone.xiv.novus.svg similarity index 100% rename from apps/launcher/zone.xiv.novus.svg rename to apps/sdklauncher/zone.xiv.novus.svg