Merge pull request #1204 from Huxellberger/master

Combined IncreaseSpeed and DecreaseSpeed in SpeedLimiterClass
This commit is contained in:
zilmar 2016-09-18 06:20:27 +10:00 committed by GitHub
commit 2cb00d3411
4 changed files with 44 additions and 46 deletions

View File

@ -67,8 +67,7 @@ public:
void StartEmulation(bool NewThread); void StartEmulation(bool NewThread);
void EndEmulation(); void EndEmulation();
void SyncToAudio(); void SyncToAudio();
void IncreaseSpeed() { m_Limiter.IncreaseSpeed(); } void AlterSpeed(const CSpeedLimiter::ESpeedChange SpeedChange) { m_Limiter.AlterSpeed(SpeedChange); }
void DecreaseSpeed() { m_Limiter.DecreaseSpeed(); }
void Reset(bool bInitReg, bool ClearMenory); void Reset(bool bInitReg, bool ClearMenory);
void GameReset(); void GameReset();
void PluginReset(); void PluginReset();

View File

@ -8,14 +8,22 @@
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html * * GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
* * * *
****************************************************************************/ ****************************************************************************/
#include "stdafx.h" #include "stdafx.h"
#include "SpeedLimiterClass.h" #include "Project64-Core/N64System/SpeedLimiterClass.h"
#include <Common/Util.h> #include <Common/Util.h>
// ---------------------------------------------------
const uint32_t CSpeedLimiter::m_DefaultSpeed = 60;
// ---------------------------------------------------
CSpeedLimiter::CSpeedLimiter() : CSpeedLimiter::CSpeedLimiter() :
m_Frames(0), m_Frames(0),
m_Speed(60), m_Speed(m_DefaultSpeed),
m_BaseSpeed(60) m_BaseSpeed(m_DefaultSpeed)
{ {
} }
@ -73,38 +81,24 @@ bool CSpeedLimiter::Timer_Process(uint32_t * FrameRate)
return false; return false;
} }
void CSpeedLimiter::IncreaseSpeed() void CSpeedLimiter::AlterSpeed( const ESpeedChange SpeedChange )
{ {
if (m_Speed >= 60) int32_t SpeedFactor = 1;
if (SpeedChange == DECREASE_SPEED) { SpeedFactor = -1; }
if (m_Speed >= m_DefaultSpeed)
{ {
m_Speed += 10; m_Speed += 10 * SpeedFactor;
} }
else if (m_Speed >= 15) else if (m_Speed >= 15)
{ {
m_Speed += 5; m_Speed += 5 * SpeedFactor;
} }
else else if (m_Speed > 1 && SpeedChange == DECREASE_SPEED || SpeedChange == INCREASE_SPEED)
{ {
m_Speed += 1; m_Speed += 1 * SpeedFactor;
} }
SpeedChanged(m_Speed);
FixSpeedRatio();
}
void CSpeedLimiter::DecreaseSpeed()
{
if (m_Speed > 60)
{
m_Speed -= 10;
}
else if (m_Speed > 15)
{
m_Speed -= 5;
}
else if (m_Speed > 1)
{
m_Speed -= 1;
}
SpeedChanged(m_Speed); SpeedChanged(m_Speed);
FixSpeedRatio(); FixSpeedRatio();
} }

View File

@ -11,19 +11,22 @@
#pragma once #pragma once
#include <Project64-core/Settings/GameSettings.h> #include <Project64-core/Settings/GameSettings.h>
#include <Common/HighResTimeStamp.h> #include <Common/HighResTimeStamp.h>
class CSpeedLimiter : class CSpeedLimiter :
private CGameSettings private CGameSettings
{ {
public: public:
enum ESpeedChange { INCREASE_SPEED, DECREASE_SPEED };
CSpeedLimiter(); CSpeedLimiter();
~CSpeedLimiter(); ~CSpeedLimiter();
void SetHertz(const uint32_t Hertz); void SetHertz(const uint32_t Hertz);
bool Timer_Process(uint32_t* const FrameRate); bool Timer_Process(uint32_t* const FrameRate);
void IncreaseSpeed();
void DecreaseSpeed(); void AlterSpeed(const ESpeedChange SpeedChange);
private: private:
CSpeedLimiter(const CSpeedLimiter&); // Disable copy constructor CSpeedLimiter(const CSpeedLimiter&); // Disable copy constructor
@ -31,7 +34,9 @@ private:
void FixSpeedRatio(); void FixSpeedRatio();
uint32_t m_Speed, m_BaseSpeed, m_Frames;
HighResTimeStamp m_LastTime; HighResTimeStamp m_LastTime;
uint32_t m_MicroSecondsPerFrame;
uint32_t m_Speed, m_BaseSpeed, m_Frames, m_MicroSecondsPerFrame;
static const uint32_t m_DefaultSpeed;
}; };

View File

@ -385,10 +385,10 @@ bool CMainMenu::ProcessMessage(HWND hWnd, DWORD /*FromAccelerator*/, DWORD MenuI
} }
break; break;
case ID_OPTIONS_INCREASE_SPEED: case ID_OPTIONS_INCREASE_SPEED:
g_BaseSystem->IncreaseSpeed(); g_BaseSystem->AlterSpeed(CSpeedLimiter::INCREASE_SPEED);
break; break;
case ID_OPTIONS_DECREASE_SPEED: case ID_OPTIONS_DECREASE_SPEED:
g_BaseSystem->DecreaseSpeed(); g_BaseSystem->AlterSpeed(CSpeedLimiter::DECREASE_SPEED);
break; break;
case ID_OPTIONS_FULLSCREEN: case ID_OPTIONS_FULLSCREEN:
g_BaseSystem->ExternalEvent(SysEvent_ChangingFullScreen); g_BaseSystem->ExternalEvent(SysEvent_ChangingFullScreen);