forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			520 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			520 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| 
								 | 
							
								package kha;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import kha.input.Gamepad;
							 | 
						||
| 
								 | 
							
								import kha.input.KeyCode;
							 | 
						||
| 
								 | 
							
								import kha.input.Keyboard;
							 | 
						||
| 
								 | 
							
								import kha.input.Mouse;
							 | 
						||
| 
								 | 
							
								import kha.input.Pen;
							 | 
						||
| 
								 | 
							
								import kha.input.Sensor;
							 | 
						||
| 
								 | 
							
								import kha.input.SensorType;
							 | 
						||
| 
								 | 
							
								import kha.input.Surface;
							 | 
						||
| 
								 | 
							
								import kha.System;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.TextureFormat;
							 | 
						||
| 
								 | 
							
								import kha.graphics4.DepthStencilFormat;
							 | 
						||
| 
								 | 
							
								#if ANDROID
							 | 
						||
| 
								 | 
							
								#if VR_CARDBOARD
							 | 
						||
| 
								 | 
							
								import kha.kore.vr.CardboardVrInterface;
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								#if !VR_CARDBOARD
							 | 
						||
| 
								 | 
							
								import kha.kore.vr.VrInterface;
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								#if !ANDROID
							 | 
						||
| 
								 | 
							
								#if VR_RIFT
							 | 
						||
| 
								 | 
							
								import kha.kore.vr.VrInterfaceRift;
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								#if !VR_RIFT
							 | 
						||
| 
								 | 
							
								import kha.vr.VrInterfaceEmulated;
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								#end
							 | 
						||
