浏览代码

Improved hotdocking of joysticks; added JoystickDevice.JoystickAdded and JoystickDevice.JoystickRemoved signals.

Mark Sibly 7 年之前
父节点
当前提交
c8ba0ea196
共有 2 个文件被更改,包括 40 次插入0 次删除
  1. 2 0
      modules/mojo/app/app.monkey2
  2. 38 0
      modules/mojo/input/joystick.monkey2

+ 2 - 0
modules/mojo/app/app.monkey2

@@ -737,6 +737,8 @@ Class AppInstance
 	Method DispatchEvent( event:SDL_Event Ptr )
 	
 		SdlEventFilter( event )
+		
+		JoystickDevice.SendEvent( event )
 	
 		Keyboard.SendEvent( event )
 		

+ 38 - 0
modules/mojo/input/joystick.monkey2

@@ -31,6 +31,10 @@ End
 #rem monkeydoc The JoystickDevice class.
 #end
 Class JoystickDevice
+	
+	Global JoystickAdded:Void( index:Int )
+	
+	Global JoystickRemoved:Void( index:Int )
 
 	#rem monkeydoc @hidden
 	#end	
@@ -136,6 +140,40 @@ Class JoystickDevice
 		Return joystick
 	End
 	
+	Internal
+	
+	Function SendEvent( event:SDL_Event Ptr )
+	
+		Select event->type
+		Case SDL_JOYDEVICEADDED
+			
+			Local jevent:=Cast<SDL_JoyDeviceEvent Ptr>( event )
+			
+			JoystickAdded( jevent->which )
+			
+		Case SDL_JOYDEVICEREMOVED
+			
+			Local jevent:=Cast<SDL_JoyDeviceEvent Ptr>( event )
+			
+			For Local i:=0 Until 8
+				
+				Local joystick:=_joysticks[i]
+				
+				If Not joystick Or SDL_JoystickInstanceID( joystick._joystick )<>jevent->which Continue
+
+				SDL_JoystickClose( joystick._joystick )
+				
+				_joysticks[i]=Null
+				
+				JoystickRemoved( i )
+				
+				Exit
+			Next
+				
+		End
+	
+	End
+	
 	Private
 	
 	Global _joysticks:=New JoystickDevice[8]