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