forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha.input; | ||
|  | 
 | ||
|  | @:allow(kha.SystemImpl) | ||
|  | @:expose | ||
|  | class Gamepad { | ||
|  | 	var index: Int; | ||
|  | 
 | ||
|  | 	public static function get(index: Int = 0): Gamepad { | ||
|  | 		if (index >= instances.length) | ||
|  | 			return null; | ||
|  | 		return instances[index]; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function notifyOnConnect(?connectListener: Int->Void, ?disconnectListener: Int->Void): Void { | ||
|  | 		if (connectListener != null) | ||
|  | 			connectListeners.push(connectListener); | ||
|  | 		if (disconnectListener != null) | ||
|  | 			disconnectListeners.push(disconnectListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function removeConnect(?connectListener: Int->Void, ?disconnectListener: Int->Void): Void { | ||
|  | 		if (connectListener != null) | ||
|  | 			connectListeners.remove(connectListener); | ||
|  | 		if (disconnectListener != null) | ||
|  | 			disconnectListeners.remove(disconnectListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function notify(?axisListener: Int->Float->Void, ?buttonListener: Int->Float->Void): Void { | ||
|  | 		if (axisListener != null) | ||
|  | 			axisListeners.push(axisListener); | ||
|  | 		if (buttonListener != null) | ||
|  | 			buttonListeners.push(buttonListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function remove(?axisListener: Int->Float->Void, ?buttonListener: Int->Float->Void): Void { | ||
|  | 		if (axisListener != null) | ||
|  | 			axisListeners.remove(axisListener); | ||
|  | 		if (buttonListener != null) | ||
|  | 			buttonListeners.remove(buttonListener); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	static var instances: Array<Gamepad> = new Array(); | ||
|  | 
 | ||
|  | 	var axisListeners: Array<Int->Float->Void>; | ||
|  | 	var buttonListeners: Array<Int->Float->Void>; | ||
|  | 
 | ||
|  | 	static var connectListeners: Array<Int->Void> = new Array(); | ||
|  | 	static var disconnectListeners: Array<Int->Void> = new Array(); | ||
|  | 
 | ||
|  | 	function new(index: Int = 0, id: String = "unknown") { | ||
|  | 		connected = false; | ||
|  | 		this.index = index; | ||
|  | 		axisListeners = new Array<Int->Float->Void>(); | ||
|  | 		buttonListeners = new Array<Int->Float->Void>(); | ||
|  | 		instances[index] = this; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public var id(get, null): String; | ||
|  | 	public var vendor(get, null): String; | ||
|  | 	public var connected(default, null): Bool; | ||
|  | 
 | ||
|  | 	public function rumble(leftAmount: Float, rightAmount: Float) { | ||
|  | 		SystemImpl.setGamepadRumble(index, leftAmount, rightAmount); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function get_id(): String { | ||
|  | 		return SystemImpl.getGamepadId(index); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function get_vendor(): String { | ||
|  | 		return SystemImpl.getGamepadVendor(index); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@input | ||
|  | 	function sendAxisEvent(axis: Int, value: Float): Void { | ||
|  | 		for (listener in axisListeners) { | ||
|  | 			listener(axis, value); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@input | ||
|  | 	function sendButtonEvent(button: Int, value: Float): Void { | ||
|  | 		for (listener in buttonListeners) { | ||
|  | 			listener(button, value); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@input | ||
|  | 	static function sendConnectEvent(index: Int): Void { | ||
|  | 		instances[index].connected = true; | ||
|  | 		for (listener in connectListeners) { | ||
|  | 			listener(index); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	@input | ||
|  | 	static function sendDisconnectEvent(index: Int): Void { | ||
|  | 		instances[index].connected = false; | ||
|  | 		for (listener in disconnectListeners) { | ||
|  | 			listener(index); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |