From f4adce91e54a4f824ba8028da599e4c80db911c1 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 29 Mar 2017 13:52:35 -0700 Subject: [PATCH] First pass on enabling correct X/Y joystick.onTrackballMove events --- lime/_backend/native/NativeApplication.hx | 6 +++--- lime/app/Module.hx | 5 +++-- lime/ui/Joystick.hx | 2 +- project/include/ui/JoystickEvent.h | 6 +++--- project/src/backend/sdl/SDLApplication.cpp | 8 ++++---- project/src/ui/JoystickEvent.cpp | 6 +++--- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/lime/_backend/native/NativeApplication.hx b/lime/_backend/native/NativeApplication.hx index 401983a9d..9fb0267f5 100644 --- a/lime/_backend/native/NativeApplication.hx +++ b/lime/_backend/native/NativeApplication.hx @@ -253,17 +253,17 @@ class NativeApplication { case AXIS_MOVE: var joystick = Joystick.devices.get (joystickEventInfo.id); - if (joystick != null) joystick.onAxisMove.dispatch (joystickEventInfo.index, joystickEventInfo.value); + if (joystick != null) joystick.onAxisMove.dispatch (joystickEventInfo.index, joystickEventInfo.x); case HAT_MOVE: var joystick = Joystick.devices.get (joystickEventInfo.id); - if (joystick != null) joystick.onHatMove.dispatch (joystickEventInfo.index, joystickEventInfo.x); + if (joystick != null) joystick.onHatMove.dispatch (joystickEventInfo.index, joystickEventInfo.value); case TRACKBALL_MOVE: var joystick = Joystick.devices.get (joystickEventInfo.id); - if (joystick != null) joystick.onTrackballMove.dispatch (joystickEventInfo.index, joystickEventInfo.value); + if (joystick != null) joystick.onTrackballMove.dispatch (joystickEventInfo.index, joystickEventInfo.x, joystickEventInfo.y); case BUTTON_DOWN: diff --git a/lime/app/Module.hx b/lime/app/Module.hx index 667e9ffcd..923d011f4 100644 --- a/lime/app/Module.hx +++ b/lime/app/Module.hx @@ -273,9 +273,10 @@ class Module implements IModule { * Called when a joystick axis move event is fired * @param joystick The current joystick * @param trackball The trackball that was moved - * @param value The trackball value (between 0 and 1) + * @param x The x movement of the trackball (between 0 and 1) + * @param y The y movement of the trackball (between 0 and 1) */ - public function onJoystickTrackballMove (joystick:Joystick, trackball:Int, value:Float):Void { } + public function onJoystickTrackballMove (joystick:Joystick, trackball:Int, x:Float, y:Float):Void { } /** diff --git a/lime/ui/Joystick.hx b/lime/ui/Joystick.hx index ce2f7c928..8bc7d36cc 100644 --- a/lime/ui/Joystick.hx +++ b/lime/ui/Joystick.hx @@ -31,7 +31,7 @@ class Joystick { public var onButtonUp = new EventVoid> (); public var onDisconnect = new EventVoid> (); public var onHatMove = new EventJoystickHatPosition->Void> (); - public var onTrackballMove = new EventFloat->Void> (); + public var onTrackballMove = new EventFloat->Float->Void> (); public function new (id:Int) { diff --git a/project/include/ui/JoystickEvent.h b/project/include/ui/JoystickEvent.h index d3a17d0a5..b783472d2 100644 --- a/project/include/ui/JoystickEvent.h +++ b/project/include/ui/JoystickEvent.h @@ -32,12 +32,12 @@ namespace lime { static void Dispatch (JoystickEvent* event); - double eventValue; + int eventValue; int id; int index; JoystickEventType type; - int x; - int y; + double x; + double y; }; diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 068d082b6..6507ac792 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -434,7 +434,7 @@ namespace lime { joystickEvent.type = JOYSTICK_AXIS_MOVE; joystickEvent.index = event->jaxis.axis; - joystickEvent.eventValue = event->jaxis.value / (event->jaxis.value > 0 ? 32767.0 : 32768.0); + joystickEvent.x = event->jaxis.value / (event->jaxis.value > 0 ? 32767.0 : 32768.0); joystickEvent.id = event->jaxis.which; JoystickEvent::Dispatch (&joystickEvent); @@ -448,8 +448,8 @@ namespace lime { joystickEvent.type = JOYSTICK_TRACKBALL_MOVE; joystickEvent.index = event->jball.ball; - joystickEvent.x = event->jball.xrel; - joystickEvent.y = event->jball.yrel; + joystickEvent.x = event->jball.xrel / (event->jball.xrel > 0 ? 32767.0 : 32768.0); + joystickEvent.y = event->jball.yrel / (event->jball.yrel > 0 ? 32767.0 : 32768.0); joystickEvent.id = event->jball.which; JoystickEvent::Dispatch (&joystickEvent); @@ -489,7 +489,7 @@ namespace lime { joystickEvent.type = JOYSTICK_HAT_MOVE; joystickEvent.index = event->jhat.hat; - joystickEvent.x = event->jhat.value; + joystickEvent.eventValue = event->jhat.value; joystickEvent.id = event->jhat.which; JoystickEvent::Dispatch (&joystickEvent); diff --git a/project/src/ui/JoystickEvent.cpp b/project/src/ui/JoystickEvent.cpp index d350f20a2..d61201afa 100644 --- a/project/src/ui/JoystickEvent.cpp +++ b/project/src/ui/JoystickEvent.cpp @@ -50,9 +50,9 @@ namespace lime { alloc_field (object, id_id, alloc_int (event->id)); alloc_field (object, id_index, alloc_int (event->index)); alloc_field (object, id_type, alloc_int (event->type)); - alloc_field (object, id_value, alloc_float (event->eventValue)); - alloc_field (object, id_x, alloc_int (event->x)); - alloc_field (object, id_y, alloc_int (event->y)); + alloc_field (object, id_value, alloc_int (event->eventValue)); + alloc_field (object, id_x, alloc_float (event->x)); + alloc_field (object, id_y, alloc_float (event->y)); val_call0 (JoystickEvent::callback->get ());