diff --git a/data/ui/touch/explosion.png b/data/ui/touch/explosion.png new file mode 100644 index 00000000..ad613511 Binary files /dev/null and b/data/ui/touch/explosion.png differ diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 810349d8..946eb123 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1160,7 +1160,10 @@ class MarbleWorld extends Scheduler { this.tickSchedule(timeState.currentAttemptTime); - if (Key.isPressed(Settings.controlsSettings.blast) && !this.isWatching && this.game == "ultra") { + if (Key.isPressed(Settings.controlsSettings.blast) + || (MarbleGame.instance.touchInput.blastbutton.pressed) + && !this.isWatching + && this.game == "ultra") { this.marble.useBlast(); } diff --git a/src/Settings.hx b/src/Settings.hx index 72ed8279..cd174305 100644 --- a/src/Settings.hx +++ b/src/Settings.hx @@ -67,6 +67,8 @@ typedef TouchSettings = { var jumpButtonSize:Float; var powerupButtonPos:Array; var powerupButtonSize:Float; + var blastButtonPos:Array; + var blastButtonSize:Float; var buttonJoystickMultiplier:Float; } @@ -131,6 +133,8 @@ class Settings { jumpButtonSize: 60, powerupButtonPos: [440, 180], powerupButtonSize: 60, + blastButtonPos: [300, 240], + blastButtonSize: 60, buttonJoystickMultiplier: 2.5 } @@ -287,6 +291,10 @@ class Settings { if (json.touch != null) { touchSettings = json.touch; } + if (touchSettings.blastButtonPos == null) { + touchSettings.blastButtonPos = [300, 240]; + touchSettings.blastButtonSize = 60; + } if (json.stats != null) { playStatistics = json.stats; } diff --git a/src/fs/ManifestFileSystem.hx b/src/fs/ManifestFileSystem.hx index 29a4ee23..ad099099 100644 --- a/src/fs/ManifestFileSystem.hx +++ b/src/fs/ManifestFileSystem.hx @@ -47,7 +47,6 @@ class ManifestEntry extends FileEntry { private var bytes:Bytes; private var readPos:Int; private var loaded:Bool; - private var loadPromise:js.lib.Promise; #end public function new(fs:ManifestFileSystem, name:String, relPath:String, file:String, ?originalFile:String) { @@ -131,7 +130,7 @@ class ManifestEntry extends FileEntry { if (onReady != null) haxe.Timer.delay(onReady, 1); } else { - this.loadPromise = js.Browser.window.fetch(file).then((res:js.html.Response) -> { + js.Browser.window.fetch(file).then((res:js.html.Response) -> { return res.arrayBuffer(); }).then((buf:js.lib.ArrayBuffer) -> { loaded = true; diff --git a/src/gui/PlayGui.hx b/src/gui/PlayGui.hx index 297f2180..6c5a29bf 100644 --- a/src/gui/PlayGui.hx +++ b/src/gui/PlayGui.hx @@ -154,7 +154,7 @@ class PlayGui { initFPSMeter(); if (Util.isTouchDevice()) { - MarbleGame.instance.touchInput.showControls(this.playGuiCtrl); + MarbleGame.instance.touchInput.showControls(this.playGuiCtrl, game == 'ultra'); } playGuiCtrl.render(scene2d); @@ -461,13 +461,16 @@ class PlayGui { blastFill.extent = new Vector(Util.lerp(0, 110, value), 17); if (oldVal < 22 && blastFill.extent.x >= 22) { blastFill.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_bargreen.png", ResourceLoader.getImage, this.imageResources).toTile(); + MarbleGame.instance.touchInput.blastbutton.setEnabled(true); } if (oldVal >= 22 && blastFill.extent.x < 22) { blastFill.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_bargray.png", ResourceLoader.getImage, this.imageResources).toTile(); + MarbleGame.instance.touchInput.blastbutton.setEnabled(false); } } else { blastFill.extent = new Vector(0, 16); // WE will just use this extra number to store whether it was previously charged or not blastFrame.bmp.tile = ResourceLoader.getResource("data/ui/game/blastbar_charged.png", ResourceLoader.getImage, this.imageResources).toTile(); + MarbleGame.instance.touchInput.blastbutton.setEnabled(true); } this.blastBar.render(scene2d); } diff --git a/src/gui/TouchCtrlsEditGui.hx b/src/gui/TouchCtrlsEditGui.hx index c68924ac..1ebf9d2f 100644 --- a/src/gui/TouchCtrlsEditGui.hx +++ b/src/gui/TouchCtrlsEditGui.hx @@ -64,10 +64,14 @@ class TouchCtrlsEditGui extends GuiImage { var powerupBtn = new TouchEditButton(ResourceLoader.getImage("data/ui/touch/energy.png").resource, new Vector(Settings.touchSettings.powerupButtonPos[0], Settings.touchSettings.powerupButtonPos[1]), Settings.touchSettings.powerupButtonSize); + var blastBtn = new TouchEditButton(ResourceLoader.getImage("data/ui/touch/explosion.png").resource, + new Vector(Settings.touchSettings.blastButtonPos[0], Settings.touchSettings.blastButtonPos[1]), Settings.touchSettings.blastButtonSize); + jumpBtn.onClick = (sender, mousePos) -> { sender.setSelected(true); powerupBtn.setSelected(false); joystick.setSelected(false); + blastBtn.setSelected(false); } jumpBtn.onChangeCb = (sender, value, rvalue) -> { @@ -79,6 +83,7 @@ class TouchCtrlsEditGui extends GuiImage { sender.setSelected(true); jumpBtn.setSelected(false); joystick.setSelected(false); + blastBtn.setSelected(false); } powerupBtn.onChangeCb = (sender, value, rvalue) -> { @@ -86,10 +91,23 @@ class TouchCtrlsEditGui extends GuiImage { Settings.touchSettings.powerupButtonSize = rvalue; } + blastBtn.onClick = (sender, mousePos) -> { + sender.setSelected(true); + jumpBtn.setSelected(false); + powerupBtn.setSelected(false); + joystick.setSelected(false); + } + + blastBtn.onChangeCb = (sender, value, rvalue) -> { + Settings.touchSettings.blastButtonPos = [value.x, value.y]; + Settings.touchSettings.blastButtonSize = rvalue; + } + joystick.onClick = (mousePos) -> { joystick.setSelected(true); jumpBtn.setSelected(false); powerupBtn.setSelected(false); + blastBtn.setSelected(false); } joystick.onChangeCb = (value, rvalue) -> { @@ -102,5 +120,6 @@ class TouchCtrlsEditGui extends GuiImage { this.addChild(joystick); this.addChild(jumpBtn); this.addChild(powerupBtn); + this.addChild(blastBtn); } } diff --git a/src/touch/BlastButton.hx b/src/touch/BlastButton.hx new file mode 100644 index 00000000..689047bd --- /dev/null +++ b/src/touch/BlastButton.hx @@ -0,0 +1,15 @@ +package touch; + +import touch.TouchInput.Touch; +import h3d.Vector; +import hxd.Window; +import src.ResourceLoader; +import src.Settings; + +class BlastButton extends TouchButton { + public function new() { + super(ResourceLoader.getImage("data/ui/touch/explosion.png").resource, + new Vector(Settings.touchSettings.blastButtonPos[0], Settings.touchSettings.blastButtonPos[1]), Settings.touchSettings.blastButtonSize); + this.setEnabled(false); + } +} diff --git a/src/touch/TouchInput.hx b/src/touch/TouchInput.hx index 18d90c8c..0b6d58b2 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -39,9 +39,8 @@ class TouchInput { public var movementInput:MovementInput; public var jumpButton:JumpButton; - public var powerupButton:PowerupButton; - + public var blastbutton:BlastButton; public var pauseButton:PauseButton; public var currentTouchState:TouchEventState; @@ -55,6 +54,7 @@ class TouchInput { this.movementInput = new MovementInput(); this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); + this.blastbutton = new BlastButton(); this.pauseButton = new PauseButton(); this.currentTouchState = new TouchEventState(); this.previousTouchState = new TouchEventState(); @@ -101,9 +101,11 @@ class TouchInput { currentTouchState = new TouchEventState(); } - public function showControls(parentGui:GuiControl) { + public function showControls(parentGui:GuiControl, ultra:Bool) { jumpButton.dispose(); powerupButton.dispose(); + if (ultra) + blastbutton.dispose(); movementInput.dispose(); pauseButton.dispose(); cameraInput.dispose(); @@ -111,10 +113,14 @@ class TouchInput { this.movementInput = new MovementInput(); this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); + if (ultra) + this.blastbutton = new BlastButton(); this.pauseButton = new PauseButton(); pauseButton.add(parentGui); jumpButton.add(parentGui); powerupButton.add(parentGui); + if (ultra) + blastbutton.add(parentGui); movementInput.add(parentGui); cameraInput.add(parentGui); cameraInput.enabled = true; @@ -123,6 +129,8 @@ class TouchInput { public function setControlsEnabled(enabled:Bool) { this.jumpButton.setVisible(enabled); this.powerupButton.setVisible(enabled); + if (this.blastbutton != null) + this.blastbutton.setVisible(enabled); this.movementInput.setVisible(enabled); this.pauseButton.setVisible(enabled); this.cameraInput.enabled = enabled; @@ -131,6 +139,8 @@ class TouchInput { public function hideControls(parentGui:GuiControl) { jumpButton.remove(parentGui); powerupButton.remove(parentGui); + if (this.blastbutton != null) + blastbutton.remove(parentGui); movementInput.remove(parentGui); pauseButton.remove(parentGui); cameraInput.remove(parentGui);