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

View file

@ -75,6 +75,8 @@ typedef TouchSettings = {
var powerupButtonSize:Float;
var blastButtonPos:Array<Float>;
var blastButtonSize:Float;
var rewindButtonPos:Array<Float>;
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
}
@ -354,6 +358,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;
}

View file

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

View file

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

View file

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

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