Add turbo

This commit is contained in:
Jeffrey Pfau 2014-10-19 01:10:00 -07:00
parent 24094ecdf0
commit 05ec732a83
3 changed files with 42 additions and 4 deletions

View File

@ -24,6 +24,8 @@ GameController::GameController(QObject* parent)
, m_audioProcessor(new AudioProcessor)
, m_videoSync(VIDEO_SYNC)
, m_audioSync(AUDIO_SYNC)
, m_turbo(false)
, m_turboForced(false)
{
m_renderer = new GBAVideoSoftwareRenderer;
GBAVideoSoftwareRendererCreate(m_renderer);
@ -238,16 +240,36 @@ void GameController::saveState(int slot) {
void GameController::setVideoSync(bool set) {
m_videoSync = set;
if (!m_turbo) {
GBAThreadInterrupt(&m_threadContext);
m_threadContext.sync.videoFrameWait = set;
GBAThreadContinue(&m_threadContext);
}
}
void GameController::setAudioSync(bool set) {
m_audioSync = set;
if (!m_turbo) {
GBAThreadInterrupt(&m_threadContext);
m_threadContext.sync.audioWait = set;
GBAThreadContinue(&m_threadContext);
}
}
void GameController::setTurbo(bool set, bool forced) {
if (m_turboForced && !forced) {
return;
}
m_turbo = set;
if (set) {
m_turboForced = forced;
} else {
m_turboForced = false;
}
GBAThreadInterrupt(&m_threadContext);
m_threadContext.sync.audioWait = set ? false : m_audioSync;
m_threadContext.sync.videoFrameWait = set ? false : m_videoSync;
GBAThreadContinue(&m_threadContext);
}
void GameController::updateKeys() {

View File

@ -69,6 +69,7 @@ public slots:
void saveState(int slot);
void setVideoSync(bool);
void setAudioSync(bool);
void setTurbo(bool, bool forced = true);
#ifdef BUILD_SDL
private slots:
@ -98,6 +99,8 @@ private:
bool m_videoSync;
bool m_audioSync;
bool m_turbo;
bool m_turboForced;
};
}

View File

@ -154,6 +154,9 @@ void Window::keyPressEvent(QKeyEvent* event) {
QWidget::keyPressEvent(event);
return;
}
if (event->key() == Qt::Key_Tab) {
m_controller->setTurbo(true, false);
}
GBAKey key = mapKey(event->key());
if (key == GBA_KEY_NONE) {
QWidget::keyPressEvent(event);
@ -168,6 +171,9 @@ void Window::keyReleaseEvent(QKeyEvent* event) {
QWidget::keyReleaseEvent(event);
return;
}
if (event->key() == Qt::Key_Tab) {
m_controller->setTurbo(false, false);
}
GBAKey key = mapKey(event->key());
if (key == GBA_KEY_NONE) {
QWidget::keyPressEvent(event);
@ -359,6 +365,13 @@ void Window::setupMenu(QMenuBar* menubar) {
emulationMenu->addSeparator();
QAction* turbo = new QAction(tr("T&urbo"), emulationMenu);
turbo->setCheckable(true);
turbo->setChecked(false);
turbo->setShortcut(tr("Shift+Tab"));
connect(turbo, SIGNAL(triggered(bool)), m_controller, SLOT(setTurbo(bool)));
emulationMenu->addAction(turbo);
QAction* videoSync = new QAction(tr("Sync to &video"), emulationMenu);
videoSync->setCheckable(true);
videoSync->setChecked(GameController::VIDEO_SYNC);