Rewind: Fixed rewind no longer processing inputs after a power cycle

This commit is contained in:
Sour 2019-12-23 16:39:06 -05:00
parent 8fd28e2e8f
commit 32f5ece894
3 changed files with 11 additions and 2 deletions

View file

@ -406,6 +406,8 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile, bool forP
if(!forPowerCycle) { if(!forPowerCycle) {
_rewindManager.reset(new RewindManager(shared_from_this())); _rewindManager.reset(new RewindManager(shared_from_this()));
_notificationManager->RegisterNotificationListener(_rewindManager); _notificationManager->RegisterNotificationListener(_rewindManager);
} else {
_rewindManager->Initialize();
} }
//Poll controller input after creating rewind manager, to make sure it catches the first frame's input //Poll controller input after creating rewind manager, to make sure it catches the first frame's input

View file

@ -16,8 +16,7 @@ RewindManager::RewindManager(shared_ptr<Console> console)
_hasHistory = false; _hasHistory = false;
AddHistoryBlock(); AddHistoryBlock();
_console->GetControlManager()->RegisterInputProvider(this); Initialize();
_console->GetControlManager()->RegisterInputRecorder(this);
} }
RewindManager::~RewindManager() RewindManager::~RewindManager()
@ -26,6 +25,12 @@ RewindManager::~RewindManager()
_console->GetControlManager()->UnregisterInputRecorder(this); _console->GetControlManager()->UnregisterInputRecorder(this);
} }
void RewindManager::Initialize()
{
_console->GetControlManager()->RegisterInputProvider(this);
_console->GetControlManager()->RegisterInputRecorder(this);
}
void RewindManager::ClearBuffer() void RewindManager::ClearBuffer()
{ {
_hasHistory = false; _hasHistory = false;

View file

@ -56,6 +56,8 @@ public:
RewindManager(shared_ptr<Console> console); RewindManager(shared_ptr<Console> console);
virtual ~RewindManager(); virtual ~RewindManager();
void Initialize();
void ProcessNotification(ConsoleNotificationType type, void* parameter) override; void ProcessNotification(ConsoleNotificationType type, void* parameter) override;
void ProcessEndOfFrame(); void ProcessEndOfFrame();