mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-28 22:06:59 +01:00
Make trophy toast duration configurable (5-10s, default 6s) (#1538)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -172,6 +172,10 @@ bool TrophyEnabled() {
|
|||||||
return g_config->trophy_enabled;
|
return g_config->trophy_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t GetTrophyDurationSeconds() {
|
||||||
|
return std::clamp(g_config->trophy_duration_seconds, 5u, 10u);
|
||||||
|
}
|
||||||
|
|
||||||
bool PlayGoHackEnabled() {
|
bool PlayGoHackEnabled() {
|
||||||
return g_config->playgo_hack_enabled;
|
return g_config->playgo_hack_enabled;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ struct ConfigOptions {
|
|||||||
bool sync_raw_image_buffers = false;
|
bool sync_raw_image_buffers = false;
|
||||||
bool tessellation_enabled = false;
|
bool tessellation_enabled = false;
|
||||||
bool trophy_enabled = true;
|
bool trophy_enabled = true;
|
||||||
|
uint32_t trophy_duration_seconds = 6;
|
||||||
bool playgo_hack_enabled = false;
|
bool playgo_hack_enabled = false;
|
||||||
bool skip_notice_screen = false;
|
bool skip_notice_screen = false;
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
@@ -135,6 +136,7 @@ bool ReadbackLinearImagesEnabled();
|
|||||||
bool SyncRawImageBuffersEnabled();
|
bool SyncRawImageBuffersEnabled();
|
||||||
bool TessellationEnabled();
|
bool TessellationEnabled();
|
||||||
bool TrophyEnabled();
|
bool TrophyEnabled();
|
||||||
|
uint32_t GetTrophyDurationSeconds();
|
||||||
bool PlayGoHackEnabled();
|
bool PlayGoHackEnabled();
|
||||||
bool SkipNoticeScreen();
|
bool SkipNoticeScreen();
|
||||||
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
|
|||||||
@@ -1199,7 +1199,7 @@ struct SystemOverlay::Impl {
|
|||||||
ImGui::UnregisterUserTexture(texture.get());
|
ImGui::UnregisterUserTexture(texture.get());
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
constexpr float TOAST_LIFETIME = 5.0f;
|
const float TOAST_LIFETIME = static_cast<float>(Config::GetTrophyDurationSeconds());
|
||||||
if (trophy_notification &&
|
if (trophy_notification &&
|
||||||
std::chrono::duration<float>(now - trophy_notification_born).count() >=
|
std::chrono::duration<float>(now - trophy_notification_born).count() >=
|
||||||
TOAST_LIFETIME) {
|
TOAST_LIFETIME) {
|
||||||
|
|||||||
@@ -201,6 +201,29 @@
|
|||||||
<property name="checked"><bool>true</bool></property>
|
<property name="checked"><bool>true</bool></property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="trophyDurationLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_trophy_duration">
|
||||||
|
<property name="text"><string>Trophy notification duration:</string></property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="spinBox_trophy_duration">
|
||||||
|
<property name="toolTip"><string>How long each trophy unlock notification stays on screen.</string></property>
|
||||||
|
<property name="suffix"><string> s</string></property>
|
||||||
|
<property name="minimum"><number>5</number></property>
|
||||||
|
<property name="maximum"><number>10</number></property>
|
||||||
|
<property name="value"><number>6</number></property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="trophyDurationSpacer">
|
||||||
|
<property name="orientation"><enum>Qt::Horizontal</enum></property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ public:
|
|||||||
bool sync_raw_image_buffers = false;
|
bool sync_raw_image_buffers = false;
|
||||||
bool tessellation_enabled = false;
|
bool tessellation_enabled = false;
|
||||||
bool trophy_enabled = true;
|
bool trophy_enabled = true;
|
||||||
|
int trophy_duration_seconds = 6;
|
||||||
bool skip_notice_screen = false;
|
bool skip_notice_screen = false;
|
||||||
bool network_connected = false;
|
bool network_connected = false;
|
||||||
int vblank_frequency = 60;
|
int vblank_frequency = 60;
|
||||||
@@ -160,6 +161,7 @@ public:
|
|||||||
sync_raw_image_buffers = other.sync_raw_image_buffers;
|
sync_raw_image_buffers = other.sync_raw_image_buffers;
|
||||||
tessellation_enabled = other.tessellation_enabled;
|
tessellation_enabled = other.tessellation_enabled;
|
||||||
trophy_enabled = other.trophy_enabled;
|
trophy_enabled = other.trophy_enabled;
|
||||||
|
trophy_duration_seconds = other.trophy_duration_seconds;
|
||||||
skip_notice_screen = other.skip_notice_screen;
|
skip_notice_screen = other.skip_notice_screen;
|
||||||
network_connected = other.network_connected;
|
network_connected = other.network_connected;
|
||||||
vblank_frequency = other.vblank_frequency;
|
vblank_frequency = other.vblank_frequency;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ QVariantMap Configuration::GameSettings() const {
|
|||||||
KYTY_CFG_SET(sync_raw_image_buffers);
|
KYTY_CFG_SET(sync_raw_image_buffers);
|
||||||
KYTY_CFG_SET(tessellation_enabled);
|
KYTY_CFG_SET(tessellation_enabled);
|
||||||
KYTY_CFG_SET(trophy_enabled);
|
KYTY_CFG_SET(trophy_enabled);
|
||||||
|
KYTY_CFG_SET(trophy_duration_seconds);
|
||||||
KYTY_CFG_SET(skip_notice_screen);
|
KYTY_CFG_SET(skip_notice_screen);
|
||||||
KYTY_CFG_SET(network_connected);
|
KYTY_CFG_SET(network_connected);
|
||||||
KYTY_CFG_SET(vblank_frequency);
|
KYTY_CFG_SET(vblank_frequency);
|
||||||
@@ -63,6 +64,7 @@ void Configuration::ReadGameSettingsValues(const Settings& s) {
|
|||||||
KYTY_CFG_GET(sync_raw_image_buffers);
|
KYTY_CFG_GET(sync_raw_image_buffers);
|
||||||
KYTY_CFG_GET(tessellation_enabled);
|
KYTY_CFG_GET(tessellation_enabled);
|
||||||
trophy_enabled = s.value("trophy_enabled", trophy_enabled).toBool();
|
trophy_enabled = s.value("trophy_enabled", trophy_enabled).toBool();
|
||||||
|
KYTY_CFG_GET(trophy_duration_seconds);
|
||||||
KYTY_CFG_GET(skip_notice_screen);
|
KYTY_CFG_GET(skip_notice_screen);
|
||||||
KYTY_CFG_GET(network_connected);
|
KYTY_CFG_GET(network_connected);
|
||||||
vblank_frequency = s.value("vblank_frequency", vblank_frequency).toInt();
|
vblank_frequency = s.value("vblank_frequency", vblank_frequency).toInt();
|
||||||
@@ -143,6 +145,9 @@ bool Configuration::SetGameSettings(const QJsonObject& settings, QString& error)
|
|||||||
if (vblank_frequency < 30 || vblank_frequency > 360) {
|
if (vblank_frequency < 30 || vblank_frequency > 360) {
|
||||||
return fail(tr("Vblank frequency must be between 30 and 360."));
|
return fail(tr("Vblank frequency must be between 30 and 360."));
|
||||||
}
|
}
|
||||||
|
if (trophy_duration_seconds < 5 || trophy_duration_seconds > 10) {
|
||||||
|
return fail(tr("Trophy notification duration must be between 5 and 10 seconds."));
|
||||||
|
}
|
||||||
if ((shader_log_direction == LogDirection::File && shader_log_folder.isEmpty()) ||
|
if ((shader_log_direction == LogDirection::File && shader_log_folder.isEmpty()) ||
|
||||||
(printf_direction == LogDirection::File && printf_output_file.isEmpty()) ||
|
(printf_direction == LogDirection::File && printf_output_file.isEmpty()) ||
|
||||||
(command_buffer_dump_enabled && command_buffer_dump_folder.isEmpty())) {
|
(command_buffer_dump_enabled && command_buffer_dump_folder.isEmpty())) {
|
||||||
|
|||||||
@@ -281,6 +281,7 @@ void ConfigurationEditDialog::Init(const Configuration& info) {
|
|||||||
m_ui->checkBox_skip_notice_screen->setChecked(info.skip_notice_screen);
|
m_ui->checkBox_skip_notice_screen->setChecked(info.skip_notice_screen);
|
||||||
m_ui->checkBox_network_connected->setChecked(info.network_connected);
|
m_ui->checkBox_network_connected->setChecked(info.network_connected);
|
||||||
m_ui->checkBox_trophy_notifications->setChecked(info.trophy_enabled);
|
m_ui->checkBox_trophy_notifications->setChecked(info.trophy_enabled);
|
||||||
|
m_ui->spinBox_trophy_duration->setValue(info.trophy_duration_seconds);
|
||||||
m_ui->spinBox_vblank_frequency->setValue(info.vblank_frequency);
|
m_ui->spinBox_vblank_frequency->setValue(info.vblank_frequency);
|
||||||
m_ui->comboBox_console_language->clear();
|
m_ui->comboBox_console_language->clear();
|
||||||
m_ui->comboBox_console_language->addItems(CONSOLE_LANGUAGE_NAMES);
|
m_ui->comboBox_console_language->addItems(CONSOLE_LANGUAGE_NAMES);
|
||||||
@@ -444,6 +445,7 @@ static void UpdateInfo(Configuration& info, Ui::ConfigurationEditDialog& ui, boo
|
|||||||
info.skip_notice_screen = ui.checkBox_skip_notice_screen->isChecked();
|
info.skip_notice_screen = ui.checkBox_skip_notice_screen->isChecked();
|
||||||
info.network_connected = ui.checkBox_network_connected->isChecked();
|
info.network_connected = ui.checkBox_network_connected->isChecked();
|
||||||
info.trophy_enabled = ui.checkBox_trophy_notifications->isChecked();
|
info.trophy_enabled = ui.checkBox_trophy_notifications->isChecked();
|
||||||
|
info.trophy_duration_seconds = ui.spinBox_trophy_duration->value();
|
||||||
info.vblank_frequency = ui.spinBox_vblank_frequency->value();
|
info.vblank_frequency = ui.spinBox_vblank_frequency->value();
|
||||||
info.console_language = ui.comboBox_console_language->currentIndex();
|
info.console_language = ui.comboBox_console_language->currentIndex();
|
||||||
info.vulkan_validation_enabled = ui.checkBox_vulkan_validation->isChecked();
|
info.vulkan_validation_enabled = ui.checkBox_vulkan_validation->isChecked();
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ static QStringList CreateEmulatorArgs(const Configuration& info) {
|
|||||||
args << "--readback-linear-images" << BoolArg(info.readback_linear_images);
|
args << "--readback-linear-images" << BoolArg(info.readback_linear_images);
|
||||||
args << "--sync-raw-image-buffers" << BoolArg(info.sync_raw_image_buffers);
|
args << "--sync-raw-image-buffers" << BoolArg(info.sync_raw_image_buffers);
|
||||||
args << "--trophy-notifications" << BoolArg(info.trophy_enabled);
|
args << "--trophy-notifications" << BoolArg(info.trophy_enabled);
|
||||||
|
args << "--trophy-duration" << QString::number(info.trophy_duration_seconds);
|
||||||
args << "--skip-notice-screen" << BoolArg(info.skip_notice_screen);
|
args << "--skip-notice-screen" << BoolArg(info.skip_notice_screen);
|
||||||
args << "--network-connected" << BoolArg(info.network_connected);
|
args << "--network-connected" << BoolArg(info.network_connected);
|
||||||
if (info.tessellation_enabled) {
|
if (info.tessellation_enabled) {
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ static void PrintUsage() {
|
|||||||
" --sync-raw-image-buffers <true|false> Synchronize raw reads of GPU images. Default: false.\n");
|
" --sync-raw-image-buffers <true|false> Synchronize raw reads of GPU images. Default: false.\n");
|
||||||
::printf(
|
::printf(
|
||||||
" --trophy-notifications <true|false> Show trophy unlock toasts and play their sound.\n");
|
" --trophy-notifications <true|false> Show trophy unlock toasts and play their sound.\n");
|
||||||
|
::printf(
|
||||||
|
" --trophy-duration <seconds> Trophy toast duration, 5-10. Default: 6.\n");
|
||||||
::printf(" --playgo-hack Use the supplied PlayGo stub fallback.\n");
|
::printf(" --playgo-hack Use the supplied PlayGo stub fallback.\n");
|
||||||
::printf(
|
::printf(
|
||||||
" --skip-notice-screen <true|false> Skip startup logos and notices in supported games.\n"
|
" --skip-notice-screen <true|false> Skip startup logos and notices in supported games.\n"
|
||||||
@@ -384,6 +386,11 @@ static bool ParseArgs(int argc, char* argv[], RunOptions& options, bool& show_he
|
|||||||
::printf("invalid vblank frequency: %s\n", value.c_str());
|
::printf("invalid vblank frequency: %s\n", value.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (arg == "--trophy-duration") {
|
||||||
|
if (!ParseUint32(value, options.config.trophy_duration_seconds)) {
|
||||||
|
::printf("invalid trophy duration: %s\n", value.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (arg == "--console-language") {
|
} else if (arg == "--console-language") {
|
||||||
if (!ParseConsoleLanguage(value, options.config.console_language)) {
|
if (!ParseConsoleLanguage(value, options.config.console_language)) {
|
||||||
::printf("invalid console language: %s\n", value.c_str());
|
::printf("invalid console language: %s\n", value.c_str());
|
||||||
|
|||||||
Reference in New Issue
Block a user