forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package kha.input;
 | |
| 
 | |
| import kha.netsync.Controller;
 | |
| 
 | |
| /** See `Keyboard.disableSystemInterventions` */
 | |
| enum BlockInterventions {
 | |
| 	Default;
 | |
| 	Full;
 | |
| 	None;
 | |
| 	Custom(func: (code: KeyCode) -> Bool);
 | |
| }
 | |
| 
 | |
| @:allow(kha.SystemImpl)
 | |
| @:expose
 | |
| class Keyboard extends Controller {
 | |
| 	static var keyBehavior = BlockInterventions.Default;
 | |
| 
 | |
| 	/**
 | |
| 	 * Get current Keyboard.
 | |
| 	 * @param num (optional) keyboard id (0 by default).
 | |
| 	 */
 | |
| 	public static function get(num: Int = 0): Keyboard {
 | |
| 		return SystemImpl.getKeyboard(num);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Disables system hotkeys (html5 only).
 | |
| 	 * @param behavior can be:
 | |
| 	 *   Default - allow F-keys and char keys.
 | |
| 	 *   Full - disable all keys (that browser allows).
 | |
| 	 *   None - do not block any key.
 | |
| 	 *   Custom(func:(code:Int)->Bool) - set custom handler for keydown event (should return true if keycode blocked).
 | |
| 	 */
 | |
| 	public static function disableSystemInterventions(behavior: BlockInterventions): Void {
 | |
| 		keyBehavior = behavior;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Creates event handlers from passed functions.
 | |
| 	 * @param downListener (optional) function with `key:KeyCode` argument, fired when a key is pressed down.
 | |
| 	 * @param upListener (optional) function with `key:KeyCode` argument, fired when a key is released.
 | |
| 	 * @param pressListener (optional) function with `char:String` argument, fired when a key that produces a character value is pressed down.
 | |
| 	 */
 | |
| 	public function notify(?downListener: (key: KeyCode) -> Void, ?upListener: (key: KeyCode) -> Void, ?pressListener: (char: String) -> Void = null): Void {
 | |
| 		if (downListener != null)
 | |
| 			downListeners.push(downListener);
 | |
| 		if (upListener != null)
 | |
| 			upListeners.push(upListener);
 | |
| 		if (pressListener != null)
 | |
| 			pressListeners.push(pressListener);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Removes event handlers from the passed functions that were passed to `notify` function.
 | |
| 	 */
 | |
| 	public function remove(?downListener: (key: KeyCode) -> Void, ?upListener: (key: KeyCode) -> Void, ?pressListener: (char: String) -> Void): Void {
 | |
| 		if (downListener != null)
 | |
| 			downListeners.remove(downListener);
 | |
| 		if (upListener != null)
 | |
| 			upListeners.remove(upListener);
 | |
| 		if (pressListener != null)
 | |
| 			pressListeners.remove(pressListener);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Show virtual keyboard (if it exists).
 | |
| 	 */
 | |
| 	public function show(): Void {}
 | |
| 
 | |
| 	/**
 | |
| 	 * Hide virtual keyboard (if it exists).
 | |
| 	 */
 | |
| 	public function hide(): Void {}
 | |
| 
 | |
| 	static var instance: Keyboard;
 | |
| 
 | |
| 	var downListeners: Array<(key: KeyCode) -> Void>;
 | |
| 	var upListeners: Array<(key: KeyCode) -> Void>;
 | |
| 	var pressListeners: Array<(char: String) -> Void>;
 | |
| 
 | |
| 	function new() {
 | |
| 		super();
 | |
| 		downListeners = [];
 | |
| 		upListeners = [];
 | |
| 		pressListeners = [];
 | |
| 		instance = this;
 | |
| 	}
 | |
| 
 | |
| 	@input
 | |
| 	function sendDownEvent(code: KeyCode): Void {
 | |
| 		#if sys_server
 | |
| 		// js.Node.console.log(kha.Scheduler.time() + " Down: " + key + " from " + kha.network.Session.the().me.id);
 | |
| 		#end
 | |
| 		for (listener in downListeners) {
 | |
| 			listener(code);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@input
 | |
| 	function sendUpEvent(code: KeyCode): Void {
 | |
| 		#if sys_server
 | |
| 		// js.Node.console.log(kha.Scheduler.time() + " Up: " + key + " from " + kha.network.Session.the().me.id);
 | |
| 		#end
 | |
| 		for (listener in upListeners) {
 | |
| 			listener(code);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@input
 | |
| 	function sendPressEvent(char: String): Void {
 | |
| 		for (listener in pressListeners) {
 | |
| 			listener(char);
 | |
| 		}
 | |
| 	}
 | |
| }
 |