diff --git a/data/ui/touch/rewind.png b/data/ui/touch/rewind.png new file mode 100644 index 00000000..69e49e8b Binary files /dev/null and b/data/ui/touch/rewind.png differ diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 974a5cdc..337ff874 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -915,12 +915,15 @@ class MarbleWorld extends Scheduler { var realDt = dt; - if ((Key.isDown(Settings.controlsSettings.rewind) || Gamepad.isDown(Settings.gamepadSettings.rewind)) + if ((Key.isDown(Settings.controlsSettings.rewind) + || MarbleGame.instance.touchInput.rewindButton.pressed + || Gamepad.isDown(Settings.gamepadSettings.rewind)) && Settings.optionsSettings.rewindEnabled && !this.isWatching) { this.rewinding = true; } else { - if ((Key.isReleased(Settings.controlsSettings.rewind) || Gamepad.isReleased(Settings.gamepadSettings.rewind)) + if (((Key.isReleased(Settings.controlsSettings.rewind) || Gamepad.isReleased(Settings.gamepadSettings.rewind)) + || !MarbleGame.instance.touchInput.rewindButton.pressed) && this.rewinding) { if (this.isRecording) { this.replay.spliceReplay(timeState.currentAttemptTime); diff --git a/src/Settings.hx b/src/Settings.hx index 2cf2e45a..e87fadd3 100644 --- a/src/Settings.hx +++ b/src/Settings.hx @@ -61,6 +61,8 @@ typedef TouchSettings = { var jumpButtonSize:Float; var powerupButtonPos:Array; var powerupButtonSize:Float; + var rewindButtonPos:Array; + var rewindButtonSize:Float; var buttonJoystickMultiplier:Float; } @@ -123,6 +125,8 @@ class Settings { jumpButtonSize: 60, powerupButtonPos: [440, 180], powerupButtonSize: 60, + rewindButtonPos: [380, 240], + rewindButtonSize: 60, buttonJoystickMultiplier: 2.5 } @@ -262,6 +266,10 @@ class Settings { if (controlsSettings.rewind == 0) { controlsSettings.rewind = Key.R; } + if (touchSettings.rewindButtonPos == null) { + touchSettings.rewindButtonPos = [380, 240]; + touchSettings.rewindButtonSize = 60; + } if (json.gamepad != null) { gamepadSettings = json.gamepad; } diff --git a/src/gui/TouchCtrlsEditGui.hx b/src/gui/TouchCtrlsEditGui.hx index b44cc827..ef6747ba 100644 --- a/src/gui/TouchCtrlsEditGui.hx +++ b/src/gui/TouchCtrlsEditGui.hx @@ -55,10 +55,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 rewindBtn = new TouchEditButton(ResourceLoader.getImage("data/ui/touch/rewind.png").resource, + new Vector(Settings.touchSettings.rewindButtonPos[0], Settings.touchSettings.rewindButtonPos[1]), Settings.touchSettings.rewindButtonSize); + jumpBtn.onClick = (sender, mousePos) -> { sender.setSelected(true); powerupBtn.setSelected(false); joystick.setSelected(false); + rewindBtn.setSelected(false); } jumpBtn.onChangeCb = (sender, value, rvalue) -> { @@ -70,6 +74,7 @@ class TouchCtrlsEditGui extends GuiImage { sender.setSelected(true); jumpBtn.setSelected(false); joystick.setSelected(false); + rewindBtn.setSelected(false); } powerupBtn.onChangeCb = (sender, value, rvalue) -> { @@ -81,6 +86,7 @@ class TouchCtrlsEditGui extends GuiImage { joystick.setSelected(true); jumpBtn.setSelected(false); powerupBtn.setSelected(false); + rewindBtn.setSelected(false); } joystick.onChangeCb = (value, rvalue) -> { @@ -93,5 +99,6 @@ class TouchCtrlsEditGui extends GuiImage { this.addChild(joystick); this.addChild(jumpBtn); this.addChild(powerupBtn); + this.addChild(rewindBtn); } } diff --git a/src/touch/RewindButton.hx b/src/touch/RewindButton.hx new file mode 100644 index 00000000..a2b3f016 --- /dev/null +++ b/src/touch/RewindButton.hx @@ -0,0 +1,14 @@ +package touch; + +import touch.TouchInput.Touch; +import h3d.Vector; +import hxd.Window; +import src.ResourceLoader; +import src.Settings; + +class RewindButton extends TouchButton { + public function new() { + super(ResourceLoader.getImage("data/ui/touch/rewind.png").resource, + new Vector(Settings.touchSettings.rewindButtonPos[0], Settings.touchSettings.rewindButtonPos[1]), Settings.touchSettings.rewindButtonSize); + } +} diff --git a/src/touch/TouchInput.hx b/src/touch/TouchInput.hx index 18d90c8c..ac29ba6f 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -43,6 +43,7 @@ class TouchInput { public var powerupButton:PowerupButton; public var pauseButton:PauseButton; + public var rewindButton:RewindButton; public var currentTouchState:TouchEventState; @@ -56,6 +57,7 @@ class TouchInput { this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); this.pauseButton = new PauseButton(); + this.rewindButton = new RewindButton(); this.currentTouchState = new TouchEventState(); this.previousTouchState = new TouchEventState(); } @@ -111,10 +113,14 @@ class TouchInput { this.movementInput = new MovementInput(); this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); + if (Settings.optionsSettings.rewindEnabled) + this.rewindButton = new RewindButton(); this.pauseButton = new PauseButton(); pauseButton.add(parentGui); jumpButton.add(parentGui); powerupButton.add(parentGui); + if (Settings.optionsSettings.rewindEnabled) + rewindButton.add(parentGui); movementInput.add(parentGui); cameraInput.add(parentGui); cameraInput.enabled = true; @@ -125,6 +131,8 @@ class TouchInput { this.powerupButton.setVisible(enabled); this.movementInput.setVisible(enabled); this.pauseButton.setVisible(enabled); + if (this.rewindButton != null) + this.rewindButton.setVisible(enabled); this.cameraInput.enabled = enabled; } @@ -134,10 +142,14 @@ class TouchInput { movementInput.remove(parentGui); pauseButton.remove(parentGui); cameraInput.remove(parentGui); + if (this.rewindButton != null) + rewindButton.remove(parentGui); jumpButton.dispose(); powerupButton.dispose(); movementInput.dispose(); pauseButton.dispose(); cameraInput.dispose(); + if (this.rewindButton != null) + rewindButton.dispose(); } }