From 9c5cfa2e795e84eb1e9481277742549b8d254e2c Mon Sep 17 00:00:00 2001 From: Souryo Date: Tue, 21 Nov 2017 17:54:54 -0500 Subject: [PATCH] Lua: Fixed inputPolled event being called multiple times per frame --- Core/ControlManager.cpp | 26 ++++++++++---------------- Core/GameServer.cpp | 12 +++++++----- Core/GameServer.h | 2 +- Core/IInputRecorder.h | 4 ++-- Core/MovieRecorder.cpp | 10 ++++------ Core/MovieRecorder.h | 3 +-- Core/RewindManager.cpp | 6 ++++-- Core/RewindManager.h | 2 +- 8 files changed, 30 insertions(+), 35 deletions(-) diff --git a/Core/ControlManager.cpp b/Core/ControlManager.cpp index ed3d54fa..dc1b54ab 100644 --- a/Core/ControlManager.cpp +++ b/Core/ControlManager.cpp @@ -240,7 +240,7 @@ void ControlManager::UpdateInputState() auto lock = _deviceLock.AcquireSafe(); - string log = ""; + //string log = ""; for(shared_ptr &device : _controlDevices) { device->ClearState(); @@ -258,24 +258,18 @@ void ControlManager::UpdateInputState() } device->OnAfterSetState(); - - shared_ptr debugger = Console::GetInstance()->GetDebugger(false); - if(debugger) { - debugger->ProcessEvent(EventType::InputPolled); - } - - log += "|" + device->GetTextState(); - - for(IInputRecorder* recorder : _inputRecorders) { - recorder->RecordInput(device.get()); - } + //log += "|" + device->GetTextState(); } - + + shared_ptr debugger = Console::GetInstance()->GetDebugger(false); + if(debugger) { + debugger->ProcessEvent(EventType::InputPolled); + } + for(IInputRecorder* recorder : _inputRecorders) { - recorder->EndFrame(); + recorder->RecordInput(_controlDevices); } - - MessageManager::Log(log); + //MessageManager::Log(log); } uint32_t ControlManager::GetLagCounter() diff --git a/Core/GameServer.cpp b/Core/GameServer.cpp index cd4ee1a6..c4946662 100644 --- a/Core/GameServer.cpp +++ b/Core/GameServer.cpp @@ -85,12 +85,14 @@ bool GameServer::SetInput(BaseControlDevice *device) return false; } -void GameServer::RecordInput(BaseControlDevice *device) +void GameServer::RecordInput(vector> devices) { - for(shared_ptr connection : _openConnections) { - if(!connection->ConnectionError()) { - //Send movie stream - connection->SendMovieData(device->GetPort(), device->GetRawState()); + for(shared_ptr &device : devices) { + for(shared_ptr connection : _openConnections) { + if(!connection->ConnectionError()) { + //Send movie stream + connection->SendMovieData(device->GetPort(), device->GetRawState()); + } } } } diff --git a/Core/GameServer.h b/Core/GameServer.h index a508aaf7..36b61555 100644 --- a/Core/GameServer.h +++ b/Core/GameServer.h @@ -47,5 +47,5 @@ public: static list> GetConnectionList(); bool SetInput(BaseControlDevice *device) override; - void RecordInput(BaseControlDevice *device) override; + void RecordInput(vector> devices) override; }; \ No newline at end of file diff --git a/Core/IInputRecorder.h b/Core/IInputRecorder.h index bd38f380..3e7195d8 100644 --- a/Core/IInputRecorder.h +++ b/Core/IInputRecorder.h @@ -1,10 +1,10 @@ #pragma once +#include "stdafx.h" class BaseControlDevice; class IInputRecorder { public: - virtual void RecordInput(BaseControlDevice *device) = 0; - virtual void EndFrame() { } + virtual void RecordInput(vector> devices) = 0; }; \ No newline at end of file diff --git a/Core/MovieRecorder.cpp b/Core/MovieRecorder.cpp index e31d3f6e..be96e46f 100644 --- a/Core/MovieRecorder.cpp +++ b/Core/MovieRecorder.cpp @@ -179,13 +179,11 @@ bool MovieRecorder::Stop() return false; } -void MovieRecorder::RecordInput(BaseControlDevice *device) -{ - _inputData << ("|" + device->GetTextState()); -} - -void MovieRecorder::EndFrame() +void MovieRecorder::RecordInput(vector> devices) { + for(shared_ptr &device : devices) { + _inputData << ("|" + device->GetTextState()); + } _inputData << "\n"; } diff --git a/Core/MovieRecorder.h b/Core/MovieRecorder.h index b37088ce..b72bbd33 100644 --- a/Core/MovieRecorder.h +++ b/Core/MovieRecorder.h @@ -31,8 +31,7 @@ public: bool Record(string filename, bool reset); bool Stop(); - void RecordInput(BaseControlDevice *device) override; - void EndFrame() override; + void RecordInput(vector> devices) override; // Inherited via IBatteryRecorder virtual void OnLoadBattery(string extension, vector batteryData) override; diff --git a/Core/RewindManager.cpp b/Core/RewindManager.cpp index 59c891b5..2989ff7e 100644 --- a/Core/RewindManager.cpp +++ b/Core/RewindManager.cpp @@ -267,10 +267,12 @@ bool RewindManager::ProcessAudio(int16_t * soundBuffer, uint32_t sampleCount, ui } } -void RewindManager::RecordInput(BaseControlDevice *device) +void RewindManager::RecordInput(vector> devices) { if(EmulationSettings::GetRewindBufferSize() > 0 && _instance && _instance->_rewindState == RewindState::Stopped) { - _instance->_currentHistory.InputLogs[device->GetPort()].push_back(device->GetRawState()); + for(shared_ptr &device : devices) { + _instance->_currentHistory.InputLogs[device->GetPort()].push_back(device->GetRawState()); + } } } diff --git a/Core/RewindManager.h b/Core/RewindManager.h index 870c7455..5a565c74 100644 --- a/Core/RewindManager.h +++ b/Core/RewindManager.h @@ -51,7 +51,7 @@ public: void ProcessNotification(ConsoleNotificationType type, void* parameter) override; void ProcessEndOfFrame(); - void RecordInput(BaseControlDevice *device) override; + void RecordInput(vector> devices) override; bool SetInput(BaseControlDevice *device) override; static void StartRewinding(bool forDebugger = false);