From 0478a54e37e853bfd4825472f98a6bf128e5eb5e Mon Sep 17 00:00:00 2001 From: Nilsen Filc Date: Fri, 17 Jul 2015 22:30:13 +0200 Subject: [PATCH] Gamepad controller axis deadzone low filter Added gamepad controller axis deadzone low filter, removing unnecessary spam from controller analog sticks natural jitter. Base filter set default at value 1000. Tested with multiple gamepads connected at the same time (Sony PS3). --- project/src/backend/sdl/SDLApplication.cpp | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 94a6216d3..cfbc9461b 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -15,7 +15,8 @@ namespace lime { AutoGCRoot* Application::callback = 0; SDLApplication* SDLApplication::currentApplication = 0; - + std::map > gamepadsAxisMap; + const int analogAxisDeadZone = 1000; SDLApplication::SDLApplication () { @@ -239,9 +240,36 @@ namespace lime { case SDL_CONTROLLERAXISMOTION: + if (gamepadsAxisMap[event->caxis.which].empty()) { + + gamepadsAxisMap[event->caxis.which][event->caxis.axis] = event->caxis.value; + + } + else if (gamepadsAxisMap[event->caxis.which][event->caxis.axis] == event->caxis.value) { + + break; + + } + gamepadEvent.type = AXIS_MOVE; gamepadEvent.axis = event->caxis.axis; gamepadEvent.id = event->caxis.which; + + if (event->caxis.value > -analogAxisDeadZone && event->caxis.value < analogAxisDeadZone) { + + if (gamepadsAxisMap[event->caxis.which][event->caxis.axis] != 0) { + + gamepadsAxisMap[event->caxis.which][event->caxis.axis] = 0; + gamepadEvent.axisValue = 0; + GamepadEvent::Dispatch (&gamepadEvent); + + } + + break; + + } + + gamepadsAxisMap[event->caxis.which][event->caxis.axis] = event->caxis.value; gamepadEvent.axisValue = event->caxis.value / 32768.0; GamepadEvent::Dispatch (&gamepadEvent);