diff options
Diffstat (limited to 'src/frontend/mame/iptseqpoll.h')
-rw-r--r-- | src/frontend/mame/iptseqpoll.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/frontend/mame/iptseqpoll.h b/src/frontend/mame/iptseqpoll.h new file mode 100644 index 00000000000..c43dd397705 --- /dev/null +++ b/src/frontend/mame/iptseqpoll.h @@ -0,0 +1,123 @@ +// license:BSD-3-Clause +// copyright-holders:Vas Crabb,Aaron Giles +/*************************************************************************** + + iptseqpoll.h + + Helper for letting the user select input sequences. + +***************************************************************************/ +#ifndef MAME_FRONTEND_IPTSEQPOLL_H +#define MAME_FRONTEND_IPTSEQPOLL_H + +#pragma once + +#include <utility> +#include <vector> + + +class input_code_poller +{ +public: + virtual ~input_code_poller(); + + virtual void reset(); + virtual input_code poll() = 0; + +protected: + input_code_poller(input_manager &manager) noexcept; + + bool code_pressed_once(input_code code, bool moved); + + input_manager &m_manager; + std::vector<std::pair<input_device_item *, s32> > m_axis_memory; + std::vector<input_code> m_switch_memory; +}; + + +class axis_code_poller : public input_code_poller +{ +public: + axis_code_poller(input_manager &manager) noexcept; + + virtual void reset() override; + virtual input_code poll() override; + +private: + std::vector<bool> m_axis_active; +}; + + +class switch_code_poller : public input_code_poller +{ +public: + switch_code_poller(input_manager &manager) noexcept; + + virtual input_code poll() override; +}; + + +class keyboard_code_poller : public input_code_poller +{ +public: + keyboard_code_poller(input_manager &manager) noexcept; + + virtual input_code poll() override; +}; + + +class input_sequence_poller +{ +public: + virtual ~input_sequence_poller(); + + void start(); + void start(input_seq const &startseq); + bool poll(); + + input_seq const &sequence() const noexcept { return m_sequence; } + bool valid() const noexcept { return m_sequence.is_valid(); } + bool modified() const noexcept { return m_modified; } + +protected: + input_sequence_poller() noexcept; + + void set_modified() noexcept { m_modified = true; } + + input_seq m_sequence; + +private: + virtual void do_start() = 0; + virtual input_code do_poll() = 0; + + osd_ticks_t m_last_ticks; + bool m_modified; +}; + + +class axis_sequence_poller : public input_sequence_poller +{ +public: + axis_sequence_poller(input_manager &manager) noexcept; + +private: + virtual void do_start() override; + virtual input_code do_poll() override; + + axis_code_poller m_code_poller; +}; + + +class switch_sequence_poller : public input_sequence_poller +{ +public: + switch_sequence_poller(input_manager &manager) noexcept; + +private: + virtual void do_start() override; + virtual input_code do_poll() override; + + switch_code_poller m_code_poller; +}; + +#endif // MAME_FRONTEND_IPTSEQPOLL_H |