Move main input polling at the beginning of retro_run()
- This is done so we can poll inputs from one place all at once for all player ports instead of calling the function multiple times for each player port.
This commit is contained in:
parent
364a182968
commit
5d5dc1b39b
|
@ -189,7 +189,7 @@ static struct palettes_t defaultGBPalettes[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Weird Colors",
|
"Weird Colors",
|
||||||
{ 0x621F, 0x401F, 0x001F, 0x2010, 0x621F, 0x401F, 0x001F, 0x2010 }
|
{ 0x621F, 0x401F, 0x001F, 0x2010, 0x621F, 0x401F, 0x001F, 0x2010 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Real GB Colors",
|
"Real GB Colors",
|
||||||
|
@ -630,9 +630,9 @@ void retro_init(void)
|
||||||
bool yes = true;
|
bool yes = true;
|
||||||
environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &yes);
|
environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &yes);
|
||||||
|
|
||||||
if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble)) {
|
if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble))
|
||||||
rumble_cb = rumble.set_rumble_state;
|
rumble_cb = rumble.set_rumble_state;
|
||||||
} else
|
else
|
||||||
rumble_cb = NULL;
|
rumble_cb = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1285,6 +1285,7 @@ static void update_variables(bool startup)
|
||||||
#define ROUND(x) floor((x) + 0.5)
|
#define ROUND(x) floor((x) + 0.5)
|
||||||
#define ASTICK_MAX 0x8000
|
#define ASTICK_MAX 0x8000
|
||||||
static int analog_x, analog_y, analog_z;
|
static int analog_x, analog_y, analog_z;
|
||||||
|
static uint32_t input_buf[MAX_PLAYERS] = { 0 };
|
||||||
|
|
||||||
static void updateInput_MotionSensors(void)
|
static void updateInput_MotionSensors(void)
|
||||||
{
|
{
|
||||||
|
@ -1366,6 +1367,45 @@ void updateInput_SolarSensor(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update joypads
|
||||||
|
static void updateInput_Joypad(void)
|
||||||
|
{
|
||||||
|
unsigned max_buttons = MAX_BUTTONS - ((type == IMAGE_GB) ? 2 : 0); // gb only has 8 buttons
|
||||||
|
|
||||||
|
for (unsigned port = 0; port < MAX_PLAYERS; port++)
|
||||||
|
{
|
||||||
|
// Reset input states
|
||||||
|
input_buf[port] = 0;
|
||||||
|
|
||||||
|
if (retropad_device[port] == RETRO_DEVICE_JOYPAD) {
|
||||||
|
for (unsigned button = 0; button < max_buttons; button++)
|
||||||
|
input_buf[port] |= input_cb(port, RETRO_DEVICE_JOYPAD, 0, binds[button]) << button;
|
||||||
|
|
||||||
|
if (option_turboEnable) {
|
||||||
|
/* Handle Turbo A & B buttons */
|
||||||
|
for (unsigned tbutton = 0; tbutton < TURBO_BUTTONS; tbutton++) {
|
||||||
|
if (input_cb(port, RETRO_DEVICE_JOYPAD, 0, turbo_binds[tbutton])) {
|
||||||
|
if (!turbo_delay_counter[port][tbutton])
|
||||||
|
input_buf[port] |= 1 << tbutton;
|
||||||
|
turbo_delay_counter[port][tbutton]++;
|
||||||
|
if (turbo_delay_counter[port][tbutton] > option_turboDelay)
|
||||||
|
/* Reset the toggle if delay value is reached */
|
||||||
|
turbo_delay_counter[port][tbutton] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* If the button is not pressed, just reset the toggle */
|
||||||
|
turbo_delay_counter[port][tbutton] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Do not allow opposing directions
|
||||||
|
if ((input_buf[port] & 0x30) == 0x30)
|
||||||
|
input_buf[port] &= ~(0x30);
|
||||||
|
else if ((input_buf[port] & 0xC0) == 0xC0)
|
||||||
|
input_buf[port] &= ~(0xC0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool firstrun = true;
|
static bool firstrun = true;
|
||||||
static unsigned has_frame;
|
static unsigned has_frame;
|
||||||
|
|
||||||
|
@ -1402,6 +1442,7 @@ void retro_run(void)
|
||||||
|
|
||||||
poll_cb();
|
poll_cb();
|
||||||
|
|
||||||
|
updateInput_Joypad();
|
||||||
updateInput_SolarSensor();
|
updateInput_SolarSensor();
|
||||||
updateInput_MotionSensors();
|
updateInput_MotionSensors();
|
||||||
|
|
||||||
|
@ -1738,40 +1779,9 @@ void systemMessage(int, const char* fmt, ...)
|
||||||
|
|
||||||
uint32_t systemReadJoypad(int which)
|
uint32_t systemReadJoypad(int which)
|
||||||
{
|
{
|
||||||
uint32_t J = 0;
|
|
||||||
unsigned i, buttons = MAX_BUTTONS - ((type == IMAGE_GB) ? 2 : 0); // gb only has 8 buttons
|
|
||||||
|
|
||||||
if (which == -1)
|
if (which == -1)
|
||||||
which = 0;
|
which = 0;
|
||||||
|
return input_buf[which];
|
||||||
if (retropad_device[which] == RETRO_DEVICE_JOYPAD) {
|
|
||||||
for (i = 0; i < buttons; i++)
|
|
||||||
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds[i]) << i;
|
|
||||||
|
|
||||||
if (option_turboEnable) {
|
|
||||||
/* Handle Turbo A & B buttons */
|
|
||||||
for (i = 0; i < TURBO_BUTTONS; i++) {
|
|
||||||
if (input_cb(which, RETRO_DEVICE_JOYPAD, 0, turbo_binds[i])) {
|
|
||||||
if (!turbo_delay_counter[which][i])
|
|
||||||
J |= 1 << i;
|
|
||||||
turbo_delay_counter[which][i]++;
|
|
||||||
if (turbo_delay_counter[which][i] > option_turboDelay)
|
|
||||||
/* Reset the toggle if delay value is reached */
|
|
||||||
turbo_delay_counter[which][i] = 0;
|
|
||||||
} else
|
|
||||||
/* If the button is not pressed, just reset the toggle */
|
|
||||||
turbo_delay_counter[which][i] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not allow opposing directions
|
|
||||||
if ((J & 0x30) == 0x30)
|
|
||||||
J &= ~(0x30);
|
|
||||||
else if ((J & 0xC0) == 0xC0)
|
|
||||||
J &= ~(0xC0);
|
|
||||||
|
|
||||||
return J;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void systemUpdateSolarSensor(int v)
|
static void systemUpdateSolarSensor(int v)
|
||||||
|
|
Loading…
Reference in New Issue