OXYGENHUB
◆ main openmsx / src / input / ArkanoidPad.hh
1.5 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#ifndef ARKANOIDPAD_HH
2
#define ARKANOIDPAD_HH
3
4
#include "JoystickDevice.hh"
5
#include "MSXEventListener.hh"
6
#include "StateChangeListener.hh"
7
#include "serialize_meta.hh"
8
9
namespace openmsx {
10
11
class MSXEventDistributor;
12
class StateChangeDistributor;
13
14
class ArkanoidPad final : public JoystickDevice, private MSXEventListener
15
                        , private StateChangeListener
16
{
17
public:
18
	explicit ArkanoidPad(MSXEventDistributor& eventDistributor,
19
	                     StateChangeDistributor& stateChangeDistributor);
20
	~ArkanoidPad() override;
21
22
	template<typename Archive>
23
	void serialize(Archive& ar, unsigned version);
24
25
private:
26
	// Pluggable
27
	[[nodiscard]] zstring_view getName() const override;
28
	[[nodiscard]] zstring_view getDescription() const override;
29
	void plugHelper(Connector& connector, EmuTime time) override;
30
	void unplugHelper(EmuTime time) override;
31
32
	// JoystickDevice
33
	[[nodiscard]] uint8_t read(EmuTime time) override;
34
	void write(uint8_t value, EmuTime time) override;
35
36
	// MSXEventListener
37
	void signalMSXEvent(const Event& event,
38
	                    EmuTime time) noexcept override;
39
	// StateChangeListener
40
	void signalStateChange(const StateChange& event) override;
41
	void stopReplay(EmuTime time) noexcept override;
42
43
private:
44
	MSXEventDistributor& eventDistributor;
45
	StateChangeDistributor& stateChangeDistributor;
46
	int shiftReg = 0; // the 9 bit shift degrades to 0
47
	int dialPos;
48
	uint8_t buttonStatus = 0x3E;
49
	uint8_t lastValue = 0;
50
};
51
SERIALIZE_CLASS_VERSION(ArkanoidPad, 2);
52
53
} // namespace openmsx
54
55
#endif