| 
								 | 
							
								@:headerCode("
							 | 
						||
| 
								 | 
							
								#include <kinc/system.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/input/gamepad.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/input/mouse.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/input/pen.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/display.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/window.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								kinc_window_options_t convertWindowOptions(::kha::WindowOptions win);
							 | 
						||
| 
								 | 
							
								kinc_framebuffer_options_t convertFramebufferOptions(::kha::FramebufferOptions frame);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void init_kinc(const char *name, int width, int height, kinc_window_options_t *win, kinc_framebuffer_options_t *frame);
							 | 
						||
| 
								 | 
							
								void post_kinc_init();
							 | 
						||
| 
								 | 
							
								void kha_kinc_init_audio(void);
							 | 
						||
| 
								 | 
							
								void run_kinc();
							 | 
						||
| 
								 | 
							
								const char *getGamepadId(int index);
							 | 
						||
| 
								 | 
							
								const char *getGamepadVendor(int index);
							 | 
						||
| 
								 | 
							
								void setGamepadRumble(int index, float left, float right);
							 | 
						||
| 
								 | 
							
								")
							 | 
						||
| 
								 | 
							
								@:keep
							 | 
						||
| 
								 | 
							
								class SystemImpl {
							 | 
						||
| 
								 | 
							
									public static var needs3d: Bool = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getMouse(num: Int): Mouse {
							 | 
						||
| 
								 | 
							
										if (num != 0)
							 | 
						||
| 
								 | 
							
											return null;
							 | 
						||
| 
								 | 
							
										return mouse;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getPen(num: Int): Pen {
							 | 
						||
| 
								 | 
							
										if (num != 0)
							 | 
						||
| 
								 | 
							
											return null;
							 | 
						||
| 
								 | 
							
										return pen;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getKeyboard(num: Int): Keyboard {
							 | 
						||
| 
								 | 
							
										if (num != 0)
							 | 
						||
| 
								 | 
							
											return null;
							 | 
						||
| 
								 | 
							
										return keyboard;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return kinc_time();")
							 | 
						||
| 
								 | 
							
									public static function getTime(): Float {
							 | 
						||
| 
								 | 
							
										return 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function windowWidth(windowId: Int): Int {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_window_width(windowId)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function windowHeight(windowId: Int): Int {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_window_height(windowId)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function screenDpi(): Int {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_display_current_mode(kinc_primary_display()).pixels_per_inch");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getVsync(): Bool {
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getRefreshRate(): Int {
							 | 
						||
| 
								 | 
							
										return 60;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function getScreenRotation(): ScreenRotation {
							 | 
						||
| 
								 | 
							
										return ScreenRotation.RotationNone;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return ::String(kinc_system_id());")
							 | 
						||
| 
								 | 
							
									public static function getSystemId(): String {
							 | 
						||
| 
								 | 
							
										return "";
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function vibrate(ms: Int): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_vibrate(ms)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return ::String(kinc_language());")
							 | 
						||
| 
								 | 
							
									public static function getLanguage(): String {
							 | 
						||
| 
								 | 
							
										return "en";
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function requestShutdown(): Bool {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_stop()");
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static var framebuffers: Array<Framebuffer> = new Array();
							 | 
						||
| 
								 | 
							
									static var keyboard: Keyboard;
							 | 
						||
| 
								 | 
							
									static var mouse: kha.input.Mouse;
							 | 
						||
| 
								 | 
							
									static var pen: kha.input.Pen;
							 | 
						||
| 
								 | 
							
									static var gamepads: Array<Gamepad>;
							 | 
						||
| 
								 | 
							
									static var surface: Surface;
							 | 
						||
| 
								 | 
							
									static var mouseLockListeners: Array<Void->Void>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function init(options: SystemOptions, callback: Window->Void): Void {
							 | 
						||
| 
								 | 
							
										initKinc(options.title, options.width, options.height, options.window, options.framebuffer);
							 | 
						||
| 
								 | 
							
										Window._init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										kha.Worker._mainThread = sys.thread.Thread.current();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										untyped __cpp__("post_kinc_init()");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										Shaders.init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										#if (!VR_GEAR_VR && !VR_RIFT)
							 | 
						||
| 
								 | 
							
										var g4 = new kha.kore.graphics4.Graphics();
							 | 
						||
| 
								 | 
							
										g4.window = 0;
							 | 
						||
| 
								 | 
							
										// var g5 = new kha.kore.graphics5.Graphics();
							 | 
						||
| 
								 | 
							
										var framebuffer = new Framebuffer(0, null, null, g4 /*, g5*/);
							 | 
						||
| 
								 | 
							
										framebuffer.init(new kha.graphics2.Graphics1(framebuffer), new kha.kore.graphics4.Graphics2(framebuffer), g4 /*, g5*/);
							 | 
						||
| 
								 | 
							
										framebuffers.push(framebuffer);
							 | 
						||
| 
								 | 
							
										#end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										postInit(callback);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function onWindowCreated(index: Int) {
							 | 
						||
| 
								 | 
							
										var g4 = new kha.kore.graphics4.Graphics();
							 | 
						||
| 
								 | 
							
										g4.window = index;
							 | 
						||
| 
								 | 
							
										var framebuffer = new Framebuffer(index, null, null, g4);
							 | 
						||
| 
								 | 
							
										framebuffer.init(new kha.graphics2.Graphics1(framebuffer), new kha.kore.graphics4.Graphics2(framebuffer), g4);
							 | 
						||
| 
								 | 
							
										framebuffers.push(framebuffer);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function postInit(callback: Window->Void) {
							 | 
						||
| 
								 | 
							
										mouseLockListeners = new Array();
							 | 
						||
| 
								 | 
							
										haxe.Timer.stamp();
							 | 
						||
| 
								 | 
							
										Sensor.get(SensorType.Accelerometer); // force compilation
							 | 
						||
| 
								 | 
							
										keyboard = new kha.kore.Keyboard();
							 | 
						||
| 
								 | 
							
										mouse = new kha.input.MouseImpl();
							 | 
						||
| 
								 | 
							
										pen = new kha.input.Pen();
							 | 
						||
| 
								 | 
							
										gamepads = new Array<Gamepad>();
							 | 
						||
| 
								 | 
							
										for (i in 0...4) {
							 | 
						||
| 
								 | 
							
											gamepads[i] = new Gamepad(i);
							 | 
						||
| 
								 | 
							
											gamepads[i].connected = checkGamepadConnected(i);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										surface = new Surface();
							 | 
						||
| 
								 | 
							
										kha.audio2.Audio._init();
							 | 
						||
| 
								 | 
							
										kha.audio1.Audio._init();
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kha_kinc_init_audio()");
							 | 
						||
| 
								 | 
							
										Scheduler.init();
							 | 
						||
| 
								 | 
							
										loadFinished();
							 | 
						||
| 
								 | 
							
										callback(Window.get(0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										untyped __cpp__("run_kinc()");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static function loadFinished() {
							 | 
						||
| 
								 | 
							
										Scheduler.start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										/*
							 | 
						||
| 
								 | 
							
											#if ANDROID
							 | 
						||
| 
								 | 
							
												#if VR_GEAR_VR
							 | 
						||
| 
								 | 
							
													kha.vr.VrInterface.instance = new kha.kore.vr.VrInterface();
							 | 
						||
| 
								 | 
							
												#end
							 | 
						||
| 
								 | 
							
												#if !VR_GEAR_VR
							 | 
						||
| 
								 | 
							
													kha.vr.VrInterface.instance = new CardboardVrInterface();
							 | 
						||
| 
								 | 
							
												#end
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
											#if !ANDROID
							 | 
						||
| 
								 | 
							
												#if VR_RIFT
							 | 
						||
| 
								 | 
							
													kha.vr.VrInterface.instance = new VrInterfaceRift();
							 | 
						||
| 
								 | 
							
												#end
							 | 
						||
| 
								 | 
							
												#if !VR_RIFT
							 | 
						||
| 
								 | 
							
													kha.vr.VrInterface.instance = new kha.vr.VrInterfaceEmulated();
							 | 
						||
| 
								 | 
							
												#end
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
										 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// (DK) moved
							 | 
						||
| 
								 | 
							
										/*Shaders.init();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											#if (!VR_GEAR_VR && !VR_RIFT)
							 | 
						||
| 
								 | 
							
											var g4 = new kha.kore.graphics4.Graphics();
							 | 
						||
| 
								 | 
							
											framebuffers.push(new Framebuffer(null, null, g4));
							 | 
						||
| 
								 | 
							
											framebuffers[0].init(new kha.graphics2.Graphics1(framebuffers[0]), new kha.kore.graphics4.Graphics2(framebuffers[0]), g4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											g4 = new kha.kore.graphics4.Graphics();
							 | 
						||
| 
								 | 
							
											framebuffers.push(new Framebuffer(null, null, g4));
							 | 
						||
| 
								 | 
							
											framebuffers[1].init(new kha.graphics2.Graphics1(framebuffers[1]), new kha.kore.graphics4.Graphics2(framebuffers[1]), g4);
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
										 */}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function lockMouse(windowId: Int = 0): Void {
							 | 
						||
| 
								 | 
							
										if (!isMouseLocked()) {
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_mouse_lock(windowId);");
							 | 
						||
| 
								 | 
							
											for (listener in mouseLockListeners) {
							 | 
						||
| 
								 | 
							
												listener();
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function unlockMouse(windowId: Int = 0): Void {
							 | 
						||
| 
								 | 
							
										if (isMouseLocked()) {
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_mouse_unlock();");
							 | 
						||
| 
								 | 
							
											for (listener in mouseLockListeners) {
							 | 
						||
| 
								 | 
							
												listener();
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function canLockMouse(windowId: Int = 0): Bool {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_mouse_can_lock()");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function isMouseLocked(windowId: Int = 0): Bool {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_mouse_is_locked()");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function notifyOfMouseLockChange(func: Void->Void, error: Void->Void, windowId: Int = 0): Void {
							 | 
						||
| 
								 | 
							
										if (canLockMouse(windowId) && func != null) {
							 | 
						||
| 
								 | 
							
											mouseLockListeners.push(func);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function removeFromMouseLockChange(func: Void->Void, error: Void->Void, windowId: Int = 0): Void {
							 | 
						||
| 
								 | 
							
										if (canLockMouse(windowId) && func != null) {
							 | 
						||
| 
								 | 
							
											mouseLockListeners.remove(func);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function hideSystemCursor(): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_mouse_hide();");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function showSystemCursor(): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_mouse_show();");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function setSystemCursor(cursor: Int): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_mouse_set_cursor(cursor)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function frame() {
							 | 
						||
| 
								 | 
							
										/*
							 | 
						||
| 
								 | 
							
											#if !ANDROID
							 | 
						||
| 
								 | 
							
											#if !VR_RIFT
							 | 
						||
| 
								 | 
							
												if (framebuffer == null) return;
							 | 
						||
| 
								 | 
							
												var vrInterface: VrInterfaceEmulated = cast(VrInterface.instance, VrInterfaceEmulated);
							 | 
						||
| 
								 | 
							
												vrInterface.framebuffer = framebuffer;
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
											#else
							 | 
						||
| 
								 | 
							
												#if VR_CARDBOARD
							 | 
						||
| 
								 | 
							
													var vrInterface: CardboardVrInterface = cast(VrInterface.instance, CardboardVrInterface);
							 | 
						||
| 
								 | 
							
													vrInterface.framebuffer = framebuffer;
							 | 
						||
| 
								 | 
							
												#end
							 | 
						||
| 
								 | 
							
											#end
							 | 
						||
| 
								 | 
							
										 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										LoaderImpl.tick();
							 | 
						||
| 
								 | 
							
										Scheduler.executeFrame();
							 | 
						||
| 
								 | 
							
										System.render(framebuffers);
							 | 
						||
| 
								 | 
							
										if (kha.kore.graphics4.Graphics.lastWindow != -1) {
							 | 
						||
| 
								 | 
							
											var win = kha.kore.graphics4.Graphics.lastWindow;
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_g4_end({0})", win);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else {
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_g4_begin(0)");
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_g4_clear(KINC_G4_CLEAR_COLOR | KINC_G4_CLEAR_DEPTH | KINC_G4_CLEAR_STENCIL, 0, 0.0f, 0)");
							 | 
						||
| 
								 | 
							
											untyped __cpp__("kinc_g4_end(0)");
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										kha.kore.graphics4.Graphics.lastWindow = -1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for (i in 0...4) {
							 | 
						||
| 
								 | 
							
											if (gamepads[i].connected && !checkGamepadConnected(i)) {
							 | 
						||
| 
								 | 
							
												Gamepad.sendDisconnectEvent(i);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											else if (!gamepads[i].connected && checkGamepadConnected(i)) {
							 | 
						||
| 
								 | 
							
												Gamepad.sendConnectEvent(i);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return kinc_gamepad_connected(i);")
							 | 
						||
| 
								 | 
							
									static function checkGamepadConnected(i: Int): Bool {
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function keyDown(code: KeyCode): Void {
							 | 
						||
| 
								 | 
							
										keyboard.sendDownEvent(code);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function keyUp(code: KeyCode): Void {
							 | 
						||
| 
								 | 
							
										keyboard.sendUpEvent(code);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function keyPress(char: Int): Void {
							 | 
						||
| 
								 | 
							
										keyboard.sendPressEvent(String.fromCharCode(char));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static var mouseX: Int;
							 | 
						||
| 
								 | 
							
									public static var mouseY: Int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function mouseDown(windowId: Int, button: Int, x: Int, y: Int): Void {
							 | 
						||
| 
								 | 
							
										mouseX = x;
							 | 
						||
| 
								 | 
							
										mouseY = y;
							 | 
						||
| 
								 | 
							
										mouse.sendDownEvent(windowId, button, x, y);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function mouseUp(windowId: Int, button: Int, x: Int, y: Int): Void {
							 | 
						||
| 
								 | 
							
										mouseX = x;
							 | 
						||
| 
								 | 
							
										mouseY = y;
							 | 
						||
| 
								 | 
							
										mouse.sendUpEvent(windowId, button, x, y);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function mouseMove(windowId: Int, x: Int, y: Int, movementX: Int, movementY: Int): Void {
							 | 
						||
| 
								 | 
							
										// var movementX = x - mouseX;
							 | 
						||
| 
								 | 
							
										// var movementY = y - mouseY;
							 | 
						||
| 
								 | 
							
										mouseX = x;
							 | 
						||
| 
								 | 
							
										mouseY = y;
							 | 
						||
| 
								 | 
							
										mouse.sendMoveEvent(windowId, x, y, movementX, movementY);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function mouseWheel(windowId: Int, delta: Int): Void {
							 | 
						||
| 
								 | 
							
										mouse.sendWheelEvent(windowId, delta);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function mouseLeave(windowId: Int): Void {
							 | 
						||
| 
								 | 
							
										mouse.sendLeaveEvent(windowId);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penDown(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendDownEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penUp(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendUpEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penMove(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendMoveEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penEraserDown(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendEraserDownEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penEraserUp(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendEraserUpEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function penEraserMove(windowId: Int, x: Int, y: Int, pressure: Float): Void {
							 | 
						||
| 
								 | 
							
										pen.sendEraserMoveEvent(windowId, x, y, pressure);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function gamepadAxis(gamepad: Int, axis: Int, value: Float): Void {
							 | 
						||
| 
								 | 
							
										gamepads[gamepad].sendAxisEvent(axis, value);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function gamepadButton(gamepad: Int, button: Int, value: Float): Void {
							 | 
						||
| 
								 | 
							
										gamepads[gamepad].sendButtonEvent(button, value);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function touchStart(index: Int, x: Int, y: Int): Void {
							 | 
						||
| 
								 | 
							
										surface.sendTouchStartEvent(index, x, y);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function touchEnd(index: Int, x: Int, y: Int): Void {
							 | 
						||
| 
								 | 
							
										surface.sendTouchEndEvent(index, x, y);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function touchMove(index: Int, x: Int, y: Int): Void {
							 | 
						||
| 
								 | 
							
										surface.sendMoveEvent(index, x, y);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function foreground(): Void {
							 | 
						||
| 
								 | 
							
										System.foreground();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function resume(): Void {
							 | 
						||
| 
								 | 
							
										System.resume();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function pause(): Void {
							 | 
						||
| 
								 | 
							
										System.pause();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function background(): Void {
							 | 
						||
| 
								 | 
							
										System.background();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function shutdown(): Void {
							 | 
						||
| 
								 | 
							
										System.shutdown();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function dropFiles(filePath: String): Void {
							 | 
						||
| 
								 | 
							
										System.dropFiles(filePath);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function copy(): String {
							 | 
						||
| 
								 | 
							
										if (System.copyListener != null) {
							 | 
						||
| 
								 | 
							
											return System.copyListener();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else {
							 | 
						||
| 
								 | 
							
											return null;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function cut(): String {
							 | 
						||
| 
								 | 
							
										if (System.cutListener != null) {
							 | 
						||
| 
								 | 
							
											return System.cutListener();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else {
							 | 
						||
| 
								 | 
							
											return null;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function paste(data: String): Void {
							 | 
						||
| 
								 | 
							
										if (System.pasteListener != null) {
							 | 
						||
| 
								 | 
							
											System.pasteListener(data);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("kinc_copy_to_clipboard(text.c_str());")
							 | 
						||
| 
								 | 
							
									public static function copyToClipboard(text: String) {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("kinc_login();")
							 | 
						||
| 
								 | 
							
									public static function login(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return kinc_waiting_for_login();")
							 | 
						||
| 
								 | 
							
									public static function waitingForLogin(): Bool {
							 | 
						||
| 
								 | 
							
										return false;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("kinc_disallow_user_change();")
							 | 
						||
| 
								 | 
							
									public static function disallowUserChange(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("kinc_allow_user_change();")
							 | 
						||
| 
								 | 
							
									public static function allowUserChange(): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function loginevent(): Void {
							 | 
						||
| 
								 | 
							
										if (System.loginListener != null) {
							 | 
						||
| 
								 | 
							
											System.loginListener();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function logoutevent(): Void {
							 | 
						||
| 
								 | 
							
										if (System.logoutListener != null) {
							 | 
						||
| 
								 | 
							
											System.logoutListener();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("
							 | 
						||
| 
								 | 
							
										kinc_window_options_t window = convertWindowOptions(win);
							 | 
						||
| 
								 | 
							
										kinc_framebuffer_options_t framebuffer = convertFramebufferOptions(frame);
							 | 
						||
| 
								 | 
							
										init_kinc(name, width, height, &window, &framebuffer);
							 | 
						||
| 
								 | 
							
									")
							 | 
						||
| 
								 | 
							
									static function initKinc(name: String, width: Int, height: Int, win: WindowOptions, frame: FramebufferOptions): Void {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function setKeepScreenOn(on: Bool): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_set_keep_screen_on(on)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function loadUrl(url: String): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_load_url(url)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return ::String(::getGamepadId(index));")
							 | 
						||
| 
								 | 
							
									public static function getGamepadId(index: Int): String {
							 | 
						||
| 
								 | 
							
										return "unknown";
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@:functionCode("return ::String(::getGamepadVendor(index));")
							 | 
						||
| 
								 | 
							
									public static function getGamepadVendor(index: Int): String {
							 | 
						||
| 
								 | 
							
										return "unknown";
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function setGamepadRumble(index: Int, leftAmount: Float, rightAmount: Float): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("::setGamepadRumble(index, leftAmount, rightAmount)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function safeZone(): Float {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_safe_zone()");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function automaticSafeZone(): Bool {
							 | 
						||
| 
								 | 
							
										return untyped __cpp__("kinc_automatic_safe_zone()");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function setSafeZone(value: Float): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_set_safe_zone(value)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public static function unlockAchievement(id: Int): Void {
							 | 
						||
| 
								 | 
							
										untyped __cpp__("kinc_unlock_achievement(id)");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |