diff options
| author | 2009-09-07 00:53:53 +0000 | |
|---|---|---|
| committer | 2009-09-07 00:53:53 +0000 | |
| commit | 10b6e7e106ad706c29b8e25cbac0b990f0cdb501 (patch) | |
| tree | fecbeddfd5487265b4fb9fef7b6c406be2624bff /src/emu/inptport.c | |
| parent | 03b5da1a5563c867808c6ac2ba98f5ad74066a39 (diff) | |
Added PORT_CROSSHAIR_MAPPER() allowing you to specify an alternate, non-linear mapping
function from the raw crosshair value to its position onscreen. [Aaron Giles]
Diffstat (limited to 'src/emu/inptport.c')
| -rw-r--r-- | src/emu/inptport.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/emu/inptport.c b/src/emu/inptport.c index 36902c7938b..98b6a68eef1 100644 --- a/src/emu/inptport.c +++ b/src/emu/inptport.c @@ -1320,6 +1320,10 @@ int input_port_get_crosshair_position(running_machine *machine, int player, floa else value *= field->crossscale; value += field->crossoffset; + + /* apply custom mapping if necessary */ + if (field->crossmapper != NULL) + value = (*field->crossmapper)(field, value); /* handle X axis */ if (field->crossaxis == CROSSHAIR_AXIS_X) @@ -2713,6 +2717,17 @@ static input_port_config *port_config_detokenize(input_port_config *listhead, co curfield->crossoffset *= 1.0f / 65536.0f; break; + /* crosshair mapper callback */ + case INPUT_TOKEN_CROSSHAIR_MAPPER: + if (curfield == NULL) + { + error_buf_append(errorbuf, errorbuflen, "INPUT_TOKEN_CROSSHAIR_MAPPER encountered with no active field\n"); + TOKEN_SKIP_PTR(ipt); + break; + } + curfield->crossmapper = TOKEN_GET_PTR(ipt, crossmapptr); + break; + /* analog decrement sequence */ case INPUT_TOKEN_CODE_DEC: TOKEN_UNGET_UINT32(ipt); |
