work on rewind touch controls and fix scroll bugs

This commit is contained in:
RandomityGuy 2023-05-14 17:46:47 +05:30
parent df669cca17
commit 2e6eedba81
8 changed files with 67 additions and 4 deletions

BIN
data/ui/touch/rewind.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -991,10 +991,13 @@ class MarbleWorld extends Scheduler {
var realDt = dt; 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; this.rewinding = true;
} else { } 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) { if (this.isRecording) {
this.replay.spliceReplay(timeState.currentAttemptTime); this.replay.spliceReplay(timeState.currentAttemptTime);
} }

View file

@ -75,6 +75,8 @@ typedef TouchSettings = {
var powerupButtonSize:Float; var powerupButtonSize:Float;
var blastButtonPos:Array<Float>; var blastButtonPos:Array<Float>;
var blastButtonSize:Float; var blastButtonSize:Float;
var rewindButtonPos:Array<Float>;
var rewindButtonSize:Float;
var buttonJoystickMultiplier:Float; var buttonJoystickMultiplier:Float;
} }
@ -159,6 +161,8 @@ class Settings {
powerupButtonSize: 60, powerupButtonSize: 60,
blastButtonPos: [300, 240], blastButtonPos: [300, 240],
blastButtonSize: 60, blastButtonSize: 60,
rewindButtonPos: [380, 240],
rewindButtonSize: 60,
buttonJoystickMultiplier: 2.5 buttonJoystickMultiplier: 2.5
} }
@ -354,6 +358,10 @@ class Settings {
touchSettings.blastButtonPos = [300, 240]; touchSettings.blastButtonPos = [300, 240];
touchSettings.blastButtonSize = 60; touchSettings.blastButtonSize = 60;
} }
if (touchSettings.rewindButtonPos == null) {
touchSettings.rewindButtonPos = [380, 240];
touchSettings.rewindButtonSize = 60;
}
if (json.gamepad != null) { if (json.gamepad != null) {
gamepadSettings = json.gamepad; gamepadSettings = json.gamepad;
} }

View file

