diff --git a/src/AudioManager.hx b/src/AudioManager.hx index cacc1a16..d6cbd84f 100644 --- a/src/AudioManager.hx +++ b/src/AudioManager.hx @@ -9,6 +9,7 @@ import hxd.res.Sound; import src.Settings; import hxd.snd.ChannelGroup; import src.Resource; +import src.ResourceLoaderWorker; class AudioManager { static var manager:hxd.snd.Manager; diff --git a/src/DtsObject.hx b/src/DtsObject.hx index 08c0acf4..0046f7d1 100644 --- a/src/DtsObject.hx +++ b/src/DtsObject.hx @@ -399,7 +399,7 @@ class DtsObject extends GameObject { #end // Apparently creating these bitmap datas dont work so we'll just get the snag a white texture in the filesystem #if js - var texture:Texture = ResourceLoader.getResource("data/interiors/parts/white.jpg", ResourceLoader.getTexture, this.textureResources); + var texture:Texture = ResourceLoader.getResource("data/shapes/pads/white.jpg", ResourceLoader.getTexture, this.textureResources); texture.wrap = Wrap.Repeat; #end material.texture = texture; diff --git a/src/ResourceLoader.hx b/src/ResourceLoader.hx index f25ad338..9635ea35 100644 --- a/src/ResourceLoader.hx +++ b/src/ResourceLoader.hx @@ -16,6 +16,7 @@ import hxd.fs.LocalFileSystem; import hxd.fs.FileSystem; import hxd.res.Loader; import src.Resource; +import src.ResourceLoaderWorker; class ResourceLoader { #if (hl && !android) @@ -45,20 +46,131 @@ class ResourceLoader { haxe.MainLoop.add(() -> {}); #if (js || android) var mfileSystem = ManifestBuilder.create("data"); - var mloader = new ManifestLoader(mfileSystem); + var mloader:ManifestLoader = new ManifestLoader(mfileSystem); var preloader = new ManifestProgress(mloader, () -> { loader = mloader; fileSystem = mfileSystem; onLoadedFunc(); }, scene2d); - preloader.start(); + loader = mloader; + fileSystem = mfileSystem; + var worker = new ResourceLoaderWorker(onLoadedFunc); + worker.addTask(fwd -> preloadUI(fwd)); + worker.addTask(fwd -> preloadMisFiles(fwd)); + worker.addTask(fwd -> preloadMusic(fwd)); + worker.addTask(fwd -> preloadUISounds(fwd)); + worker.addTask(fwd -> preloadShapes(fwd)); + worker.run(); + // preloader.start(); #end #if (hl && !android) onLoadedFunc(); #end } + static function preloadUI(onFinish:Void->Void) { + var toloadfiles = []; + var toloaddirs = []; + var filestats = fileSystem.dir("font").concat(fileSystem.dir("ui")); + for (file in filestats) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + toloadfiles.push(file); + } + } + while (toloaddirs.length > 0) { + var nextdir = toloaddirs.pop(); + for (file in fileSystem.dir(nextdir.path.substring(2))) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + toloadfiles.push(file); + } + } + } + var worker = new ResourceLoaderWorker(onFinish); + for (file in toloadfiles) { + worker.addTask((fwd) -> file.load(fwd)); + } + worker.run(); + } + + static function preloadMisFiles(onFinish:Void->Void) { + var toloadfiles = []; + var toloaddirs = []; + var filestats = fileSystem.dir("missions"); + for (file in filestats) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + toloadfiles.push(file); + } + } + while (toloaddirs.length > 0) { + var nextdir = toloaddirs.pop(); + for (file in fileSystem.dir(nextdir.path.substring(2))) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + if (file.extension == "mis") + toloadfiles.push(file); + } + } + } + var worker = new ResourceLoaderWorker(onFinish); + for (file in toloadfiles) { + worker.addTask((fwd) -> file.load(fwd)); + } + worker.run(); + } + + static function preloadMusic(onFinish:Void->Void) { + var worker = new ResourceLoaderWorker(onFinish); + worker.loadFile("sound/shell.ogg"); + worker.loadFile("sound/groovepolice.ogg"); + worker.loadFile("sound/classic vibe.ogg"); + worker.loadFile("sound/beach party.ogg"); + worker.run(); + } + + static function preloadUISounds(onFinish:Void->Void) { + var worker = new ResourceLoaderWorker(onFinish); + worker.loadFile("sound/testing.wav"); + worker.loadFile("sound/buttonover.wav"); + worker.loadFile("sound/buttonpress.wav"); + worker.run(); + } + + static function preloadShapes(onFinish:Void->Void) { + var toloadfiles = []; + var toloaddirs = []; + var filestats = fileSystem.dir("shapes"); + for (file in filestats) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + toloadfiles.push(file); + } + } + while (toloaddirs.length > 0) { + var nextdir = toloaddirs.pop(); + for (file in fileSystem.dir(nextdir.path.substring(2))) { + if (file.isDirectory) { + toloaddirs.push(file); + } else { + toloadfiles.push(file); + } + } + } + var worker = new ResourceLoaderWorker(onFinish); + for (file in toloadfiles) { + worker.addTask((fwd) -> file.load(fwd)); + } + worker.run(); + } + public static function loadInterior(path:String) { #if (js || android) path = StringTools.replace(path, "data/", ""); diff --git a/src/ResourceLoaderWorker.hx b/src/ResourceLoaderWorker.hx new file mode 100644 index 00000000..2d9fae1e --- /dev/null +++ b/src/ResourceLoaderWorker.hx @@ -0,0 +1,32 @@ +package src; + +import src.ResourceLoader; + +class ResourceLoaderWorker { + var tasks:Array<(() -> Void)->Void> = []; + + var onFinish:() -> Void; + + public function new(onFinish:() -> Void) { + this.onFinish = onFinish; + } + + public function addTask(task:(() -> Void)->Void) { + tasks.push(task); + } + + public function run() { + var task = tasks.shift(); + task(() -> { + if (tasks.length > 0) { + run(); + } else { + onFinish(); + } + }); + } + + public function loadFile(path:String) { + addTask(fwd -> ResourceLoader.loader.load(path).entry.load(fwd)); + } +} diff --git a/src/gui/GuiTextInput.hx b/src/gui/GuiTextInput.hx index be233436..75b76146 100644 --- a/src/gui/GuiTextInput.hx +++ b/src/gui/GuiTextInput.hx @@ -61,8 +61,8 @@ class GuiTextInput extends GuiControl { if (Util.isTouchDevice()) { text.text = js.Browser.window.prompt("Enter your name", text.text); var canvas = js.Browser.document.querySelector("#webgl"); - canvas.focus(); - js.Browser.document.documentElement.requestFullscreen(); + // canvas.focus(); + // js.Browser.document.documentElement.requestFullscreen(); } #end }