diff --git a/demo/main.cpp b/demo/main.cpp index 70aa8b24a6f692214a6159fb315c15a19e98efc1..ab6c4d9bc9aa65201199d22544668192cab9cf3e 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 898a3b14ee79a1cc0a72af34ec78e479d5a31a5a..f16bc0521e81840893430e53b3f6dd26f1dd6970 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 069e249fe81ad7c92f57fd53bc4a3fa40d16df28..96a3ada372a638d23423778c43d9f0cf867e51ff 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; };