载入中...
搜索中...
未找到
Pad.h
浏览该文件的文档.
1#pragma once
2
3#include "joystick/Pad.h"
4
5#include <SDL2/SDL.h>
6#include <SDL2/SDL_haptic.h>
7
8#include <string>
9
10namespace eve::joystick::sdl {
11
13class Pad : public eve::joystick::Pad {
14public:
15 explicit Pad(int id);
16 Pad(int id, int joyindex);
17 ~Pad() override;
18
19 bool open(int deviceindex) override;
20 void close() override;
21 bool isConnected() const override;
22
23 std::string getName() const override;
24
25 int getAxisCount() const override;
26 int getButtonCount() const override;
27 int getHatCount() const override;
28
29 float getAxis(int axisindex) const override;
30 std::vector<float> getAxes() const override;
31 std::string getHat(int hatindex) const override;
32
33 bool isDown(int button) const override;
34 bool isDown(const std::vector<int>& buttons) const override;
35
36 bool openGamepad(int deviceindex) override;
37 bool isGamepad() const override;
38
39 float getGamepadAxis(const std::string& axis) const override;
40 bool isGamepadDown(const std::string& button) const override;
41 bool isGamepadDown(const std::vector<std::string>& buttons) const override;
42
43 std::string getGamepadMappingString() const override;
44
45 void* getHandle() const override;
46 std::string getGUID() const override;
47 int getInstanceID() const override;
48 int getID() const override;
49
50 void getDeviceInfo(int& vendorID, int& productID, int& productVersion) const override;
51
52 bool isVibrationSupported() override;
53 bool setVibration(float left, float right, float duration = -1.0f) override;
54 bool setVibration() override;
55 void getVibration(float& left, float& right) override;
56
57private:
58 bool checkCreateHaptic();
59 bool runVibrationEffect();
60
61 SDL_Joystick* joyhandle_ = nullptr;
62 SDL_GameController* controller_ = nullptr;
63 SDL_Haptic* haptic_ = nullptr;
64
65 SDL_JoystickID instanceid_ = -1;
66 std::string guid_;
67 int id_ = 0;
68 std::string name_;
69
70 struct Vibration {
71 float left = 0.0f;
72 float right = 0.0f;
73 SDL_HapticEffect effect{};
74 Uint16 data[4]{};
75 int id = -1;
76 Uint32 endtime = SDL_HAPTIC_INFINITY;
77 } vibration_;
78};
79
80} // namespace eve::joystick::sdl
Light2D::Data * data
One connected (or previously connected) joystick / gamepad device. Gamepad axis/button names follow S...
Definition Pad.h:13
SDL 手柄/摇杆后端实现(含 GameController 与振动)。
Definition Pad.h:13
void close() override
Definition Pad.cpp:65
int getID() const override
Definition Pad.cpp:198
~Pad() override
Definition Pad.cpp:39
void getVibration(float &left, float &right) override
Definition Pad.cpp:322
bool isGamepad() const override
Definition Pad.cpp:143
float getGamepadAxis(const std::string &axis) const override
Definition Pad.cpp:147
bool isVibrationSupported() override
Definition Pad.cpp:231
bool isConnected() const override
Definition Pad.cpp:77
bool isGamepadDown(const std::string &button) const override
Definition Pad.cpp:155
std::vector< float > getAxes() const override
Definition Pad.cpp:102
int getAxisCount() const override
Definition Pad.cpp:85
std::string getGamepadMappingString() const override
Definition Pad.cpp:169
bool setVibration() override
Definition Pad.cpp:314
std::string getName() const override
Definition Pad.cpp:81
int getHatCount() const override
Definition Pad.cpp:93
bool open(int deviceindex) override
Definition Pad.cpp:43
int getButtonCount() const override
Definition Pad.cpp:89
std::string getHat(int hatindex) const override
Definition Pad.cpp:112
int getInstanceID() const override
Definition Pad.cpp:194
bool openGamepad(int deviceindex) override
Definition Pad.cpp:131
void getDeviceInfo(int &vendorID, int &productID, int &productVersion) const override
Definition Pad.cpp:202
std::string getGUID() const override
Definition Pad.cpp:190
void * getHandle() const override
Definition Pad.cpp:186
bool isDown(int button) const override
Definition Pad.cpp:117
float getAxis(int axisindex) const override
Definition Pad.cpp:97