mirror of
https://github.com/Retropex/dolphin.git
synced 2025-05-13 03:40:44 +02:00
200 lines
7.4 KiB
C++
200 lines
7.4 KiB
C++
// Copyright 2017 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "DolphinQt/Config/Graphics/PrimeWidget.h"
|
|
|
|
#include <QGridLayout>
|
|
#include <QGroupBox>
|
|
#include <QRadioButton>
|
|
#include <QLabel>
|
|
#include <QSignalBlocker>
|
|
#include <QVBoxLayout>
|
|
|
|
#include "Core/Config/GraphicsSettings.h"
|
|
#include "Core/ConfigManager.h"
|
|
|
|
#include "DolphinQt/Config/Graphics/GraphicsBool.h"
|
|
#include "DolphinQt/Config/Graphics/GraphicsRadio.h"
|
|
#include "DolphinQt/Config/Graphics/GraphicsInteger.h"
|
|
#include "DolphinQt/Config/Graphics/GraphicsSlider.h"
|
|
#include "DolphinQt/Config/Graphics/GraphicsWindow.h"
|
|
#include "DolphinQt/Settings.h"
|
|
|
|
#include "VideoCommon/VideoConfig.h"
|
|
#include "Core/PrimeHack/HackConfig.h"
|
|
#include <Core/Core.h>
|
|
|
|
PrimeWidget::PrimeWidget(GraphicsWindow* parent) : GraphicsWidget(parent)
|
|
{
|
|
CreateWidgets();
|
|
//LoadSettings();
|
|
ConnectWidgets();
|
|
AddDescriptions();
|
|
ArmPositionModeChanged(m_manual_arm_position->isChecked());
|
|
}
|
|
|
|
void PrimeWidget::CreateWidgets()
|
|
{
|
|
auto* main_layout = new QVBoxLayout;
|
|
|
|
// Graphics
|
|
auto* graphics_box = new QGroupBox(tr("Graphics"));
|
|
auto* graphics_layout = new QGridLayout();
|
|
|
|
graphics_box->setLayout(graphics_layout);
|
|
|
|
m_autoefb = new GraphicsBool(tr("Auto Toggle \"EFB to Texture\" While Scanning"), Config::AUTO_EFB);
|
|
m_disable_bloom = new GraphicsBool(tr("Disable Bloom [TheHatedGravity, dreamsyntax]"), Config::DISABLE_BLOOM);
|
|
m_toggle_arm_position = new GraphicsBool(tr("Toggle Viewmodel Adjustment"), Config::TOGGLE_ARM_REPOSITION);
|
|
m_toggle_culling = new GraphicsBool(tr("Disable Culling"), Config::TOGGLE_CULLING);
|
|
m_toggle_secondaryFX = new GraphicsBool(tr("Enable Original Gamecube Gun Effects"), Config::ENABLE_SECONDARY_GUNFX);
|
|
|
|
if (prime::GetFov() > 96)
|
|
m_toggle_culling->setEnabled(false);
|
|
|
|
graphics_layout->addWidget(m_autoefb, 0, 0);
|
|
graphics_layout->addWidget(m_toggle_secondaryFX, 1, 0);
|
|
graphics_layout->addWidget(m_disable_bloom, 2, 0);
|
|
graphics_layout->addWidget(m_toggle_arm_position, 3, 0);
|
|
graphics_layout->addWidget(m_toggle_culling, 4, 0);
|
|
|
|
// Viewmodel Position
|
|
auto* viewmodel_box = new QGroupBox(tr("Viewmodel Position"));
|
|
auto* viewmodel_layout = new QGridLayout();
|
|
|
|
viewmodel_box->setLayout(viewmodel_layout);
|
|
|
|
m_auto_arm_position = new GraphicsRadioInt(tr("Automatic Viewmodel Adjustment"), Config::ARMPOSITION_MODE, 0);
|
|
m_manual_arm_position = new GraphicsRadioInt(tr("Manual Viewmodel Adjustment"), Config::ARMPOSITION_MODE, 1);
|
|
|
|
m_x_axis = new GraphicsSlider(-50, 50, Config::ARMPOSITION_LEFTRIGHT);
|
|
m_z_axis = new GraphicsSlider(-50, 50, Config::ARMPOSITION_FORWARDBACK);
|
|
m_y_axis = new GraphicsSlider(-50, 50, Config::ARMPOSITION_UPDOWN);
|
|
|
|
x_counter = new GraphicsInteger(-50, 50, Config::ARMPOSITION_LEFTRIGHT);
|
|
x_counter->setMaximumWidth(50);
|
|
|
|
z_counter = new GraphicsInteger(-50, 50, Config::ARMPOSITION_FORWARDBACK);
|
|
z_counter->setMaximumWidth(50);
|
|
|
|
y_counter = new GraphicsInteger(-50, 50, Config::ARMPOSITION_UPDOWN);
|
|
y_counter->setMaximumWidth(50);
|
|
|
|
m_x_axis->setMinimum(-50);
|
|
m_x_axis->setMaximum(50);
|
|
m_x_axis->setPageStep(1);
|
|
|
|
m_z_axis->setMinimum(-50);
|
|
m_z_axis->setMaximum(50);
|
|
m_z_axis->setPageStep(1);
|
|
|
|
m_y_axis->setMinimum(-50);
|
|
m_y_axis->setMaximum(50);
|
|
m_y_axis->setPageStep(1);
|
|
|
|
viewmodel_layout->addWidget(m_auto_arm_position, 0, 0);
|
|
viewmodel_layout->addWidget(m_manual_arm_position, 0, 1);
|
|
|
|
viewmodel_layout->addWidget(new QLabel(tr("Left/Right")), 3, 0);
|
|
viewmodel_layout->addWidget(new QLabel(tr("Forwards/Backwards")), 4, 0);
|
|
viewmodel_layout->addWidget(new QLabel(tr("Up/Down")), 5, 0);
|
|
|
|
viewmodel_layout->addWidget(m_x_axis, 3, 1);
|
|
viewmodel_layout->addWidget(m_z_axis, 4, 1);
|
|
viewmodel_layout->addWidget(m_y_axis, 5, 1);
|
|
|
|
viewmodel_layout->addWidget(x_counter, 3, 2);
|
|
viewmodel_layout->addWidget(z_counter, 4, 2);
|
|
viewmodel_layout->addWidget(y_counter, 5, 2);
|
|
|
|
main_layout->addWidget(graphics_box);
|
|
main_layout->addWidget(viewmodel_box);
|
|
main_layout->addStretch();
|
|
|
|
setLayout(main_layout);
|
|
}
|
|
|
|
void PrimeWidget::ArmPositionModeChanged(bool mode)
|
|
{
|
|
m_x_axis->setEnabled(mode);
|
|
m_y_axis->setEnabled(mode);
|
|
m_z_axis->setEnabled(mode);
|
|
|
|
x_counter->setEnabled(mode);
|
|
y_counter->setEnabled(mode);
|
|
z_counter->setEnabled(mode);
|
|
}
|
|
|
|
void PrimeWidget::ConnectWidgets()
|
|
{
|
|
connect(m_auto_arm_position, &QRadioButton::clicked, this, [=](bool checked) {PrimeWidget::ArmPositionModeChanged(!checked);});
|
|
connect(m_manual_arm_position, &QRadioButton::clicked, this, [=](bool checked) {PrimeWidget::ArmPositionModeChanged(checked);});
|
|
connect(m_toggle_arm_position, &QCheckBox::clicked, this,
|
|
[=](bool checked)
|
|
{
|
|
m_auto_arm_position->setEnabled(checked);
|
|
m_manual_arm_position->setEnabled(checked);
|
|
PrimeWidget::ArmPositionModeChanged(m_manual_arm_position->isChecked());
|
|
});
|
|
connect(m_toggle_secondaryFX, &QCheckBox::clicked, this,
|
|
[=](bool checked)
|
|
{
|
|
if (Core::GetState() != Core::State::Uninitialized) {
|
|
if (m_toggle_secondaryFX->isChecked())
|
|
m_toggle_secondaryFX->setEnabled(false);
|
|
}
|
|
});
|
|
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
|
|
[=](Core::State state)
|
|
{
|
|
if (state != Core::State::Uninitialized) {
|
|
if (prime::GetEnableSecondaryGunFX())
|
|
m_toggle_secondaryFX->setEnabled(false);
|
|
}
|
|
else {
|
|
m_toggle_secondaryFX->setEnabled(true);
|
|
m_toggle_culling->setEnabled(true);
|
|
}
|
|
});
|
|
}
|
|
|
|
void PrimeWidget::LoadSettings() {}
|
|
|
|
void PrimeWidget::SaveSettings() {}
|
|
|
|
void PrimeWidget::AddDescriptions()
|
|
{
|
|
static const char TR_AUTO_EFB[] =
|
|
QT_TR_NOOP("Automatically disables 'Store EFB Copies to Texture Only'"
|
|
"while the Scan Visor is active in Metroid Prime 2 and Metroid Prime 3. \n\n"
|
|
"While 'Store EFB Copies to Texture Only' may improve performance, having it "
|
|
"enabled will break the scan visor in Metroid Prime 2 and Metroid Prime 3.");
|
|
static const char TR_BLOOM[] =
|
|
QT_TR_NOOP("Disables Bloom.\n\nSource: TheHatedGravity and dreamsyntax.");
|
|
static const char TR_TOGGLE_ARM_POSITION[] =
|
|
QT_TR_NOOP("Toggles repositioning of Samus's arms in the viewmodel. Repositioning her arms is visually beneficial for high Field Of Views.");
|
|
static const char TR_TOGGLE_CULL[] =
|
|
QT_TR_NOOP("Disables graphical culling. This allows for Field of Views above 101 in Metroid Prime 1 and Metroid Prime 2, and above 94 in Metroid Prime 3.");
|
|
static const char TR_MANUAL_POSITION[] =
|
|
QT_TR_NOOP("Allows you to manually modify the XYZ positioning of Samus's arms in the viewmodel.");
|
|
static const char TR_AUTO_POSITION[] =
|
|
QT_TR_NOOP("Automatically adjusts the Samus's arm position in the view model, relative to the Field Of View.");
|
|
static const char TR_X_AXIS[] =
|
|
QT_TR_NOOP("Modifies the arm position on the X axis. This is left and right.");
|
|
static const char TR_Y_AXIS[] =
|
|
QT_TR_NOOP("Modifies the arm position on the Y axis. This is up and down.");
|
|
static const char TR_Z_AXIS[] =
|
|
QT_TR_NOOP("Modifies the arm position on the Z axis. This is back and forward.");
|
|
|
|
AddDescription(m_autoefb, TR_AUTO_EFB);
|
|
AddDescription(m_disable_bloom, TR_BLOOM);
|
|
AddDescription(m_toggle_culling, TR_TOGGLE_CULL);
|
|
AddDescription(m_toggle_arm_position, TR_TOGGLE_ARM_POSITION);
|
|
AddDescription(m_manual_arm_position, TR_MANUAL_POSITION);
|
|
AddDescription(m_auto_arm_position, TR_AUTO_POSITION);
|
|
AddDescription(m_x_axis, TR_X_AXIS);
|
|
AddDescription(m_x_axis, TR_Y_AXIS);
|
|
AddDescription(m_x_axis, TR_Z_AXIS);
|
|
}
|