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);
|
||
|
}
|
||
|
}
|
||
|
}
|