package kha; import haxe.io.Bytes; import kha.graphics4.TextureFormat; class LoaderImpl { static var loadingImages: MapVoid> = new Map(); static var loadingSounds: MapVoid> = new Map(); static var soundId = -1; static var loadingVideos: MapVoid> = new Map(); static var videoId = -1; static var loadingBlobs: MapVoid> = new Map(); static var blobId = -1; static var sounds: Map = new Map(); public static function getImageFormats(): Array { return ["png", "jpg", "hdr"]; } public static function loadImageFromDescription(desc: Dynamic, done: kha.Image->Void, failed: AssetError->Void) { ++kha.Image._lastId; loadingImages[kha.Image._lastId] = done; Worker.postMessage({command: 'loadImage', file: desc.files[0], id: kha.Image._lastId}); } public static function _loadedImage(value: Dynamic) { var image = new Image(value.id, -1, value.width, value.height, value.realWidth, value.realHeight, TextureFormat.RGBA32); loadingImages[value.id](image); loadingImages.remove(value.id); } public static function getSoundFormats(): Array { return ["mp4"]; } public static function loadSoundFromDescription(desc: Dynamic, done: kha.Sound->Void, failed: AssetError->Void) { ++soundId; loadingSounds[soundId] = done; Worker.postMessage({command: 'loadSound', file: desc.files[0], id: soundId}); } public static function _loadedSound(value: Dynamic) { var sound = new kha.html5worker.Sound(value.id); loadingSounds[value.id](sound); loadingSounds.remove(value.id); sounds.set(value.id, sound); } public static function _uncompressedSound(value: Dynamic): Void { cast(sounds[value.id], kha.html5worker.Sound)._callback(); } public static function getVideoFormats(): Array { return ["mp4"]; } public static function loadVideoFromDescription(desc: Dynamic, done: kha.Video->Void, failed: AssetError->Void): Void { ++videoId; loadingVideos[videoId] = done; Worker.postMessage({command: 'loadVideo', file: desc.files[0], id: videoId}); } public static function loadBlobFromDescription(desc: Dynamic, done: Blob->Void, failed: AssetError->Void) { ++blobId; loadingBlobs[blobId] = done; Worker.postMessage({command: 'loadBlob', file: desc.files[0], id: blobId}); } public static function _loadedBlob(value: Dynamic) { var blob = new Blob(Bytes.ofData(value.data)); loadingBlobs[value.id](blob); loadingBlobs.remove(value.id); } public static function loadFontFromDescription(desc: Dynamic, done: Font->Void, failed: AssetError->Void): Void { loadBlobFromDescription(desc, function(blob: Blob) { done(new Kravur(blob)); }, failed); } }