mirror of
https://github.com/libretro/RetroArch
synced 2025-04-18 14:42:30 +00:00
Allow toggling available device types in RGUI.
This commit is contained in:
parent
aafe28bb14
commit
6d6ec8b35a
@ -123,11 +123,6 @@ If a ROM is skipped, use a blank ("") command line argument.
|
|||||||
ROMs must be loaded in an order which depends on the particular subsystem used.
|
ROMs must be loaded in an order which depends on the particular subsystem used.
|
||||||
See verbose log output to learn how a particular subsystem wants ROMs to be loaded.
|
See verbose log output to learn how a particular subsystem wants ROMs to be loaded.
|
||||||
|
|
||||||
.TP
|
|
||||||
\fB--mouse PORT, -m PORT\fR
|
|
||||||
Connects a mouse into port number PORT. Possible values for PORT are 1 to 8.
|
|
||||||
If set explicitly here, overrides config file for that port.
|
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fB--nodevice PORT, -N PORT\fR
|
\fB--nodevice PORT, -N PORT\fR
|
||||||
Disconnects an input device from port number PORT. Possible values for PORT are 1 to 8. This may be needed for some odd games to run properly.
|
Disconnects an input device from port number PORT. Possible values for PORT are 1 to 8. This may be needed for some odd games to run properly.
|
||||||
|
@ -929,19 +929,30 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
|
|||||||
break;
|
break;
|
||||||
case RGUI_SETTINGS_BIND_DEVICE_TYPE:
|
case RGUI_SETTINGS_BIND_DEVICE_TYPE:
|
||||||
{
|
{
|
||||||
static const unsigned device_types[] = {
|
|
||||||
RETRO_DEVICE_NONE,
|
|
||||||
RETRO_DEVICE_JOYPAD,
|
|
||||||
RETRO_DEVICE_ANALOG,
|
|
||||||
RETRO_DEVICE_MOUSE,
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned current_device, current_index, i;
|
unsigned current_device, current_index, i;
|
||||||
|
unsigned types = 0;
|
||||||
|
unsigned devices[128];
|
||||||
|
|
||||||
|
devices[types++] = RETRO_DEVICE_NONE;
|
||||||
|
devices[types++] = RETRO_DEVICE_JOYPAD;
|
||||||
|
devices[types++] = RETRO_DEVICE_ANALOG;
|
||||||
|
|
||||||
|
const struct retro_controller_info *desc = port < g_extern.system.num_ports ? &g_extern.system.ports[port] : NULL;
|
||||||
|
if (desc)
|
||||||
|
{
|
||||||
|
for (i = 0; i < desc->num_types; i++)
|
||||||
|
{
|
||||||
|
unsigned id = desc->types[i].id;
|
||||||
|
if (types < ARRAY_SIZE(devices) && id != RETRO_DEVICE_NONE && id != RETRO_DEVICE_JOYPAD && id != RETRO_DEVICE_ANALOG)
|
||||||
|
devices[types++] = id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
current_device = g_settings.input.libretro_device[port];
|
current_device = g_settings.input.libretro_device[port];
|
||||||
current_index = 0;
|
current_index = 0;
|
||||||
for (i = 0; i < ARRAY_SIZE(device_types); i++)
|
for (i = 0; i < types; i++)
|
||||||
{
|
{
|
||||||
if (current_device == device_types[i])
|
if (current_device == devices[i])
|
||||||
{
|
{
|
||||||
current_index = i;
|
current_index = i;
|
||||||
break;
|
break;
|
||||||
@ -956,12 +967,12 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RGUI_ACTION_LEFT:
|
case RGUI_ACTION_LEFT:
|
||||||
current_device = device_types[(current_index + ARRAY_SIZE(device_types) - 1) % ARRAY_SIZE(device_types)];
|
current_device = devices[(current_index + types - 1) % types];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RGUI_ACTION_RIGHT:
|
case RGUI_ACTION_RIGHT:
|
||||||
case RGUI_ACTION_OK:
|
case RGUI_ACTION_OK:
|
||||||
current_device = device_types[(current_index + 1) % ARRAY_SIZE(device_types)];
|
current_device = devices[(current_index + 1) % types];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -2216,7 +2227,6 @@ void menu_set_settings_label(char *type_str, size_t type_str_size, unsigned *w,
|
|||||||
case RETRO_DEVICE_NONE: name = "None"; break;
|
case RETRO_DEVICE_NONE: name = "None"; break;
|
||||||
case RETRO_DEVICE_JOYPAD: name = "Joypad"; break;
|
case RETRO_DEVICE_JOYPAD: name = "Joypad"; break;
|
||||||
case RETRO_DEVICE_ANALOG: name = "Joypad w/ Analog"; break;
|
case RETRO_DEVICE_ANALOG: name = "Joypad w/ Analog"; break;
|
||||||
case RETRO_DEVICE_MOUSE: name = "Mouse"; break;
|
|
||||||
default: name = "Unknown"; break;
|
default: name = "Unknown"; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,10 +133,11 @@ void retro_set_environment(retro_environment_t cb)
|
|||||||
static const struct retro_controller_description controllers[] = {
|
static const struct retro_controller_description controllers[] = {
|
||||||
{ "Dummy Controller #1", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0) },
|
{ "Dummy Controller #1", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0) },
|
||||||
{ "Dummy Controller #2", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1) },
|
{ "Dummy Controller #2", RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1) },
|
||||||
|
{ "Augmented Joypad", RETRO_DEVICE_JOYPAD }, // Test overriding generic description in UI.
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct retro_controller_info ports[] = {
|
static const struct retro_controller_info ports[] = {
|
||||||
{ controllers, 2 },
|
{ controllers, 3 },
|
||||||
{ NULL, 0 },
|
{ NULL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
17
retroarch.c
17
retroarch.c
@ -783,7 +783,6 @@ static void print_help(void)
|
|||||||
|
|
||||||
printf("\t-N/--nodevice: Disconnects controller device connected to port (1 to %d).\n", MAX_PLAYERS);
|
printf("\t-N/--nodevice: Disconnects controller device connected to port (1 to %d).\n", MAX_PLAYERS);
|
||||||
printf("\t-A/--dualanalog: Connect a DualAnalog controller to port (1 to %d).\n", MAX_PLAYERS);
|
printf("\t-A/--dualanalog: Connect a DualAnalog controller to port (1 to %d).\n", MAX_PLAYERS);
|
||||||
printf("\t-m/--mouse: Connect a mouse into controller port (1 to %d).\n", MAX_PLAYERS);
|
|
||||||
printf("\t-d/--device: Connect a generic device into port of the device (1 to %d).\n", MAX_PLAYERS);
|
printf("\t-d/--device: Connect a generic device into port of the device (1 to %d).\n", MAX_PLAYERS);
|
||||||
puts("\t\tFormat is port:ID, where ID is an unsigned number corresponding to the particular device.\n");
|
puts("\t\tFormat is port:ID, where ID is an unsigned number corresponding to the particular device.\n");
|
||||||
|
|
||||||
@ -929,7 +928,6 @@ static void parse_input(int argc, char *argv[])
|
|||||||
{ "verbose", 0, NULL, 'v' },
|
{ "verbose", 0, NULL, 'v' },
|
||||||
{ "config", 1, NULL, 'c' },
|
{ "config", 1, NULL, 'c' },
|
||||||
{ "appendconfig", 1, &val, 'C' },
|
{ "appendconfig", 1, &val, 'C' },
|
||||||
{ "mouse", 1, NULL, 'm' },
|
|
||||||
{ "nodevice", 1, NULL, 'N' },
|
{ "nodevice", 1, NULL, 'N' },
|
||||||
{ "dualanalog", 1, NULL, 'A' },
|
{ "dualanalog", 1, NULL, 'A' },
|
||||||
{ "device", 1, NULL, 'd' },
|
{ "device", 1, NULL, 'd' },
|
||||||
@ -984,7 +982,7 @@ static void parse_input(int argc, char *argv[])
|
|||||||
#define BSV_MOVIE_ARG
|
#define BSV_MOVIE_ARG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *optstring = "hs:fvS:m:A:c:U:DN:d:" BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG;
|
const char *optstring = "hs:fvS:A:c:U:DN:d:" BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG;
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -1053,18 +1051,6 @@ static void parse_input(int argc, char *argv[])
|
|||||||
g_extern.verbose = true;
|
g_extern.verbose = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'm':
|
|
||||||
port = strtol(optarg, NULL, 0);
|
|
||||||
if (port < 1 || port > MAX_PLAYERS)
|
|
||||||
{
|
|
||||||
RARCH_ERR("Connect mouse to a valid port.\n");
|
|
||||||
print_help();
|
|
||||||
rarch_fail(1, "parse_input()");
|
|
||||||
}
|
|
||||||
g_settings.input.libretro_device[port - 1] = RETRO_DEVICE_MOUSE;
|
|
||||||
g_extern.has_set_libretro_device[port - 1] = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'N':
|
case 'N':
|
||||||
port = strtol(optarg, NULL, 0);
|
port = strtol(optarg, NULL, 0);
|
||||||
if (port < 1 || port > MAX_PLAYERS)
|
if (port < 1 || port > MAX_PLAYERS)
|
||||||
@ -1277,7 +1263,6 @@ static void init_controllers(void)
|
|||||||
{
|
{
|
||||||
switch (device)
|
switch (device)
|
||||||
{
|
{
|
||||||
case RETRO_DEVICE_MOUSE: ident = "mouse"; break;
|
|
||||||
case RETRO_DEVICE_ANALOG: ident = "analog"; break;
|
case RETRO_DEVICE_ANALOG: ident = "analog"; break;
|
||||||
default: ident = "Unknown"; break;
|
default: ident = "Unknown"; break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user