diff options
Diffstat (limited to 'src/emu/inputdev.cpp')
-rw-r--r-- | src/emu/inputdev.cpp | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/src/emu/inputdev.cpp b/src/emu/inputdev.cpp index 4c2afdd7e7a..66a0794f6cd 100644 --- a/src/emu/inputdev.cpp +++ b/src/emu/inputdev.cpp @@ -31,7 +31,7 @@ public: virtual s32 read_as_switch(input_item_modifier modifier) override; virtual s32 read_as_relative(input_item_modifier modifier) override; virtual s32 read_as_absolute(input_item_modifier modifier) override; - virtual bool item_check_axis(input_item_modifier modifier) override; + virtual bool item_check_axis(input_item_modifier modifiers, s32 memory) override; // steadykey helper bool steadykey_changed(); @@ -57,7 +57,7 @@ public: virtual s32 read_as_switch(input_item_modifier modifier) override; virtual s32 read_as_relative(input_item_modifier modifier) override; virtual s32 read_as_absolute(input_item_modifier modifier) override; - virtual bool item_check_axis(input_item_modifier modifier) override; + virtual bool item_check_axis(input_item_modifier modifier, s32 memory) override; }; @@ -74,7 +74,7 @@ public: virtual s32 read_as_switch(input_item_modifier modifier) override; virtual s32 read_as_relative(input_item_modifier modifier) override; virtual s32 read_as_absolute(input_item_modifier modifier) override; - virtual bool item_check_axis(input_item_modifier modifier) override; + virtual bool item_check_axis(input_item_modifier modifier, s32 memory) override; }; @@ -675,16 +675,17 @@ input_device_item::input_device_item(input_device &device, const char *name, voi m_itemid(itemid), m_itemclass(itemclass), m_getstate(getstate), - m_current(0), - m_memory(0) + m_current(0) { - // use a standard token name for know item IDs const char *standard_token = manager().standard_token(itemid); - if (standard_token != nullptr) + if (standard_token) + { + // use a standard token name for know item IDs m_token.assign(standard_token); - - // otherwise, create a tokenized name - else { + } + else + { + // otherwise, create a tokenized name m_token.assign(name); strmakeupper(m_token); strdelchr(m_token, ' '); @@ -707,19 +708,10 @@ input_device_item::~input_device_item() // to trigger a read when polling //------------------------------------------------- -bool input_device_item::check_axis(input_item_modifier modifier) +bool input_device_item::check_axis(input_item_modifier modifier, s32 memory) { - // if we've already reported this one, don't bother - if (m_memory == INVALID_AXIS_VALUE) - return false; - - if (item_check_axis(modifier)) - { - m_memory = INVALID_AXIS_VALUE; - return true; - } - - return false; + // use INVALID_AXIS_VALUE as a short-circuit + return (memory != INVALID_AXIS_VALUE) && item_check_axis(modifier, memory); } @@ -801,7 +793,7 @@ s32 input_device_switch_item::read_as_absolute(input_item_modifier modifier) // enough to trigger a read when polling //------------------------------------------------- -bool input_device_switch_item::item_check_axis(input_item_modifier modifier) +bool input_device_switch_item::item_check_axis(input_item_modifier modifier, s32 memory) { return false; } @@ -889,12 +881,12 @@ s32 input_device_relative_item::read_as_absolute(input_item_modifier modifier) // enough to trigger a read when polling //------------------------------------------------- -bool input_device_relative_item::item_check_axis(input_item_modifier modifier) +bool input_device_relative_item::item_check_axis(input_item_modifier modifier, s32 memory) { - s32 curval = read_as_relative(modifier); + const s32 curval = read_as_relative(modifier); // for relative axes, look for ~20 pixels movement - return std::abs(curval - memory()) > 20 * INPUT_RELATIVE_PER_PIXEL; + return std::abs(curval - memory) > (20 * INPUT_RELATIVE_PER_PIXEL); } @@ -1002,15 +994,15 @@ s32 input_device_absolute_item::read_as_absolute(input_item_modifier modifier) // enough to trigger a read when polling //------------------------------------------------- -bool input_device_absolute_item::item_check_axis(input_item_modifier modifier) +bool input_device_absolute_item::item_check_axis(input_item_modifier modifier, s32 memory) { // ignore min/max for lightguns // so the selection will not be affected by a gun going out of range - s32 curval = read_as_absolute(modifier); + const s32 curval = read_as_absolute(modifier); if (m_device.devclass() == DEVICE_CLASS_LIGHTGUN && (curval == INPUT_ABSOLUTE_MAX || curval == INPUT_ABSOLUTE_MIN)) return false; // for absolute axes, look for 25% of maximum - return std::abs(curval - memory()) > (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN) / 4; + return std::abs(curval - memory) > ((INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN) / 4); } |