90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package kha; | ||
|  | 
 | ||
|  | import kha.Game; | ||
|  | import kha.input.Gamepad; | ||
|  | import kha.input.Keyboard; | ||
|  | import kha.js.WorkerGraphics; | ||
|  | import kha.Key; | ||
|  | import kha.Loader; | ||
|  | 
 | ||
|  | class Starter { | ||
|  | 	var gameToStart: Game; | ||
|  | 
 | ||
|  | 	static var frame: Framebuffer = null; | ||
|  | 	static var keyboard: Keyboard; | ||
|  | 	static var mouse: kha.input.Mouse; | ||
|  | 	static var gamepad: Gamepad; | ||
|  | 
 | ||
|  | 	public static var mouseX: Int; | ||
|  | 	public static var mouseY: Int; | ||
|  | 
 | ||
|  | 	public function new() { | ||
|  | 		Worker.handleMessages(messageHandler); | ||
|  | 		keyboard = new Keyboard(); | ||
|  | 		mouse = new kha.input.Mouse(); | ||
|  | 		gamepad = new Gamepad(); | ||
|  | 
 | ||
|  | 		Loader.init(new kha.js.Loader()); | ||
|  | 		Scheduler.init(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function start(game: Game): Void { | ||
|  | 		gameToStart = game; | ||
|  | 		Configuration.setScreen(new EmptyScreen(Color.fromBytes(0, 0, 0))); | ||
|  | 		Loader.the.loadProject(loadFinished); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function loadFinished() { | ||
|  | 		Loader.the.initProject(); | ||
|  | 
 | ||
|  | 		gameToStart.width = Loader.the.width; | ||
|  | 		gameToStart.height = Loader.the.height; | ||
|  | 
 | ||
|  | 		Sys.init(gameToStart.width, gameToStart.height); | ||
|  | 		frame = new Framebuffer(new WorkerGraphics(gameToStart.width, gameToStart.height), null); | ||
|  | 		Scheduler.start(); | ||
|  | 
 | ||
|  | 		Configuration.setScreen(gameToStart); | ||
|  | 
 | ||
|  | 		gameToStart.loadFinished(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function lockMouse(): Void {} | ||
|  | 
 | ||
|  | 	public function unlockMouse(): Void {} | ||
|  | 
 | ||
|  | 	public function canLockMouse(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function isMouseLocked(): Bool { | ||
|  | 		return false; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	public function notifyOfMouseLockChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	public function removeFromMouseLockChange(func: Void->Void, error: Void->Void): Void {} | ||
|  | 
 | ||
|  | 	function messageHandler(value: Dynamic): Void { | ||
|  | 		switch (value.data.command) { | ||
|  | 			case 'loadedBlob': | ||
|  | 				cast(Loader.the, kha.js.Loader).loadedBlob(value.data); | ||
|  | 			case 'loadedImage': | ||
|  | 				cast(Loader.the, kha.js.Loader).loadedImage(value.data); | ||
|  | 			case 'loadedSound': | ||
|  | 				cast(Loader.the, kha.js.Loader).loadedSound(value.data); | ||
|  | 			case 'loadedMusic': | ||
|  | 				cast(Loader.the, kha.js.Loader).loadedMusic(value.data); | ||
|  | 			case 'frame': | ||
|  | 				if (frame != null) { | ||
|  | 					Scheduler.executeFrame(); | ||
|  | 					Configuration.screen().render(frame); | ||
|  | 				} | ||
|  | 			case 'keyDown': | ||
|  | 				Configuration.screen().keyDown(Key.createByIndex(value.data.key), value.data.char); | ||
|  | 			case 'keyUp': | ||
|  | 				Configuration.screen().keyUp(Key.createByIndex(value.data.key), value.data.char); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |