Add Hid3DS
This commit is contained in:
@@ -9,6 +9,7 @@ option(PD_ENABLE_CITRO3D "Enable Citro3D Support (3DS)" OFF)
|
||||
option(PD_ENABLE_VULKAN "Not implemented yet" OFF)
|
||||
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
|
||||
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
|
||||
option(PD_ENABLE_HID3DS "Enable 3ds Input Driver" OFF)
|
||||
|
||||
if(NOT WIN32) # cause we are not on windows...
|
||||
set(PD_ENABLE_DIRECTX9 OFF)
|
||||
@@ -21,6 +22,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
||||
set(PD_ENABLE_CITRO3D ON)
|
||||
set(PD_ENABLE_HID_GLFW OFF)
|
||||
set(PD_ENABLE_HID_NX OFF)
|
||||
set(PD_ENABLE_HID3DS ON)
|
||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
|
||||
set(PD_ENABLE_OPENGL2 OFF)
|
||||
set(PD_ENABLE_OPENGL3 ON)
|
||||
@@ -36,6 +38,7 @@ add_library(pd-system STATIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_3ds.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp
|
||||
)
|
||||
@@ -64,6 +67,7 @@ target_compile_definitions(pd-system
|
||||
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
|
||||
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
||||
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
|
||||
$<$<BOOL:${PD_ENABLE_HID3DS}>:PD_ENABLE_HID3DS>
|
||||
)
|
||||
|
||||
# Palladium
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <pd/drivers/hid.hpp>
|
||||
|
||||
namespace PD {
|
||||
class Hid3DS : public HidDriver {
|
||||
public:
|
||||
Hid3DS();
|
||||
~Hid3DS();
|
||||
|
||||
void Update() override;
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
Impl* impl;
|
||||
};
|
||||
} // namespace PD
|
||||
@@ -7,4 +7,5 @@
|
||||
#include <pd_system/gfx_opengl3.hpp>
|
||||
|
||||
// Hid
|
||||
#include <pd_system/hid_glfw.hpp>
|
||||
#include <pd_system/hid_3ds.hpp>
|
||||
#include <pd_system/hid_glfw.hpp>
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#include <pd_system/hid_3ds.hpp>
|
||||
#if defined(PD_ENABLE_HID3DS) && defined(__3DS__)
|
||||
#include <3ds.h>
|
||||
namespace PD {
|
||||
struct Hid3DS::Impl {
|
||||
std::string* Text;
|
||||
bool InTextMode = false;
|
||||
};
|
||||
|
||||
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {
|
||||
impl = new Impl;
|
||||
|
||||
pFlags |= PDHidBackendFlags_HasGamepad;
|
||||
pFlags |= PDHidBackendFlags_HasTouch;
|
||||
|
||||
pGamepad[KEY_A] = HidInternal::Gamepad::A;
|
||||
pGamepad[KEY_B] = HidInternal::Gamepad::B;
|
||||
pGamepad[KEY_X] = HidInternal::Gamepad::X;
|
||||
pGamepad[KEY_Y] = HidInternal::Gamepad::Y;
|
||||
pGamepad[KEY_START] = HidInternal::Gamepad::Start;
|
||||
pGamepad[KEY_SELECT] = HidInternal::Gamepad::Select;
|
||||
pGamepad[KEY_L] = HidInternal::Gamepad::L;
|
||||
pGamepad[KEY_R] = HidInternal::Gamepad::R;
|
||||
pGamepad[KEY_DUP] = HidInternal::Gamepad::DUp;
|
||||
pGamepad[KEY_DDOWN] = HidInternal::Gamepad::DDown;
|
||||
pGamepad[KEY_DLEFT] = HidInternal::Gamepad::DLeft;
|
||||
pGamepad[KEY_DRIGHT] = HidInternal::Gamepad::DRight;
|
||||
pGamepad[KEY_CPAD_UP] = HidInternal::Gamepad::CPUp;
|
||||
pGamepad[KEY_CPAD_DOWN] = HidInternal::Gamepad::CPDown;
|
||||
pGamepad[KEY_CPAD_LEFT] = HidInternal::Gamepad::CPLeft;
|
||||
pGamepad[KEY_CPAD_RIGHT] = HidInternal::Gamepad::CPRight;
|
||||
pGamepad[KEY_CSTICK_UP] = HidInternal::Gamepad::CSUp;
|
||||
pGamepad[KEY_CSTICK_DOWN] = HidInternal::Gamepad::CSDown;
|
||||
pGamepad[KEY_CSTICK_LEFT] = HidInternal::Gamepad::CSLeft;
|
||||
pGamepad[KEY_CSTICK_RIGHT] = HidInternal::Gamepad::CSRight;
|
||||
pGamepad[KEY_ZL] = HidInternal::Gamepad::ZL;
|
||||
pGamepad[KEY_ZR] = HidInternal::Gamepad::ZR;
|
||||
pGamepad[KEY_TOUCH] = HidInternal::Gamepad::Touch;
|
||||
}
|
||||
|
||||
Hid3DS::~Hid3DS() { delete impl; }
|
||||
|
||||
void Hid3DS::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
hidScanInput();
|
||||
u32 kd = hidKeysDown();
|
||||
u32 kh = hidKeysHeld();
|
||||
u32 ku = hidKeysUp();
|
||||
|
||||
for (const auto& b : pGamepad) {
|
||||
if (b.first & kd) {
|
||||
pGamepadEvents[0][Event::Down] |= b.second;
|
||||
}
|
||||
if (b.first & kh) {
|
||||
pGamepadEvents[0][Event::Held] |= b.second;
|
||||
}
|
||||
if (b.first & ku) {
|
||||
pGamepadEvents[0][Event::Up] |= b.second;
|
||||
}
|
||||
}
|
||||
|
||||
/*if (pLocked) {
|
||||
SwapTab();
|
||||
}*/
|
||||
touchPosition t;
|
||||
hidTouchRead(&t);
|
||||
pMouse[0] = fvec2(t.px, t.py);
|
||||
}
|
||||
} // namespace PD
|
||||
#else
|
||||
struct GLFWgamepadstate {};
|
||||
namespace PD {
|
||||
|
||||
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {}
|
||||
|
||||
Hid3DS::~Hid3DS() {}
|
||||
|
||||
void Hid3DS::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
}
|
||||
} // namespace PD
|
||||
#endif
|
||||
@@ -65,7 +65,7 @@ HidGlfw::HidGlfw(GLFWwindow* win) : HidDriver("HidGlfw") {
|
||||
}
|
||||
}
|
||||
|
||||
HidGlfw::~HidGlfw() {}
|
||||
HidGlfw::~HidGlfw() { delete impl; }
|
||||
|
||||
void HidGlfw::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
|
||||
@@ -11,7 +11,7 @@ struct HidNX::Impl {
|
||||
|
||||
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
|
||||
|
||||
HidNX::~HidNX() {}
|
||||
HidNX::~HidNX() { delete impl; }
|
||||
|
||||
void HidNX::Update() {
|
||||
HidDriver::Update(); // clear stats
|
||||
|
||||
Reference in New Issue
Block a user