From f50904e1d410d63fecdccf5a0fc74eb3cc4756a4 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Thu, 20 Jun 2019 21:46:17 -0700 Subject: [PATCH] AssetBundle improvements --- src/lime/utils/AssetBundle.hx | 23 ++++++++++++++++++++--- src/lime/utils/AssetLibrary.hx | 5 +++-- src/lime/utils/AssetManifest.hx | 17 ++++++++++++++--- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/lime/utils/AssetBundle.hx b/src/lime/utils/AssetBundle.hx index 11428c47e..4e83b5318 100644 --- a/src/lime/utils/AssetBundle.hx +++ b/src/lime/utils/AssetBundle.hx @@ -1,6 +1,9 @@ package lime.utils; +import haxe.io.BytesInput; +import haxe.io.Input; import haxe.zip.Reader; +import lime.app.Future; import lime.utils.Bytes; #if sys @@ -27,6 +30,23 @@ class AssetBundle { #if sys var input = File.read(path); + return __extractBundle(input); + #else + return null; + #end + } + + public static function loadFromFile(path:String):Future + { + return Bytes.loadFromFile(path).then(function(bytes) + { + var input = new BytesInput(bytes); + return Future.withValue(__extractBundle(input)); + }); + } + + @:noCompletion private static function __extractBundle(input:Input):AssetBundle + { var entries = Reader.readZip(input); var bundle = new AssetBundle(); @@ -46,8 +66,5 @@ class AssetBundle } return bundle; - #else - return null; - #end } } \ No newline at end of file diff --git a/src/lime/utils/AssetLibrary.hx b/src/lime/utils/AssetLibrary.hx index a2a324883..556dcb047 100644 --- a/src/lime/utils/AssetLibrary.hx +++ b/src/lime/utils/AssetLibrary.hx @@ -613,7 +613,7 @@ class AssetLibrary if (id != null) { - var size = sizes.get(id); + var size = sizes.exists(id) ? sizes.get(id) : 0; if (!bytesLoadedCache.exists(id)) { @@ -658,6 +658,7 @@ class AssetLibrary { id = Reflect.hasField(asset, "id") ? asset.id : asset.path; data = bundle.data.get(asset.path); + if (Reflect.hasField(asset, "type")) { type = asset.type; @@ -753,7 +754,7 @@ class AssetLibrary { id = Reflect.hasField(asset, "id") ? asset.id : asset.path; - if (preload.exists(id) && preload.get(id)) + if (preload.exists(id) && preload.get(id) && sizes.exists(id)) { bytesTotal += sizes.get(id); } diff --git a/src/lime/utils/AssetManifest.hx b/src/lime/utils/AssetManifest.hx index 5b07b10b7..c4f6d1ad1 100644 --- a/src/lime/utils/AssetManifest.hx +++ b/src/lime/utils/AssetManifest.hx @@ -77,9 +77,20 @@ class AssetManifest var manifestData = Json.parse(data); var manifest = new AssetManifest(); - manifest.name = manifestData.name; - manifest.libraryType = manifestData.libraryType; - manifest.libraryArgs = manifestData.libraryArgs; + if (Reflect.hasField(manifestData, "name")) + { + manifest.name = manifestData.name; + } + + if (Reflect.hasField(manifestData, "libraryType")) + { + manifest.libraryType = manifestData.libraryType; + } + + if (Reflect.hasField(manifestData, "libraryArgs")) + { + manifest.libraryArgs = manifestData.libraryArgs; + } if (Reflect.hasField(manifestData, "version") && manifestData.version <= 2) {