mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 04:20:27 +00:00
Move input_state code to input_common.c
This commit is contained in:
parent
075a4891dc
commit
909ee01012
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "input_common.h"
|
#include "input_common.h"
|
||||||
#include "input_keymaps.h"
|
#include "input_keymaps.h"
|
||||||
|
#include "input_remapping.h"
|
||||||
|
|
||||||
#include "../general.h"
|
#include "../general.h"
|
||||||
#include "../verbosity.h"
|
#include "../verbosity.h"
|
||||||
@ -628,3 +629,85 @@ void input_poll(void)
|
|||||||
rarch_cmd_poll(driver->command);
|
rarch_cmd_poll(driver->command);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input_state:
|
||||||
|
* @port : user number.
|
||||||
|
* @device : device identifier of user.
|
||||||
|
* @idx : index value of user.
|
||||||
|
* @id : identifier of key pressed by user.
|
||||||
|
*
|
||||||
|
* Input state callback function.
|
||||||
|
*
|
||||||
|
* Returns: Non-zero if the given key (identified by @id) was pressed by the user
|
||||||
|
* (assigned to @port).
|
||||||
|
**/
|
||||||
|
int16_t input_state(unsigned port, unsigned device,
|
||||||
|
unsigned idx, unsigned id)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
const struct retro_keybind *libretro_input_binds[MAX_USERS];
|
||||||
|
int16_t res = 0;
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
driver_t *driver = driver_get_ptr();
|
||||||
|
global_t *global = global_get_ptr();
|
||||||
|
const input_driver_t *input = driver ?
|
||||||
|
(const input_driver_t*)driver->input : NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_USERS; i++)
|
||||||
|
libretro_input_binds[i] = settings->input.binds[i];
|
||||||
|
|
||||||
|
device &= RETRO_DEVICE_MASK;
|
||||||
|
|
||||||
|
if (global->bsv.movie && global->bsv.movie_playback)
|
||||||
|
{
|
||||||
|
int16_t ret;
|
||||||
|
if (bsv_movie_get_input(global->bsv.movie, &ret))
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
global->bsv.movie_end = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings->input.remap_binds_enable)
|
||||||
|
input_remapping_state(port, &device, &idx, &id);
|
||||||
|
|
||||||
|
if (!driver->flushing_input && !driver->block_libretro_input)
|
||||||
|
{
|
||||||
|
if (((id < RARCH_FIRST_META_KEY) || (device == RETRO_DEVICE_KEYBOARD)))
|
||||||
|
res = input->input_state(driver->input_data, libretro_input_binds, port, device, idx, id);
|
||||||
|
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
|
input_state_overlay(&res, port, device, idx, id);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't allow turbo for D-pad. */
|
||||||
|
if (device == RETRO_DEVICE_JOYPAD && (id < RETRO_DEVICE_ID_JOYPAD_UP ||
|
||||||
|
id > RETRO_DEVICE_ID_JOYPAD_RIGHT))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Apply turbo button if activated.
|
||||||
|
*
|
||||||
|
* If turbo button is held, all buttons pressed except
|
||||||
|
* for D-pad will go into a turbo mode. Until the button is
|
||||||
|
* released again, the input state will be modulated by a
|
||||||
|
* periodic pulse defined by the configured duty cycle.
|
||||||
|
*/
|
||||||
|
if (res && global->turbo.frame_enable[port])
|
||||||
|
global->turbo.enable[port] |= (1 << id);
|
||||||
|
else if (!res)
|
||||||
|
global->turbo.enable[port] &= ~(1 << id);
|
||||||
|
|
||||||
|
if (global->turbo.enable[port] & (1 << id))
|
||||||
|
{
|
||||||
|
/* if turbo button is enabled for this key ID */
|
||||||
|
res = res && ((global->turbo.count % settings->input.turbo_period)
|
||||||
|
< settings->input.turbo_duty_cycle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (global->bsv.movie && !global->bsv.movie_playback)
|
||||||
|
bsv_movie_set_input(global->bsv.movie, res);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@ -130,6 +130,21 @@ bool check_block_hotkey(bool enable_hotkey);
|
|||||||
**/
|
**/
|
||||||
void input_poll(void);
|
void input_poll(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input_state:
|
||||||
|
* @port : user number.
|
||||||
|
* @device : device identifier of user.
|
||||||
|
* @idx : index value of user.
|
||||||
|
* @id : identifier of key pressed by user.
|
||||||
|
*
|
||||||
|
* Input state callback function.
|
||||||
|
*
|
||||||
|
* Returns: Non-zero if the given key (identified by @id) was pressed by the user
|
||||||
|
* (assigned to @port).
|
||||||
|
**/
|
||||||
|
int16_t input_state(unsigned port, unsigned device,
|
||||||
|
unsigned idx, unsigned id);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -98,88 +98,6 @@ static void video_frame(const void *data, unsigned width,
|
|||||||
video_driver_frame(data, width, height, pitch, msg);
|
video_driver_frame(data, width, height, pitch, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* input_state:
|
|
||||||
* @port : user number.
|
|
||||||
* @device : device identifier of user.
|
|
||||||
* @idx : index value of user.
|
|
||||||
* @id : identifier of key pressed by user.
|
|
||||||
*
|
|
||||||
* Input state callback function.
|
|
||||||
*
|
|
||||||
* Returns: Non-zero if the given key (identified by @id) was pressed by the user
|
|
||||||
* (assigned to @port).
|
|
||||||
**/
|
|
||||||
static int16_t input_state(unsigned port, unsigned device,
|
|
||||||
unsigned idx, unsigned id)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
const struct retro_keybind *libretro_input_binds[MAX_USERS];
|
|
||||||
int16_t res = 0;
|
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
driver_t *driver = driver_get_ptr();
|
|
||||||
global_t *global = global_get_ptr();
|
|
||||||
const input_driver_t *input = driver ?
|
|
||||||
(const input_driver_t*)driver->input : NULL;
|
|
||||||
|
|
||||||
for (i = 0; i < MAX_USERS; i++)
|
|
||||||
libretro_input_binds[i] = settings->input.binds[i];
|
|
||||||
|
|
||||||
device &= RETRO_DEVICE_MASK;
|
|
||||||
|
|
||||||
if (global->bsv.movie && global->bsv.movie_playback)
|
|
||||||
{
|
|
||||||
int16_t ret;
|
|
||||||
if (bsv_movie_get_input(global->bsv.movie, &ret))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
global->bsv.movie_end = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (settings->input.remap_binds_enable)
|
|
||||||
input_remapping_state(port, &device, &idx, &id);
|
|
||||||
|
|
||||||
if (!driver->flushing_input && !driver->block_libretro_input)
|
|
||||||
{
|
|
||||||
if (((id < RARCH_FIRST_META_KEY) || (device == RETRO_DEVICE_KEYBOARD)))
|
|
||||||
res = input->input_state(driver->input_data, libretro_input_binds, port, device, idx, id);
|
|
||||||
|
|
||||||
#ifdef HAVE_OVERLAY
|
|
||||||
input_state_overlay(&res, port, device, idx, id);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Don't allow turbo for D-pad. */
|
|
||||||
if (device == RETRO_DEVICE_JOYPAD && (id < RETRO_DEVICE_ID_JOYPAD_UP ||
|
|
||||||
id > RETRO_DEVICE_ID_JOYPAD_RIGHT))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Apply turbo button if activated.
|
|
||||||
*
|
|
||||||
* If turbo button is held, all buttons pressed except
|
|
||||||
* for D-pad will go into a turbo mode. Until the button is
|
|
||||||
* released again, the input state will be modulated by a
|
|
||||||
* periodic pulse defined by the configured duty cycle.
|
|
||||||
*/
|
|
||||||
if (res && global->turbo.frame_enable[port])
|
|
||||||
global->turbo.enable[port] |= (1 << id);
|
|
||||||
else if (!res)
|
|
||||||
global->turbo.enable[port] &= ~(1 << id);
|
|
||||||
|
|
||||||
if (global->turbo.enable[port] & (1 << id))
|
|
||||||
{
|
|
||||||
/* if turbo button is enabled for this key ID */
|
|
||||||
res = res && ((global->turbo.count % settings->input.turbo_period)
|
|
||||||
< settings->input.turbo_duty_cycle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (global->bsv.movie && !global->bsv.movie_playback)
|
|
||||||
bsv_movie_set_input(global->bsv.movie, res);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retro_set_default_callbacks:
|
* retro_set_default_callbacks:
|
||||||
* @data : pointer to retro_callbacks object
|
* @data : pointer to retro_callbacks object
|
||||||
|
Loading…
x
Reference in New Issue
Block a user