forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
115
Kha/Sources/kha/input/Keyboard.hx
Normal file
115
Kha/Sources/kha/input/Keyboard.hx
Normal file
@ -0,0 +1,115 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user