From 581e5de970a6b5ad9a0f6c9f8776c97155409096 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Sun, 14 May 2023 17:46:47 +0530 Subject: [PATCH] work on rewind touch controls and fix scroll bugs --- data/ui/touch/rewind.png | Bin 0 -> 5382 bytes src/MarbleWorld.hx | 7 +++++-- src/Settings.hx | 8 ++++++++ src/gui/GuiScrollCtrl.hx | 7 +++++-- src/gui/HelpCreditsGui.hx | 1 + src/gui/TouchCtrlsEditGui.hx | 21 +++++++++++++++++++++ src/touch/RewindButton.hx | 14 ++++++++++++++ src/touch/TouchInput.hx | 12 ++++++++++++ 8 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 data/ui/touch/rewind.png create mode 100644 src/touch/RewindButton.hx diff --git a/data/ui/touch/rewind.png b/data/ui/touch/rewind.png new file mode 100644 index 0000000000000000000000000000000000000000..69e49e8b92f5a64e10cf1c0bea97376a0d27e9a0 GIT binary patch literal 5382 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 literal 0 HcmV?d00001 diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index ff595664..61b8ec2a 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -992,10 +992,13 @@ class MarbleWorld extends Scheduler { var realDt = dt; - if (Key.isDown(Settings.controlsSettings.rewind) && Settings.optionsSettings.rewindEnabled && !this.isWatching) { + if ((Key.isDown(Settings.controlsSettings.rewind) || MarbleGame.instance.touchInput.rewindButton.pressed) + && Settings.optionsSettings.rewindEnabled + && !this.isWatching) { this.rewinding = true; } else { - if (Key.isReleased(Settings.controlsSettings.rewind) && this.rewinding) { + if ((Key.isReleased(Settings.controlsSettings.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 e26e0a88..554561c1 100644 --- a/src/Settings.hx +++ b/src/Settings.hx @@ -75,6 +75,8 @@ typedef TouchSettings = { var powerupButtonSize:Float; var blastButtonPos:Array; var blastButtonSize:Float; + var rewindButtonPos:Array; + var rewindButtonSize:Float; var buttonJoystickMultiplier:Float; } @@ -159,6 +161,8 @@ class Settings { powerupButtonSize: 60, blastButtonPos: [300, 240], blastButtonSize: 60, + rewindButtonPos: [380, 240], + rewindButtonSize: 60, buttonJoystickMultiplier: 2.5 } @@ -378,6 +382,10 @@ class Settings { touchSettings.blastButtonPos = [300, 240]; touchSettings.blastButtonSize = 60; } + if (touchSettings.rewindButtonPos == null) { + touchSettings.rewindButtonPos = [380, 240]; + touchSettings.rewindButtonSize = 60; + } if (json.gamepad != null) { gamepadSettings = json.gamepad; } diff --git a/src/gui/GuiScrollCtrl.hx b/src/gui/GuiScrollCtrl.hx index 2bb4e489..26bb7cd6 100644 --- a/src/gui/GuiScrollCtrl.hx +++ b/src/gui/GuiScrollCtrl.hx @@ -93,7 +93,8 @@ class GuiScrollCtrl extends GuiControl { public override function getRenderRectangle():Rect { var rrec = super.getRenderRectangle(); - rrec.scroll.y = scrollY * this.maxScrollY / rrec.extent.y; + if (!this.childrenHandleScroll) + rrec.scroll.y = scrollY * this.maxScrollY / rrec.extent.y; return rrec; } @@ -196,6 +197,7 @@ class GuiScrollCtrl extends GuiControl { if (Util.isTouchDevice()) { this.pressed = false; this.dirty = true; + deltaY = 0; this.updateScrollVisual(); } } @@ -204,7 +206,8 @@ class GuiScrollCtrl extends GuiControl { if (Util.isTouchDevice()) { super.onMouseMove(mouseState); if (this.pressed) { - var dy = mouseState.position.y - this.prevMousePos.y; + var dy = (mouseState.position.y - this.prevMousePos.y) * scrollSpeed / this.maxScrollY; + deltaY = -dy; this.scrollY -= dy; this.prevMousePos = mouseState.position; this.updateScrollVisual(); diff --git a/src/gui/HelpCreditsGui.hx b/src/gui/HelpCreditsGui.hx index 277f346f..8cf2704b 100644 --- a/src/gui/HelpCreditsGui.hx +++ b/src/gui/HelpCreditsGui.hx @@ -81,6 +81,7 @@ class HelpCreditsGui extends GuiImage { .toTile()); scrollCtrl2.position = new Vector(219, 28); scrollCtrl2.extent = new Vector(386, 342); + scrollCtrl2.childrenHandleScroll = true; wnd.addChild(scrollCtrl2); var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); diff --git a/src/gui/TouchCtrlsEditGui.hx b/src/gui/TouchCtrlsEditGui.hx index 1ebf9d2f..6da9ec1b 100644 --- a/src/gui/TouchCtrlsEditGui.hx +++ b/src/gui/TouchCtrlsEditGui.hx @@ -67,11 +67,15 @@ class TouchCtrlsEditGui extends GuiImage { 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); + 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); blastBtn.setSelected(false); + rewindBtn.setSelected(false); } jumpBtn.onChangeCb = (sender, value, rvalue) -> { @@ -84,6 +88,7 @@ class TouchCtrlsEditGui extends GuiImage { jumpBtn.setSelected(false); joystick.setSelected(false); blastBtn.setSelected(false); + rewindBtn.setSelected(false); } powerupBtn.onChangeCb = (sender, value, rvalue) -> { @@ -96,6 +101,7 @@ class TouchCtrlsEditGui extends GuiImage { jumpBtn.setSelected(false); powerupBtn.setSelected(false); joystick.setSelected(false); + rewindBtn.setSelected(false); } blastBtn.onChangeCb = (sender, value, rvalue) -> { @@ -103,11 +109,25 @@ class TouchCtrlsEditGui extends GuiImage { Settings.touchSettings.blastButtonSize = rvalue; } + rewindBtn.onClick = (sender, mousePos) -> { + sender.setSelected(true); + jumpBtn.setSelected(false); + powerupBtn.setSelected(false); + joystick.setSelected(false); + blastBtn.setSelected(false); + } + + rewindBtn.onChangeCb = (sender, value, rvalue) -> { + Settings.touchSettings.rewindButtonPos = [value.x, value.y]; + Settings.touchSettings.rewindButtonSize = rvalue; + } + joystick.onClick = (mousePos) -> { joystick.setSelected(true); jumpBtn.setSelected(false); powerupBtn.setSelected(false); blastBtn.setSelected(false); + rewindBtn.setSelected(false); } joystick.onChangeCb = (value, rvalue) -> { @@ -121,5 +141,6 @@ class TouchCtrlsEditGui extends GuiImage { this.addChild(jumpBtn); this.addChild(powerupBtn); this.addChild(blastBtn); + 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 485c0fae..3fc0e430 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -42,6 +42,7 @@ class TouchInput { public var powerupButton:PowerupButton; public var blastbutton:BlastButton; public var pauseButton:PauseButton; + public var rewindButton:RewindButton; public var restartButton:RestartButton; public var currentTouchState:TouchEventState; @@ -57,6 +58,7 @@ class TouchInput { this.powerupButton = new PowerupButton(); this.blastbutton = new BlastButton(); this.pauseButton = new PauseButton(); + this.rewindButton = new RewindButton(); this.restartButton = new RestartButton(); this.currentTouchState = new TouchEventState(); this.previousTouchState = new TouchEventState(); @@ -116,6 +118,8 @@ class TouchInput { this.movementInput = new MovementInput(); this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); + if (Settings.optionsSettings.rewindEnabled) + this.rewindButton = new RewindButton(); if (ultra) this.blastbutton = new BlastButton(); this.pauseButton = new PauseButton(); @@ -124,6 +128,8 @@ class TouchInput { restartButton.add(parentGui); jumpButton.add(parentGui); powerupButton.add(parentGui); + if (Settings.optionsSettings.rewindEnabled) + rewindButton.add(parentGui); if (ultra) blastbutton.add(parentGui); movementInput.add(parentGui); @@ -139,6 +145,8 @@ class TouchInput { this.movementInput.setVisible(enabled); this.pauseButton.setVisible(enabled); this.restartButton.setVisible(enabled); + if (this.rewindButton != null) + this.rewindButton.setVisible(enabled); this.cameraInput.enabled = enabled; } @@ -151,11 +159,15 @@ class TouchInput { pauseButton.remove(parentGui); restartButton.remove(parentGui); cameraInput.remove(parentGui); + if (this.rewindButton != null) + rewindButton.remove(parentGui); jumpButton.dispose(); powerupButton.dispose(); movementInput.dispose(); pauseButton.dispose(); restartButton.dispose(); cameraInput.dispose(); + if (this.rewindButton != null) + rewindButton.dispose(); } }