Skip controller config if known device is added after startup

Fix for problems like this:
http://blog.petrockblock.com/forums/topic/retropie-wont-recognize-ps3-controller-unless-ps-button-is-hit-before-es-start/
http://blog.petrockblock.com/forums/topic/elegent-method-of-detecting-wireless-controller-before-starting-es/

No controller found message pops up if no controller is connected. If a known controller is connected and any button is pressed system selection menu will show up instantly.
This commit is contained in:
gizmo98 2015-09-28 19:25:15 +02:00
parent 64a208ff59
commit cdda6f6dc1

View file

@ -8,11 +8,15 @@
#include <string> #include <string>
#include <sstream> #include <sstream>
#include "Util.h" #include "Util.h"
#include <boost/filesystem.hpp>
#include <boost/locale.hpp>
#define HOLD_TIME 1000 #define HOLD_TIME 1000
using namespace Eigen; using namespace Eigen;
namespace fs = boost::filesystem;
GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function<void()>& doneCallback) : GuiComponent(window), mFirstRun(firstRun), GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function<void()>& doneCallback) : GuiComponent(window), mFirstRun(firstRun),
mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5))
{ {
@ -100,15 +104,26 @@ void GuiDetectDevice::update(int deltaTime)
{ {
if(mHoldingConfig) if(mHoldingConfig)
{ {
mHoldTime -= deltaTime; // If ES starts and if a known device is connected after startup skip controller configuration
const float t = (float)mHoldTime / HOLD_TIME; if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0)
unsigned int c = (unsigned char)(t * 255);
mDeviceHeld->setColor((c << 24) | (c << 16) | (c << 8) | 0xFF);
if(mHoldTime <= 0)
{ {
// picked one! InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands
mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback)); if(mDoneCallback)
delete this; mDoneCallback();
delete this; // delete GUI element
}
else
{
mHoldTime -= deltaTime;
const float t = (float)mHoldTime / HOLD_TIME;
unsigned int c = (unsigned char)(t * 255);
mDeviceHeld->setColor((c << 24) | (c << 16) | (c << 8) | 0xFF);
if(mHoldTime <= 0)
{
// picked one!
mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback));
delete this;
}
} }
} }
} }