all repos — mgba @ e84727c94b4f2c821c130420ef87d124ec4c3718

mGBA Game Boy Advance Emulator

src/platform/qt/GameController.h (view raw)

 1#ifndef QGBA_GAME_CONTROLLER
 2#define QGBA_GAME_CONTROLLER
 3
 4#include <QFile>
 5#include <QImage>
 6#include <QObject>
 7#include <QMutex>
 8#include <QString>
 9
10extern "C" {
11#include "gba-thread.h"
12#ifdef BUILD_SDL
13#include "sdl-events.h"
14#endif
15}
16
17struct GBAAudio;
18struct GBAVideoSoftwareRenderer;
19
20class QThread;
21
22namespace QGBA {
23
24class AudioProcessor;
25
26class GameController : public QObject {
27Q_OBJECT
28
29public:
30	GameController(QObject* parent = nullptr);
31	~GameController();
32
33	const uint32_t* drawContext() const { return m_drawContext; }
34	GBAThread* thread() { return &m_threadContext; }
35
36	bool isPaused();
37	bool isLoaded() { return m_gameOpen; }
38
39#ifdef USE_GDB_STUB
40	ARMDebugger* debugger();
41	void setDebugger(ARMDebugger*);
42#endif
43
44signals:
45	void frameAvailable(const uint32_t*);
46	void gameStarted(GBAThread*);
47	void gameStopped(GBAThread*);
48	void gamePaused(GBAThread*);
49	void gameUnpaused(GBAThread*);
50	void stateLoaded(GBAThread*);
51
52	void postLog(int level, const QString& log);
53
54public slots:
55	void loadGame(const QString& path, bool dirmode = false);
56	void loadBIOS(const QString& path);
57	void closeGame();
58	void setPaused(bool paused);
59	void reset();
60	void frameAdvance();
61	void keyPressed(int key);
62	void keyReleased(int key);
63	void setAudioBufferSamples(int samples);
64	void setFPSTarget(float fps);
65	void loadState(int slot);
66	void saveState(int slot);
67
68#ifdef BUILD_SDL
69private slots:
70	void testSDLEvents();
71
72private:
73	GBASDLEvents m_sdlEvents;
74	int m_activeButtons;
75#endif
76
77private:
78	void updateKeys();
79
80	uint32_t* m_drawContext;
81	GBAThread m_threadContext;
82	GBAVideoSoftwareRenderer* m_renderer;
83	int m_activeKeys;
84
85	bool m_gameOpen;
86	QString m_bios;
87
88	QThread* m_audioThread;
89	AudioProcessor* m_audioProcessor;
90
91	QMutex m_pauseMutex;
92	bool m_pauseAfterFrame;
93};
94
95}
96
97#endif