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); } } }