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 {}
 | 
						|
}
 |