summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2013-01-24 16:58:28 +0100
committerdegasus <wickmarkus@web.de>2013-01-24 16:58:28 +0100
commite0ffdda26e5fb34b2f0d59d5d45b0deda9c90c19 (patch)
tree8e289ea93c97fe7430ae501200b60327f572c7e2 /Source/Core/InputCommon/Src
parentd5748ebaef93cd601ae6ab5e12f39dd201593ad0 (diff)
parentd60cc373d1b389215eb63c4e20fe24e902680c7a (diff)
Merge branch 'immediate-removal' into GLSL-master
Conflicts: Source/Core/VideoCommon/Src/PixelShaderGen.cpp Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp immediate-removal is a new created branch seperated from master but reverted the revert of immediate-removal so we get less conflicts by merging
Diffstat (limited to 'Source/Core/InputCommon/Src')
-rw-r--r--Source/Core/InputCommon/Src/ControllerEmu.cpp1
-rw-r--r--Source/Core/InputCommon/Src/ControllerEmu.h5
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp6
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h32
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp23
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h2
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm8
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h32
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm67
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp4
-rw-r--r--Source/Core/InputCommon/Src/InputConfig.cpp47
-rw-r--r--Source/Core/InputCommon/Src/InputConfig.h2
14 files changed, 207 insertions, 30 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerEmu.cpp b/Source/Core/InputCommon/Src/ControllerEmu.cpp
index 9065888d7d..2e6ad10617 100644
--- a/Source/Core/InputCommon/Src/ControllerEmu.cpp
+++ b/Source/Core/InputCommon/Src/ControllerEmu.cpp
@@ -295,6 +295,7 @@ ControllerEmu::Tilt::Tilt(const char* const _name)
settings.push_back(new Setting(_trans("Dead Zone"), 0, 0, 50));
settings.push_back(new Setting(_trans("Circle Stick"), 0));
+ settings.push_back(new Setting(_trans("Angle"), 0.9f, 0, 180));
}
ControllerEmu::Cursor::Cursor(const char* const _name)
diff --git a/Source/Core/InputCommon/Src/ControllerEmu.h b/Source/Core/InputCommon/Src/ControllerEmu.h
index 888e0c7fa9..6084a610a1 100644
--- a/Source/Core/InputCommon/Src/ControllerEmu.h
+++ b/Source/Core/InputCommon/Src/ControllerEmu.h
@@ -307,6 +307,7 @@ public:
ControlState deadzone = settings[0]->value;
ControlState circle = settings[1]->value;
+ auto const angle = settings[2]->value / 1.8f;
ControlState m = controls[4]->control_ref->State();
// modifier code
@@ -363,8 +364,8 @@ public:
m_tilt[1] = std::max(m_tilt[1] - 0.1f, yy);
}
- *y = C(m_tilt[1] * range + base);
- *x = C(m_tilt[0] * range + base);
+ *y = C(m_tilt[1] * angle * range + base);
+ *x = C(m_tilt[0] * angle * range + base);
}
private:
float m_tilt[2];
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
index 82cfe2469e..8e96231674 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
@@ -45,7 +45,7 @@ void ControllerInterface::Initialize()
ciface::Xlib::Init(m_devices, m_hwnd);
#endif
#ifdef CIFACE_USE_OSX
- ciface::OSX::Init(m_devices);
+ ciface::OSX::Init(m_devices, m_hwnd);
#endif
#ifdef CIFACE_USE_SDL
ciface::SDL::Init(m_devices);
@@ -461,7 +461,7 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
i = device->Inputs().begin(),
e = device->Inputs().end();
for (std::vector<bool>::iterator state = states.begin(); i != e; ++i)
- *state++ = ((*i)->GetState() > INPUT_DETECT_THRESHOLD);
+ *state++ = ((*i)->GetState() > (1 - INPUT_DETECT_THRESHOLD));
while (time < ms)
{
@@ -477,7 +477,7 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
if (false == *state)
return *i;
}
- else
+ else if ((*i)->GetState() < (1 - INPUT_DETECT_THRESHOLD))
*state = false;
}
Common::SleepCurrentThread(10); time += 10;
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
index 7c5a236d75..b846bb56e8 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
+++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.h
@@ -87,7 +87,7 @@ public:
Input* ToInput() { return this; }
};
-
+
//
// Output
//
@@ -122,6 +122,36 @@ public:
protected:
void AddInput(Input* const i);
void AddOutput(Output* const o);
+
+ class FullAnalogSurface : public Input
+ {
+ public:
+ FullAnalogSurface(Input* low, Input* high)
+ : m_low(*low), m_high(*high)
+ {}
+
+ ControlState GetState() const
+ {
+ return (1 + m_high.GetState() - m_low.GetState()) / 2;
+ }
+
+ std::string GetName() const
+ {
+ return m_low.GetName() + *m_high.GetName().rbegin();
+ }
+
+ private:
+ Input& m_low;
+ Input& m_high;
+ };
+
+ void AddAnalogInputs(Input* low, Input* high)
+ {
+ AddInput(low);
+ AddInput(high);
+ AddInput(new FullAnalogSurface(low, high));
+ AddInput(new FullAnalogSurface(high, low));
+ }
private:
std::vector<Input*> m_inputs;
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
index 08d62bcfc1..9bc5364e76 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputJoystick.cpp
@@ -254,9 +254,9 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
for (unsigned int offset = 0; offset < DIJOFS_BUTTON(0) / sizeof(LONG); ++offset)
{
range.diph.dwObj = offset * sizeof(LONG);
- // try to set some nice power of 2 values (8192)
- range.lMin = -(1 << 13);
- range.lMax = (1 << 13);
+ // try to set some nice power of 2 values (128) to match the GameCube controls
+ range.lMin = -(1 << 7);
+ range.lMax = (1 << 7);
m_device->SetProperty(DIPROP_RANGE, &range.diph);
// but i guess not all devices support setting range
// so i getproperty right afterward incase it didn't set :P
@@ -267,8 +267,8 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
const LONG& ax = (&m_state_in.lX)[offset];
// each axis gets a negative and a positive input instance associated with it
- AddInput(new Axis(offset, ax, base, range.lMin-base));
- AddInput(new Axis(offset, ax, base, range.lMax-base));
+ AddAnalogInputs(new Axis(offset, ax, base, range.lMin-base),
+ new Axis(offset, ax, base, range.lMax-base));
}
}
@@ -281,17 +281,19 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
if ( objects.size() )
{
// temporary
- DWORD rgdwAxes[] = {DIJOFS_X, DIJOFS_Y};
- LONG rglDirection[] = {0, 0};
+ DWORD rgdwAxes[2] = {DIJOFS_X, DIJOFS_Y};
+ LONG rglDirection[2] = {-200, 0};
DIEFFECT eff;
ZeroMemory(&eff, sizeof(eff));
eff.dwSize = sizeof(DIEFFECT);
eff.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;
eff.dwDuration = INFINITE; // (4 * DI_SECONDS)
+ eff.dwSamplePeriod = 0;
eff.dwGain = DI_FFNOMINALMAX;
eff.dwTriggerButton = DIEB_NOTRIGGER;
- eff.cAxes = std::min((DWORD)2, (DWORD)objects.size());
+ eff.dwTriggerRepeatInterval = 0;
+ eff.cAxes = std::min((DWORD)1, (DWORD)objects.size());
eff.rgdwAxes = rgdwAxes;
eff.rglDirection = rglDirection;
@@ -310,7 +312,12 @@ Joystick::Joystick( /*const LPCDIDEVICEINSTANCE lpddi, */const LPDIRECTINPUTDEVI
{
// ugly if ladder
if (0 == f)
+ {
+ DICONSTANTFORCE diCF = {-10000};
+ diCF.lMagnitude = DI_FFNOMINALMAX;
eff.cbTypeSpecificParams = sizeof(DICONSTANTFORCE);
+ eff.lpvTypeSpecificParams = &diCF;
+ }
else if (1 == f)
eff.cbTypeSpecificParams = sizeof(DIRAMPFORCE);
else
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h
index 0458d87e1d..225906c35d 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h
@@ -7,7 +7,7 @@ namespace ciface
namespace OSX
{
-void Init(std::vector<ControllerInterface::Device*>& devices);
+void Init(std::vector<ControllerInterface::Device*>& devices, void *window);
void DeInit();
void DeviceElementDebugPrint(const void *, void *);
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm
index bf4f49bac6..aef8f283c1 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm
@@ -1,5 +1,6 @@
#include <Foundation/Foundation.h>
#include <IOKit/hid/IOHIDLib.h>
+#include <Cocoa/Cocoa.h>
#include "../ControllerInterface.h"
#include "OSX.h"
@@ -131,6 +132,7 @@ void DeviceDebugPrint(IOHIDDeviceRef device)
#endif
}
+static void *g_window;
static void DeviceMatching_callback(void* inContext,
IOReturn inResult,
@@ -150,7 +152,7 @@ static void DeviceMatching_callback(void* inContext,
if (IOHIDDeviceConformsTo(inIOHIDDeviceRef,
kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard))
devices->push_back(new Keyboard(inIOHIDDeviceRef,
- name, kbd_name_counts[name]++));
+ name, kbd_name_counts[name]++, g_window));
#if 0
else if (IOHIDDeviceConformsTo(inIOHIDDeviceRef,
kHIDPage_GenericDesktop, kHIDUsage_GD_Mouse))
@@ -162,13 +164,15 @@ static void DeviceMatching_callback(void* inContext,
name, joy_name_counts[name]++));
}
-void Init(std::vector<ControllerInterface::Device*>& devices)
+void Init(std::vector<ControllerInterface::Device*>& devices, void *window)
{
HIDManager = IOHIDManagerCreate(kCFAllocatorDefault,
kIOHIDOptionsTypeNone);
if (!HIDManager)
NSLog(@"Failed to create HID Manager reference");
+ g_window = window;
+
IOHIDManagerSetDeviceMatching(HIDManager, NULL);
// Callbacks for acquisition or loss of a matching device
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
index 129a5f38e0..60c0cc8c50 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXJoystick.mm
@@ -64,8 +64,8 @@ Joystick::Joystick(IOHIDDeviceRef device, std::string name, int index)
AddInput(new Hat(e, m_device, Hat::down));
AddInput(new Hat(e, m_device, Hat::left));
} else {
- AddInput(new Axis(e, m_device, Axis::negative));
- AddInput(new Axis(e, m_device, Axis::positive));
+ AddAnalogInputs(new Axis(e, m_device, Axis::negative),
+ new Axis(e, m_device, Axis::positive));
}
}
CFRelease(axes);
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h
index 1a7fcd045b..d59651c98a 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h
@@ -21,21 +21,51 @@ private:
const IOHIDDeviceRef m_device;
std::string m_name;
};
+ class Cursor : public Input
+ {
+ public:
+ std::string GetName() const;
+ bool IsDetectable() { return false; }
+ Cursor(u8 index, const float& axis, const bool positive) : m_index(index), m_axis(axis), m_positive(positive) {}
+ ControlState GetState() const;
+ private:
+ const float& m_axis;
+ const u8 m_index;
+ const bool m_positive;
+ };
+ class Button : public Input
+ {
+ public:
+ std::string GetName() const;
+ Button(u8 index, const unsigned char& button) : m_index(index), m_button(button) {}
+ ControlState GetState() const;
+ private:
+ const unsigned char& m_button;
+ const u8 m_index;
+ };
public:
bool UpdateInput();
bool UpdateOutput();
- Keyboard(IOHIDDeviceRef device, std::string name, int index);
+ Keyboard(IOHIDDeviceRef device, std::string name, int index, void *window);
std::string GetName() const;
std::string GetSource() const;
int GetId() const;
private:
+ struct
+ {
+ float x, y;
+ } m_cursor;
+
const IOHIDDeviceRef m_device;
const std::string m_device_name;
int m_index;
+ void *m_window;
+ uint32_t m_windowid;
+ unsigned char m_mousebuttons[3];
};
}
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm
index 7543d507dd..56e360019a 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm
+++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm
@@ -1,5 +1,7 @@
#include <Foundation/Foundation.h>
#include <IOKit/hid/IOHIDLib.h>
+#include <Cocoa/Cocoa.h>
+#include <wx/wx.h> // wxWidgets
#include "../ControllerInterface.h"
#include "OSXKeyboard.h"
@@ -9,10 +11,11 @@ namespace ciface
namespace OSX
{
-Keyboard::Keyboard(IOHIDDeviceRef device, std::string name, int index)
+Keyboard::Keyboard(IOHIDDeviceRef device, std::string name, int index, void *window)
: m_device(device)
, m_device_name(name)
, m_index(index)
+ , m_window(window)
{
// This class should only recieve Keyboard or Keypad devices
// Now, filter on just the buttons we can handle sanely
@@ -39,10 +42,48 @@ Keyboard::Keyboard(IOHIDDeviceRef device, std::string name, int index)
}
CFRelease(elements);
}
+
+ m_windowid = [[(NSView *)(((wxWindow *)window)->GetHandle()) window] windowNumber];
+
+ // cursor, with a hax for-loop
+ for (unsigned int i=0; i<4; ++i)
+ AddInput(new Cursor(!!(i&2), (&m_cursor.x)[i/2], !!(i&1)));
+
+ for (u8 i = 0; i < sizeof(m_mousebuttons) / sizeof(m_mousebuttons[0]); ++i)
+ AddInput(new Button(i, m_mousebuttons[i]));
}
bool Keyboard::UpdateInput()
{
+ CGRect bounds = CGRectZero;
+ uint32_t windowid[1] = { m_windowid };
+ CFArrayRef windowArray = CFArrayCreate(NULL, (const void **) windowid, 1, NULL);
+ CFArrayRef windowDescriptions = CGWindowListCreateDescriptionFromArray(windowArray);
+ CFDictionaryRef windowDescription = (CFDictionaryRef) CFArrayGetValueAtIndex((CFArrayRef) windowDescriptions, 0);
+
+ if (CFDictionaryContainsKey(windowDescription, kCGWindowBounds))
+ {
+ CFDictionaryRef boundsDictionary = (CFDictionaryRef) CFDictionaryGetValue(windowDescription, kCGWindowBounds);
+
+ if (boundsDictionary != NULL)
+ CGRectMakeWithDictionaryRepresentation(boundsDictionary, &bounds);
+ }
+
+ CFRelease(windowArray);
+
+ CGEventRef event = CGEventCreate(nil);
+ CGPoint loc = CGEventGetLocation(event);
+ CFRelease(event);
+
+ loc.x -= bounds.origin.x;
+ loc.y -= bounds.origin.y;
+ m_cursor.x = loc.x / bounds.size.width * 2 - 1.0;
+ m_cursor.y = loc.y / bounds.size.height * 2 - 1.0;
+
+ m_mousebuttons[0] = CGEventSourceButtonState(kCGEventSourceStateHIDSystemState, kCGMouseButtonLeft);
+ m_mousebuttons[1] = CGEventSourceButtonState(kCGEventSourceStateHIDSystemState, kCGMouseButtonRight);
+ m_mousebuttons[2] = CGEventSourceButtonState(kCGEventSourceStateHIDSystemState, kCGMouseButtonCenter);
+
return true;
}
@@ -201,10 +242,34 @@ ControlState Keyboard::Key::GetState() const
return 0;
}
+ControlState Keyboard::Cursor::GetState() const
+{
+ return std::max(0.0f, ControlState(m_axis) / (m_positive ? 1.0f : -1.0f));
+}
+
+ControlState Keyboard::Button::GetState() const
+{
+ return (m_button != 0);
+}
+
+std::string Keyboard::Cursor::GetName() const
+{
+ static char tmpstr[] = "Cursor ..";
+ tmpstr[7] = (char)('X' + m_index);
+ tmpstr[8] = (m_positive ? '+' : '-');
+ return tmpstr;
+}
+
+std::string Keyboard::Button::GetName() const
+{
+ return std::string("Click ") + char('0' + m_index);
+}
+
std::string Keyboard::Key::GetName() const
{
return m_name;
}
+
}
}
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
index c7c6898ecd..5473f7bcb3 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/SDL/SDL.cpp
@@ -86,8 +86,8 @@ Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index, const unsi
for (u8 i = 0; i != SDL_JoystickNumAxes(m_joystick); ++i)
{
// each axis gets a negative and a positive input instance associated with it
- AddInput(new Axis(i, m_joystick, -32768));
- AddInput(new Axis(i, m_joystick, 32767));
+ AddAnalogInputs(new Axis(i, m_joystick, -32768),
+ new Axis(i, m_joystick, 32767));
}
#ifdef USE_SDL_HAPTIC
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp
index c2030a059d..dad0c6bbf8 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp
@@ -115,9 +115,7 @@ KeyboardMouse::Key::Key(Display* const display, KeyCode keycode, const char* key
ControlState KeyboardMouse::Key::GetState() const
{
- const KeyCode shift = XKeysymToKeycode(m_display, XK_Shift_L);
- return (m_keyboard[m_keycode / 8] & (1 << (m_keycode % 8))) != 0
- && (m_keyboard[shift / 8] & (1 << (shift % 8))) == 0;
+ return (m_keyboard[m_keycode / 8] & (1 << (m_keycode % 8))) != 0;
}
ControlState KeyboardMouse::Button::GetState() const
diff --git a/Source/Core/InputCommon/Src/InputConfig.cpp b/Source/Core/InputCommon/Src/InputConfig.cpp
index b9d2a93b99..1988a9ebb7 100644
--- a/Source/Core/InputCommon/Src/InputConfig.cpp
+++ b/Source/Core/InputCommon/Src/InputConfig.cpp
@@ -16,6 +16,7 @@
// http://code.google.com/p/dolphin-emu/
#include "InputConfig.h"
+#include "../../Core/Src/ConfigManager.h"
InputPlugin::~InputPlugin()
{
@@ -26,18 +27,58 @@ InputPlugin::~InputPlugin()
delete *i;
}
-bool InputPlugin::LoadConfig()
+bool InputPlugin::LoadConfig(bool isGC)
{
IniFile inifile;
+ IniFile game_ini;
+ bool useProfile[4] = {false, false, false, false};
+ std::string num[4] = {"1", "2", "3", "4"};
+ std::string profile[4];
+ std::string path;
+
+ if (SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID() != "00000000")
+ {
+ std::string type;
+ if (isGC)
+ {
+ type = "Pad";
+ path = "Profiles/GCPad/";
+ }
+ else
+ {
+ type = "Wiimote";
+ path = "Profiles/Wiimote/";
+ }
+ game_ini.Load(File::GetUserPath(D_GAMECONFIG_IDX) + SConfig::GetInstance().m_LocalCoreStartupParameter.GetUniqueID() + ".ini");
+ for (int i = 0; i < 4; i++)
+ {
+ if (game_ini.Exists("Controls", (type + "Profile" + num[i]).c_str()))
+ {
+ game_ini.Get("Controls", (type + "Profile" + num[i]).c_str(), &profile[i]);
+ if (File::Exists(File::GetUserPath(D_CONFIG_IDX) + path + profile[i] + ".ini"))
+ useProfile[i] = true;
+ else
+ PanicAlertT("Selected controller profile does not exist");
+ }
+ }
+ }
+
if (inifile.Load(File::GetUserPath(D_CONFIG_IDX) + ini_name + ".ini"))
{
std::vector< ControllerEmu* >::const_iterator
i = controllers.begin(),
e = controllers.end();
- for (; i!=e; ++i)
+ for (int n = 0; i!=e; ++i, ++n)
{
// load settings from ini
- (*i)->LoadConfig(inifile.GetOrCreateSection((*i)->GetName().c_str()));
+ if (useProfile[n])
+ {
+ IniFile profile_ini;
+ profile_ini.Load(File::GetUserPath(D_CONFIG_IDX) + path + profile[n] + ".ini");
+ (*i)->LoadConfig(profile_ini.GetOrCreateSection("Profile"));
+ }
+ else
+ (*i)->LoadConfig(inifile.GetOrCreateSection((*i)->GetName().c_str()));
// update refs
(*i)->UpdateReferences(g_controller_interface);
}
diff --git a/Source/Core/InputCommon/Src/InputConfig.h b/Source/Core/InputCommon/Src/InputConfig.h
index 4d25334ce7..71505bb935 100644
--- a/Source/Core/InputCommon/Src/InputConfig.h
+++ b/Source/Core/InputCommon/Src/InputConfig.h
@@ -42,7 +42,7 @@ public:
~InputPlugin();
- bool LoadConfig();
+ bool LoadConfig(bool isGC);
void SaveConfig();
std::vector< ControllerEmu* > controllers;