From 8b0537d627b49525938f11baf5bc24b16190c711 Mon Sep 17 00:00:00 2001 From: Joseph Walton-Rivers <joseph@walton-rivers.uk> Date: Sat, 11 Sep 2021 21:09:47 +0100 Subject: [PATCH] add controller name support --- demo/main.cpp | 2 +- fggl/gfx/window.cpp | 3 ++- fggl/input/gamepad.hpp | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/demo/main.cpp b/demo/main.cpp index 70aa8b2..ab6c4d9 100644 --- a/demo/main.cpp +++ b/demo/main.cpp @@ -292,7 +292,7 @@ int main(int argc, char* argv[]) { auto& gamepads = inputs->gamepads; ImGui::Begin("GamePad", &gamepadWindow); for ( int i=0; i<16; i++ ) { - std::string title = "GamePad " + std::to_string(i); + std::string title = gamepads.name(i); bool present = gamepads.present(i); if ( ImGui::TreeNode(title.c_str()) ) { diff --git a/fggl/gfx/window.cpp b/fggl/gfx/window.cpp index 898a3b1..f16bc05 100644 --- a/fggl/gfx/window.cpp +++ b/fggl/gfx/window.cpp @@ -49,12 +49,13 @@ static void fggl_input_keyboard(GLFWwindow* window, int key, int scancode, int a } static void fggl_update_joystick(fggl::input::GamepadInput& input, int jid) { - //glfwGetJoystickName(jid); bool isGamepad = glfwJoystickIsGamepad(jid); if ( isGamepad ) { if( !input.present(jid) ) { + std::string name = glfwGetJoystickName(jid); input.setActive(jid, true); + input.name(jid, name); } GLFWgamepadstate state; diff --git a/fggl/input/gamepad.hpp b/fggl/input/gamepad.hpp index 069e249..96a3ada 100644 --- a/fggl/input/gamepad.hpp +++ b/fggl/input/gamepad.hpp @@ -108,6 +108,19 @@ namespace fggl::input { return m_active[id]; } + inline void name(size_t id, const std::string& name) { + assert( id < MaxControllers ); + m_names[id] = name; + } + + inline std::string name(size_t id) const { + std::string name = m_names[id].empty() ? "gamepad "+std::to_string(id) : m_names[id]; + if ( !present(id) ) { + return name + " (disconnected)"; + } + return name; + } + inline float axis(size_t id, GamepadAxis axis) const { if ( !present(id) ) { return 0.0f; @@ -166,6 +179,7 @@ namespace fggl::input { private: std::bitset<MaxControllers> m_active; + std::array<std::string, MaxControllers> m_names; std::array<GamepadState, MaxControllers> m_current; std::array<GamepadState, MaxControllers> m_previous; }; -- GitLab