forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			242 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			242 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha; | ||
|  | 
 | ||
|  | import kha.input.Gamepad; | ||
|  | import kha.input.Keyboard; | ||
|  | import kha.input.KeyCode; | ||
|  | import kha.input.Mouse; | ||
|  | import kha.input.Surface; | ||
|  | import kha.System; | ||
|  | 
 | ||
|  | class GamepadStates { | ||
|  | 	public var axes: Array<Float>; | ||
|  | 	public var buttons: Array<Float>; | ||
|  | 
 | ||
|  | 	public function new() { | ||
|  | 		axes = new Array<Float>(); | ||
|  | 		buttons = new Array<Float>(); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | class SystemImpl { | ||
|  | 	static var options: SystemOptions; | ||
|  | 	@:allow(kha.Window) | ||
|  | 	static var width: Int = 800; | ||
|  | 	@:allow(kha.Window) | ||
|  | 	static var height: Int = 600; | ||
|  | 	static var dpi: Int = 96; | ||
|  | 	static inline var maxGamepads: Int = 4; | ||
|  | 	static var frame: Framebuffer; | ||
|  | 	static var keyboard: Keyboard = null; | ||
|  | 	static var mouse: kha.input.Mouse; | ||
|  | 	static var surface: Surface; | ||
|  | 	static var gamepads: Array<Gamepad>; | ||
|  | 
 | ||
|  | 	public static function init(options: SystemOptions, callback: Window->Void) { | ||
|  | 		Worker.handleMessages(messageHandler); | ||
|  | 
 | ||
|  | 		Shaders.init(); | ||
|  | 		var shaders = new Array<Dynamic>(); | ||
|  | 		for (field in Reflect.fields(Shaders)) { | ||
|  | 			if (field != "init" && field != "__name__" && field.substr(field.length - 5, 4) != "Data") { | ||
|  | 				var shader = Reflect.field(Shaders, field); | ||
|  | 				shaders.push({ | ||
|  | 					name: field, | ||
|  | 					files: shader.files, | ||
|  | 					sources: shader.sources | ||
|  | 				}); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		Worker.postMessage({command: 'setShaders', shaders: shaders}); | ||
|  | 
 | ||
|  | 		SystemImpl.options = options; | ||
|  | 
 | ||
|  | 		// haxe.Log.trace = untyped js.Boot.__trace; // Hack for JS trace problems | ||
|  | 
 | ||
|  | 		keyboard = new Keyboard(); | ||
|  | 		mouse = new Mouse(); | ||
|  | 		surface = new Surface(); | ||
|  | 		gamepads = new Array<Gamepad>(); | ||
|  | 		for (i in 0...maxGamepads) { | ||
|  | 			gamepads[i] = new Gamepad(i); | ||
|  | 		} | ||
|  | 		var window = new Window(); | ||
|  | 
 | ||
|  | 		var g4 = new kha.html5worker.Graphics(); | ||
|  | 		frame = new Framebuffer(0, null, null, g4); | ||
|  | 		frame.init(new kha.graphics2.Graphics1(frame), new kha.graphics4.Graphics2(frame), g4); | ||
|  | 
 | ||
|  | 		Scheduler.init(); | ||
|  | 		Scheduler.start(); | ||
|  | 
 | ||
|  | 		callback(window); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function windowWidth(windowId: Int = 0): Int { | ||
|  | 		return Window.get(0).width; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function windowHeight(windowId: Int = 0): Int { | ||
|  | 		return Window.get(0).height; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function screenDpi(): Int { | ||
|  | 		return dpi; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getScreenRotation(): ScreenRotation { | ||
|  | 		return ScreenRotation.RotationNone; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getTime(): Float { | ||
|  | 		return js.Syntax.code("Date.now()") / 1000; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getVsync(): Bool { | ||
|  | 		return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getRefreshRate(): Int { | ||
|  | 		return 60; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getSystemId(): String { | ||
|  | 		return "HTML5-Worker"; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function vibrate(ms: Int): Void { | ||
|  | 		js.Browser.navigator.vibrate(ms); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getLanguage(): String { | ||
|  | 		final lang = js.Browser.navigator.language; | ||
|  | 		return lang.substr(0, 2).toLowerCase(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function requestShutdown(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getMouse(num: Int): Mouse { | ||
|  | 		if (num != 0) | ||
|  | 			return null; | ||
|  | 		return mouse; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getKeyboard(num: Int): Keyboard { | ||
|  | 		if (num != 0) | ||
|  | 			return null; | ||
|  | 		return keyboard; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function lockMouse(): Void {} | ||
|  | 
 | ||
|  | 	public static function unlockMouse(): Void {} | ||
|  | 
 | ||
|  | 	public static function canLockMouse(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function isMouseLocked(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function notifyOfMouseLockChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	public static function removeFromMouseLockChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	static function unload(_): Void {} | ||
|  | 
 | ||
|  | 	public static function canSwitchFullscreen(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function isFullscreen(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function requestFullscreen(): Void {} | ||
|  | 
 | ||
|  | 	public static function exitFullscreen(): Void {} | ||
|  | 
 | ||
|  | 	public static function notifyOfFullscreenChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	public static function removeFromFullscreenChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	public static function changeResolution(width: Int, height: Int): Void {} | ||
|  | 
 | ||
|  | 	public static function setKeepScreenOn(on: Bool): Void {} | ||
|  | 
 | ||
|  | 	public static function loadUrl(url: String): Void {} | ||
|  | 
 | ||
|  | 	public static function getGamepadId(index: Int): String { | ||
|  | 		return "unknown"; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function getGamepadVendor(index: Int): String { | ||
|  | 		return "unknown"; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function setGamepadRumble(index: Int, leftAmount: Float, rightAmount: Float) {} | ||
|  | 
 | ||
|  | 	static function messageHandler(value: Dynamic): Void { | ||
|  | 		switch (value.data.command) { | ||
|  | 			case 'patch': | ||
|  | 				js.Lib.eval(value.data.source); | ||
|  | 			case 'loadedImage': | ||
|  | 				LoaderImpl._loadedImage(value.data); | ||
|  | 			case 'loadedSound': | ||
|  | 				LoaderImpl._loadedSound(value.data); | ||
|  | 			case 'loadedBlob': | ||
|  | 				LoaderImpl._loadedBlob(value.data); | ||
|  | 			case 'uncompressedSound': | ||
|  | 				LoaderImpl._uncompressedSound(value.data); | ||
|  | 			case 'frame': | ||
|  | 				if (frame != null) { | ||
|  | 					Scheduler.executeFrame(); | ||
|  | 					Worker.postMessage({command: 'beginFrame'}); | ||
|  | 					System.render([frame]); | ||
|  | 					Worker.postMessage({command: 'endFrame'}); | ||
|  | 				} | ||
|  | 			case 'setWindowSize': | ||
|  | 				width = value.data.width; | ||
|  | 				height = value.data.height; | ||
|  | 			case 'keyDown': | ||
|  | 				keyboard.sendDownEvent(cast value.data.key); | ||
|  | 			case 'keyUp': | ||
|  | 				keyboard.sendUpEvent(cast value.data.key); | ||
|  | 			case 'keyPress': | ||
|  | 				keyboard.sendPressEvent(value.data.character); | ||
|  | 			case 'mouseDown': | ||
|  | 				mouse.sendDownEvent(0, value.data.button, value.data.x, value.data.y); | ||
|  | 			case 'mouseUp': | ||
|  | 				mouse.sendUpEvent(0, value.data.button, value.data.x, value.data.y); | ||
|  | 			case 'mouseMove': | ||
|  | 				mouse.sendMoveEvent(0, value.data.x, value.data.y, value.data.mx, value.data.my); | ||
|  | 			case 'mouseWheel': | ||
|  | 				mouse.sendWheelEvent(0, value.data.delta); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function safeZone(): Float { | ||
|  | 		return 1.0; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function login(): Void {} | ||
|  | 
 | ||
|  | 	public static function automaticSafeZone(): Bool { | ||
|  | 		return true; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function setSafeZone(value: Float): Void {} | ||
|  | 
 | ||
|  | 	public static function unlockAchievement(id: Int): Void {} | ||
|  | 
 | ||
|  | 	public static function waitingForLogin(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public static function disallowUserChange(): Void {} | ||
|  | 
 | ||
|  | 	public static function allowUserChange(): Void {} | ||
|  | } |