Qt: Add menu items for adjusting in-game solar levels

This commit is contained in:
Jeffrey Pfau 2015-01-21 01:13:28 -08:00
parent 71e5aacd5b
commit c7593d7073
3 changed files with 49 additions and 1 deletions

View File

@ -24,6 +24,8 @@ extern "C" {
using namespace QGBA;
using namespace std;
const int GameController::LUX_LEVELS[10] = { 5, 11, 18, 27, 42, 62, 84, 109, 139, 183 };
GameController::GameController(QObject* parent)
: QObject(parent)
, m_drawContext(new uint32_t[256 * 256])
@ -62,6 +64,7 @@ GameController::GameController(QObject* parent)
GameControllerLux* lux = static_cast<GameControllerLux*>(context);
return lux->value;
};
setLuminanceLevel(0);
m_rtc.p = this;
m_rtc.override = GameControllerRTC::NO_OVERRIDE;
@ -419,6 +422,27 @@ void GameController::clearAVStream() {
threadContinue();
}
void GameController::setLuminanceValue(uint8_t value) {
m_luxValue = value;
value = std::max<int>(value - 0x16, 0);
m_luxLevel = 10;
for (int i = 0; i < 10; ++i) {
if (value < LUX_LEVELS[i]) {
m_luxLevel = i;
break;
}
}
}
void GameController::setLuminanceLevel(int level) {
int value = 0x16;
level = std::max(0, std::min(10, level));
if (level > 0) {
value += LUX_LEVELS[level - 1];
}
setLuminanceValue(value);
}
void GameController::setRealTime() {
m_rtc.override = GameControllerRTC::NO_OVERRIDE;
}

View File

@ -98,7 +98,11 @@ public slots:
void setTurbo(bool, bool forced = true);
void setAVStream(GBAAVStream*);
void clearAVStream();
void setLuminanceValue(uint8_t value) { m_luxValue = value; }
void setLuminanceValue(uint8_t value);
void setLuminanceLevel(int level);
void increaseLuminanceLevel() { setLuminanceLevel(m_luxLevel + 1); }
void decreaseLuminanceLevel() { setLuminanceLevel(m_luxLevel - 1); }
void setRealTime();
void setFixedTime(const QDateTime& time);
@ -154,6 +158,9 @@ private:
uint8_t value;
} m_lux;
uint8_t m_luxValue;
int m_luxLevel;
static const int LUX_LEVELS[10];
struct GameControllerRTC : GBARTCSource {
GameController* p;

View File

@ -658,6 +658,23 @@ void Window::setupMenu(QMenuBar* menubar) {
addControlledAction(toolsMenu, gdbWindow, "gdbWindow");
#endif
toolsMenu->addSeparator();
QAction* solarIncrease = new QAction(tr("Increase solar level"), toolsMenu);
connect(solarIncrease, SIGNAL(triggered()), m_controller, SLOT(increaseLuminanceLevel()));
addControlledAction(toolsMenu, solarIncrease, "increaseLuminanceLevel");
QAction* solarDecrease = new QAction(tr("Decrease solar level"), toolsMenu);
connect(solarDecrease, SIGNAL(triggered()), m_controller, SLOT(decreaseLuminanceLevel()));
addControlledAction(toolsMenu, solarDecrease, "decreaseLuminanceLevel");
QAction* maxSolar = new QAction(tr("Brightest solar level"), toolsMenu);
connect(maxSolar, &QAction::triggered, [this]() { m_controller->setLuminanceLevel(10); });
addControlledAction(toolsMenu, maxSolar, "maxLuminanceLevel");
QAction* minSolar = new QAction(tr("Darkest solar level"), toolsMenu);
connect(minSolar, &QAction::triggered, [this]() { m_controller->setLuminanceLevel(0); });
addControlledAction(toolsMenu, minSolar, "minLuminanceLevel");
toolsMenu->addSeparator();
addControlledAction(toolsMenu, toolsMenu->addAction(tr("Settings..."), this, SLOT(openSettingsWindow())), "settings");
addControlledAction(toolsMenu, toolsMenu->addAction(tr("Edit shortcuts..."), this, SLOT(openShortcutWindow())), "shortcuts");