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_VULKAN "Not implemented yet" OFF)
|
||||||
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
|
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
|
||||||
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
|
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...
|
if(NOT WIN32) # cause we are not on windows...
|
||||||
set(PD_ENABLE_DIRECTX9 OFF)
|
set(PD_ENABLE_DIRECTX9 OFF)
|
||||||
@@ -21,6 +22,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|||||||
set(PD_ENABLE_CITRO3D ON)
|
set(PD_ENABLE_CITRO3D ON)
|
||||||
set(PD_ENABLE_HID_GLFW OFF)
|
set(PD_ENABLE_HID_GLFW OFF)
|
||||||
set(PD_ENABLE_HID_NX OFF)
|
set(PD_ENABLE_HID_NX OFF)
|
||||||
|
set(PD_ENABLE_HID3DS ON)
|
||||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
|
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
|
||||||
set(PD_ENABLE_OPENGL2 OFF)
|
set(PD_ENABLE_OPENGL2 OFF)
|
||||||
set(PD_ENABLE_OPENGL3 ON)
|
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_opengl3.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.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_glfw.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.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_CITRO3D}>:PD_ENABLE_CITRO3D>
|
||||||
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
||||||
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
|
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
|
||||||
|
$<$<BOOL:${PD_ENABLE_HID3DS}>:PD_ENABLE_HID3DS>
|
||||||
)
|
)
|
||||||
|
|
||||||
# Palladium
|
# 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>
|
#include <pd_system/gfx_opengl3.hpp>
|
||||||
|
|
||||||
// Hid
|
// Hid
|
||||||
|
#include <pd_system/hid_3ds.hpp>
|
||||||
#include <pd_system/hid_glfw.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() {
|
void HidGlfw::Update() {
|
||||||
HidDriver::Update(); // clear stats
|
HidDriver::Update(); // clear stats
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ struct HidNX::Impl {
|
|||||||
|
|
||||||
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
|
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
|
||||||
|
|
||||||
HidNX::~HidNX() {}
|
HidNX::~HidNX() { delete impl; }
|
||||||
|
|
||||||
void HidNX::Update() {
|
void HidNX::Update() {
|
||||||
HidDriver::Update(); // clear stats
|
HidDriver::Update(); // clear stats
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ void HorizonCtr::Init() {
|
|||||||
C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT,
|
C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT,
|
||||||
DisplayTransferFlags);
|
DisplayTransferFlags);
|
||||||
PD::Gfx::UseDriver<PD::GfxCitro3D>();
|
PD::Gfx::UseDriver<PD::GfxCitro3D>();
|
||||||
PD::Hid::UseDriver<PD::HidDriver>();
|
PD::Hid::UseDriver<PD::Hid3DS>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HorizonCtr::Deinit() {
|
void HorizonCtr::Deinit() {
|
||||||
|
|||||||
Reference in New Issue
Block a user