diff --git a/src/MarbleGame.hx b/src/MarbleGame.hx index 9695eb4c..4a236bd5 100644 --- a/src/MarbleGame.hx +++ b/src/MarbleGame.hx @@ -185,7 +185,8 @@ class MarbleGame { world.update(dt * Debug.timeScale); } if (((Key.isPressed(Key.ESCAPE) #if js && paused #end) || Gamepad.isPressed(["start"])) - && world.finishTime == null && world._ready) { + && world.finishTime == null + && world._ready) { paused = !paused; handlePauseGame(); } diff --git a/src/Marbleland.hx b/src/Marbleland.hx index 4c470a52..356c3ab9 100644 --- a/src/Marbleland.hx +++ b/src/Marbleland.hx @@ -88,17 +88,26 @@ class Marbleland { goldMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); for (i in 0...goldMissions.length - 1) { @:privateAccess goldMissions[i].next = goldMissions[i + 1]; + goldMissions[i].index = i; } + @:privateAccess goldMissions[goldMissions.length - 1].next = goldMissions[0]; + goldMissions[goldMissions.length - 1].index = goldMissions.length - 1; case 'platinum': platinumMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); for (i in 0...platinumMissions.length - 1) { @:privateAccess platinumMissions[i].next = platinumMissions[i + 1]; + platinumMissions[i].index = i; } + @:privateAccess platinumMissions[platinumMissions.length - 1].next = platinumMissions[0]; + platinumMissions[platinumMissions.length - 1].index = platinumMissions.length - 1; case 'ultra': ultraMissions.sort((x, y) -> x.title > y.title ? 1 : (x.title < y.title ? -1 : 0)); for (i in 0...ultraMissions.length - 1) { @:privateAccess ultraMissions[i].next = ultraMissions[i + 1]; + ultraMissions[i].index = i; } + @:privateAccess ultraMissions[ultraMissions.length - 1].next = ultraMissions[0]; + ultraMissions[ultraMissions.length - 1].index = ultraMissions.length - 1; } } diff --git a/src/ResourceLoader.hx b/src/ResourceLoader.hx index b18ba1d4..4b644ba2 100644 --- a/src/ResourceLoader.hx +++ b/src/ResourceLoader.hx @@ -410,6 +410,55 @@ class ResourceLoader { return null; } + public static function getImagePixels(path:String) { + if (zipFilesystem.exists(path.toLowerCase())) { + if (StringTools.endsWith(path.toLowerCase(), ".bmp")) { // Handle bmp specially + var bmpContents = zipFilesystem.get(path.toLowerCase()); + var bmpreader = new format.bmp.Reader(new haxe.io.BytesInput(bmpContents.getBytes())); + var bmpdata = bmpreader.read(); + + var bbuf = new haxe.io.BytesBuffer(); + var i = 0; + while (i < bmpdata.pixels.length) { + bbuf.addByte(bmpdata.pixels.get(i)); + bbuf.addByte(bmpdata.pixels.get(i + 1)); + bbuf.addByte(bmpdata.pixels.get(i + 2)); + bbuf.addByte(1); + i += 3; + } + + var pixs = new hxd.Pixels(bmpdata.header.width, bmpdata.header.height, bbuf.getBytes(), hxd.PixelFormat.BGRA); + return pixs; + } else { + var img = new hxd.res.Image(zipFilesystem.get(path.toLowerCase())); + return img.getPixels(); + } + } + if (fileSystem.exists(path)) { + if (StringTools.endsWith(path.toLowerCase(), ".bmp")) { // Handle bmp specially + var bmpContents = zipFilesystem.get(path.toLowerCase()); + var bmpreader = new format.bmp.Reader(new haxe.io.BytesInput(bmpContents.getBytes())); + var bmpdata = bmpreader.read(); + + var bbuf = new haxe.io.BytesBuffer(); + var i = 0; + while (i < bmpdata.pixels.length) { + bbuf.addByte(bmpdata.pixels.get(i)); + bbuf.addByte(bmpdata.pixels.get(i + 1)); + bbuf.addByte(bmpdata.pixels.get(i + 2)); + bbuf.addByte(1); + i += 3; + } + var pixs = new hxd.Pixels(bmpdata.header.width, bmpdata.header.height, bbuf.getBytes(), hxd.PixelFormat.BGRA); + return pixs; + } else { + var img = loader.load(path).toImage(); + return img.getPixels(); + } + } + return null; + } + public static function getImage(path:String) { #if (js || android) path = StringTools.replace(path, "data/", ""); diff --git a/src/Sky.hx b/src/Sky.hx index 95494fe5..63e7ab03 100644 --- a/src/Sky.hx +++ b/src/Sky.hx @@ -122,10 +122,9 @@ class Sky extends Object { fnames.push(""); Console.error("Skybox image " + filenames[0] + " does not exist"); } else { - var pixels = ResourceLoader.getTexture(filenames[0]).resource.capturePixels(0, 0); + // var pixels = ResourceLoader.getTexture(filenames[0]).resource.capturePixels(0, 0); fnames.push(filenames[0]); - // var image = ResourceLoader.getResource(filenames[0], ResourceLoader.getImage, this.imageResources).toBitmap(); - // var pixels = image.getPixels(); + var pixels = ResourceLoader.getImagePixels(filenames[0]); skyboxImages.push(pixels); } }