@ -14,6 +14,7 @@ class GuiScrollCtrl extends GuiControl {
public var scrollY:Float = 0; public var scrollY:Float = 0;
public var enabled:Bool = true; public var enabled:Bool = true;
public var childrenHandleScroll:Bool = false; public var childrenHandleScroll:Bool = false;
public var scrollSpeed = 500;
var maxScrollY:Float; var maxScrollY:Float;
@ -102,7 +103,8 @@ class GuiScrollCtrl extends GuiControl {
public override function getRenderRectangle():Rect { public override function getRenderRectangle():Rect {
var rrec = super.getRenderRectangle(); 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; return rrec;
} }
@ -220,6 +222,7 @@ class GuiScrollCtrl extends GuiControl {
if (Util.isTouchDevice()) { if (Util.isTouchDevice()) {
this.pressed = false; this.pressed = false;
this.dirty = true; this.dirty = true;
deltaY = 0;
this.updateScrollVisual(); this.updateScrollVisual();
} }
} }
@ -228,7 +231,8 @@ class GuiScrollCtrl extends GuiControl {
if (Util.isTouchDevice()) { if (Util.isTouchDevice()) {
super.onMouseMove(mouseState); super.onMouseMove(mouseState);
if (this.pressed) { 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.scrollY -= dy;
this.prevMousePos = mouseState.position; this.prevMousePos = mouseState.position;
this.updateScrollVisual(); this.updateScrollVisual();

View file

@ -81,6 +81,7 @@ class HelpCreditsGui extends GuiImage {
.toTile()); .toTile());
scrollCtrl2.position = new Vector(219, 28); scrollCtrl2.position = new Vector(219, 28);
scrollCtrl2.extent = new Vector(386, 342); scrollCtrl2.extent = new Vector(386, 342);
scrollCtrl2.childrenHandleScroll = true;
wnd.addChild(scrollCtrl2); wnd.addChild(scrollCtrl2);
var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt");

View file

@ -67,11 +67,15 @@ class TouchCtrlsEditGui extends GuiImage {
var blastBtn = new TouchEditButton(ResourceLoader.getImage("data/ui/touch/explosion.png").resource, 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); 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) -> { jumpBtn.onClick = (sender, mousePos) -> {
sender.setSelected(true); sender.setSelected(true);
powerupBtn.setSelected(false); powerupBtn.setSelected(false);
joystick.setSelected(false); joystick.setSelected(false);
blastBtn.setSelected(false); blastBtn.setSelected(false);
rewindBtn.setSelected(false);
} }
jumpBtn.onChangeCb = (sender, value, rvalue) -> { jumpBtn.onChangeCb = (sender, value, rvalue) -> {
@ -84,6 +88,7 @@ class TouchCtrlsEditGui extends GuiImage {
jumpBtn.setSelected(false); jumpBtn.setSelected(false);
joystick.setSelected(false); joystick.setSelected(false);
blastBtn.setSelected(false); blastBtn.setSelected(false);
rewindBtn.setSelected(false);
} }
powerupBtn.onChangeCb = (sender, value, rvalue) -> { powerupBtn.onChangeCb = (sender, value, rvalue) -> {
@ -96,6 +101,7 @@ class TouchCtrlsEditGui extends GuiImage {
jumpBtn.setSelected(false); jumpBtn.setSelected(false);
powerupBtn.setSelected(false); powerupBtn.setSelected(false);
joystick.setSelected(false); joystick.setSelected(false);
rewindBtn.setSelected(false);
} }
blastBtn.onChangeCb = (sender, value, rvalue) -> { blastBtn.onChangeCb = (sender, value, rvalue) -> {
@ -103,11 +109,25 @@ class TouchCtrlsEditGui extends GuiImage {
Settings.touchSettings.blastButtonSize = rvalue; 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.onClick = (mousePos) -> {
joystick.setSelected(true); joystick.setSelected(true);
jumpBtn.setSelected(false); jumpBtn.setSelected(false);
powerupBtn.setSelected(false); powerupBtn.setSelected(false);
blastBtn.setSelected(false); blastBtn.setSelected(false);
rewindBtn.setSelected(false);
} }
joystick.onChangeCb = (value, rvalue) -> { joystick.onChangeCb = (value, rvalue) -> {
@ -121,5 +141,6 @@ class TouchCtrlsEditGui extends GuiImage {
this.addChild(jumpBtn); this.addChild(jumpBtn);
this.addChild(powerupBtn); this.addChild(powerupBtn);
this.addChild(blastBtn); this.addChild(blastBtn);
this.addChild(rewindBtn);
} }
} }

14
src/touch/RewindButton.hx Normal file
View file

@ -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);
}
}

View file

@ -42,6 +42,7 @@ class TouchInput {
public var powerupButton:PowerupButton; public var powerupButton:PowerupButton;
public var blastbutton:BlastButton; public var blastbutton:BlastButton;
public var pauseButton:PauseButton; public var pauseButton:PauseButton;
public var rewindButton:RewindButton;
public var restartButton:RestartButton; public var restartButton:RestartButton;
public var currentTouchState:TouchEventState; public var currentTouchState:TouchEventState;
@ -57,6 +58,7 @@ class TouchInput {
this.powerupButton = new PowerupButton(); this.powerupButton = new PowerupButton();
this.blastbutton = new BlastButton(); this.blastbutton = new BlastButton();
this.pauseButton = new PauseButton(); this.pauseButton = new PauseButton();
this.rewindButton = new RewindButton();
this.restartButton = new RestartButton(); this.restartButton = new RestartButton();
this.currentTouchState = new TouchEventState(); this.currentTouchState = new TouchEventState();
this.previousTouchState = new TouchEventState(); this.previousTouchState = new TouchEventState();
@ -116,6 +118,8 @@ class TouchInput {
this.movementInput = new MovementInput(); this.movementInput = new MovementInput();
this.jumpButton = new JumpButton(); this.jumpButton = new JumpButton();
this.powerupButton = new PowerupButton(); this.powerupButton = new PowerupButton();
if (Settings.optionsSettings.rewindEnabled)
this.rewindButton = new RewindButton();
if (ultra) if (ultra)
this.blastbutton = new BlastButton(); this.blastbutton = new BlastButton();
this.pauseButton = new PauseButton(); this.pauseButton = new PauseButton();
@ -124,6 +128,8 @@ class TouchInput {
restartButton.add(parentGui); restartButton.add(parentGui);
jumpButton.add(parentGui); jumpButton.add(parentGui);
powerupButton.add(parentGui); powerupButton.add(parentGui);
if (Settings.optionsSettings.rewindEnabled)
rewindButton.add(parentGui);
if (ultra) if (ultra)
blastbutton.add(parentGui); blastbutton.add(parentGui);
movementInput.add(parentGui); movementInput.add(parentGui);
@ -139,6 +145,8 @@ class TouchInput {
this.movementInput.setVisible(enabled); this.movementInput.setVisible(enabled);
this.pauseButton.setVisible(enabled); this.pauseButton.setVisible(enabled);
this.restartButton.setVisible(enabled); this.restartButton.setVisible(enabled);
if (this.rewindButton != null)
this.rewindButton.setVisible(enabled);
this.cameraInput.enabled = enabled; this.cameraInput.enabled = enabled;
} }
@ -151,11 +159,15 @@ class TouchInput {
pauseButton.remove(parentGui); pauseButton.remove(parentGui);
restartButton.remove(parentGui); restartButton.remove(parentGui);
cameraInput.remove(parentGui); cameraInput.remove(parentGui);
if (this.rewindButton != null)
rewindButton.remove(parentGui);
jumpButton.dispose(); jumpButton.dispose();
powerupButton.dispose(); powerupButton.dispose();
movementInput.dispose(); movementInput.dispose();
pauseButton.dispose(); pauseButton.dispose();
restartButton.dispose(); restartButton.dispose();
cameraInput.dispose(); cameraInput.dispose();
if (this.rewindButton != null)
rewindButton.dispose();
} }
} }