mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-04-10 21:44:28 +00:00
Deal with "hat" switches.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6863 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
7e612a613a
commit
4a7d3ee1c8
@ -60,11 +60,14 @@ else:
|
|||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
files += [ "stdafx.cpp" ]
|
files += [ "stdafx.cpp" ]
|
||||||
elif sys.platform == 'darwin':
|
elif sys.platform == 'darwin':
|
||||||
if env['HAVE_WX']:
|
|
||||||
wxlibs += env['wxconfiglibs']
|
|
||||||
ldflags += [ '-Wl,-pagezero_size,0x1000' ]
|
ldflags += [ '-Wl,-pagezero_size,0x1000' ]
|
||||||
exe = '#' + env['prefix'] + '/Dolphin.app/Contents/MacOS/Dolphin'
|
exe = '#' + env['prefix'] + '/Dolphin.app/Contents/MacOS/Dolphin'
|
||||||
|
|
||||||
|
if env['HAVE_WX']:
|
||||||
|
wxlibs += env['wxconfiglibs']
|
||||||
|
else:
|
||||||
|
exe += 'NoGUI'
|
||||||
|
|
||||||
env.Install('#' + env['prefix'] + '/Dolphin.app/Contents/' +
|
env.Install('#' + env['prefix'] + '/Dolphin.app/Contents/' +
|
||||||
'Library/Frameworks/Cg.framework', source = [
|
'Library/Frameworks/Cg.framework', source = [
|
||||||
'#Externals/Cg/Cg.framework/Cg',
|
'#Externals/Cg/Cg.framework/Cg',
|
||||||
|
@ -53,6 +53,26 @@ protected:
|
|||||||
float m_scale;
|
float m_scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Hat : public Input
|
||||||
|
{
|
||||||
|
friend class Joystick;
|
||||||
|
public:
|
||||||
|
enum direction {
|
||||||
|
up = 0,
|
||||||
|
right,
|
||||||
|
down,
|
||||||
|
left
|
||||||
|
};
|
||||||
|
std::string GetName() const;
|
||||||
|
protected:
|
||||||
|
Hat(IOHIDElementRef element, direction dir);
|
||||||
|
ControlState GetState(IOHIDDeviceRef device) const;
|
||||||
|
private:
|
||||||
|
IOHIDElementRef m_element;
|
||||||
|
std::string m_name;
|
||||||
|
direction m_direction;
|
||||||
|
};
|
||||||
|
|
||||||
bool UpdateInput();
|
bool UpdateInput();
|
||||||
bool UpdateOutput();
|
bool UpdateOutput();
|
||||||
|
|
||||||
|
@ -60,8 +60,15 @@ Joystick::Joystick(IOHIDDeviceRef device)
|
|||||||
(IOHIDElementRef)CFArrayGetValueAtIndex(axes, i);
|
(IOHIDElementRef)CFArrayGetValueAtIndex(axes, i);
|
||||||
//DeviceElementDebugPrint(e, NULL);
|
//DeviceElementDebugPrint(e, NULL);
|
||||||
|
|
||||||
AddInput(new Axis(e, Axis::negative));
|
if (IOHIDElementGetUsage(e) == kHIDUsage_GD_Hatswitch) {
|
||||||
AddInput(new Axis(e, Axis::positive));
|
AddInput(new Hat(e, Hat::up));
|
||||||
|
AddInput(new Hat(e, Hat::right));
|
||||||
|
AddInput(new Hat(e, Hat::down));
|
||||||
|
AddInput(new Hat(e, Hat::left));
|
||||||
|
} else {
|
||||||
|
AddInput(new Axis(e, Axis::negative));
|
||||||
|
AddInput(new Axis(e, Axis::positive));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CFRelease(axes);
|
CFRelease(axes);
|
||||||
}
|
}
|
||||||
@ -159,15 +166,9 @@ Joystick::Axis::Axis(IOHIDElementRef element, direction dir)
|
|||||||
case kHIDUsage_GD_Wheel:
|
case kHIDUsage_GD_Wheel:
|
||||||
description = "Wheel";
|
description = "Wheel";
|
||||||
break;
|
break;
|
||||||
case kHIDUsage_GD_Hatswitch:
|
|
||||||
description = "Hat";
|
|
||||||
break;
|
|
||||||
case kHIDUsage_Csmr_ACPan:
|
case kHIDUsage_Csmr_ACPan:
|
||||||
description = "Pan";
|
description = "Pan";
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
WARN_LOG(PAD, "Unknown axis type 0x%x, using it anyway...",
|
|
||||||
IOHIDElementGetUsage(m_element));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_name = std::string("Axis ") + description;
|
m_name = std::string("Axis ") + description;
|
||||||
@ -190,9 +191,9 @@ ControlState Joystick::Axis::GetState(IOHIDDeviceRef device) const
|
|||||||
return (position - m_neutral) * m_scale;
|
return (position - m_neutral) * m_scale;
|
||||||
if (m_direction == negative && position < m_neutral)
|
if (m_direction == negative && position < m_neutral)
|
||||||
return (m_neutral - position) * m_scale;
|
return (m_neutral - position) * m_scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Joystick::Axis::GetName() const
|
std::string Joystick::Axis::GetName() const
|
||||||
@ -200,6 +201,81 @@ std::string Joystick::Axis::GetName() const
|
|||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Joystick::Hat::Hat(IOHIDElementRef element, direction dir)
|
||||||
|
: m_element(element)
|
||||||
|
, m_direction(dir)
|
||||||
|
{
|
||||||
|
switch (dir) {
|
||||||
|
case up:
|
||||||
|
m_name = "Up";
|
||||||
|
break;
|
||||||
|
case right:
|
||||||
|
m_name = "Right";
|
||||||
|
break;
|
||||||
|
case down:
|
||||||
|
m_name = "Down";
|
||||||
|
break;
|
||||||
|
case left:
|
||||||
|
m_name = "Left";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
m_name = "unk";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ControlState Joystick::Hat::GetState(IOHIDDeviceRef device) const
|
||||||
|
{
|
||||||
|
IOHIDValueRef value;
|
||||||
|
int position;
|
||||||
|
|
||||||
|
if (IOHIDDeviceGetValue(device, m_element, &value) == kIOReturnSuccess)
|
||||||
|
{
|
||||||
|
position = IOHIDValueGetIntegerValue(value);
|
||||||
|
|
||||||
|
switch (position) {
|
||||||
|
case 0:
|
||||||
|
if (m_direction == up)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (m_direction == up || m_direction == right)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (m_direction == right)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if (m_direction == right || m_direction == down)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (m_direction == down)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if (m_direction == down || m_direction == left)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (m_direction == left)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if (m_direction == left || m_direction == up)
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Joystick::Hat::GetName() const
|
||||||
|
{
|
||||||
|
return m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\D
|
|||||||
{823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4}
|
{823DDC98-42D5-4A38-88CF-9DC06C788AE4} = {823DDC98-42D5-4A38-88CF-9DC06C788AE4}
|
||||||
{3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} = {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}
|
{3D8156A9-64D1-4C8E-ADBE-1B319030E4A4} = {3D8156A9-64D1-4C8E-ADBE-1B319030E4A4}
|
||||||
{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}
|
{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978} = {374E2DB7-42DF-4E59-8474-62B6687F4978}
|
|
||||||
{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}
|
{E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA}
|
||||||
{29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}
|
{29C2ABC1-ADA5-42CD-A5FC-96022D52A510} = {29C2ABC1-ADA5-42CD-A5FC-96022D52A510}
|
||||||
{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}
|
{4D3CD4C5-412B-4B49-9B1B-A68A2A129C77} = {4D3CD4C5-412B-4B49-9B1B-A68A2A129C77}
|
||||||
@ -585,18 +584,6 @@ Global
|
|||||||
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.Build.0 = Release|Win32
|
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|Win32.Build.0 = Release|Win32
|
||||||
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.ActiveCfg = Release|x64
|
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.ActiveCfg = Release|x64
|
||||||
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.Build.0 = Release|x64
|
{66A4E7BD-E2E8-4373-9B75-8750EB5AE683}.Release|x64.Build.0 = Release|x64
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.DebugFast|Win32.ActiveCfg = DebugFast|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.DebugFast|Win32.Build.0 = DebugFast|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.DebugFast|x64.ActiveCfg = DebugFast|x64
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.DebugFast|x64.Build.0 = DebugFast|x64
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{374E2DB7-42DF-4E59-8474-62B6687F4978}.Release|x64.Build.0 = Release|x64
|
|
||||||
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|Win32.ActiveCfg = Debug|Win32
|
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|Win32.Build.0 = Debug|Win32
|
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|x64.ActiveCfg = Debug|x64
|
{21DBE606-2958-43AC-A14E-B6B798D56554}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
Loading…
x
Reference in New Issue
Block a user