add blast button for touch controls

This commit is contained in:
RandomityGuy 2022-12-11 14:51:48 +05:30
parent 19ca4fef2d
commit 39450065c1
8 changed files with 64 additions and 7 deletions

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View file

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

View file

@ -67,6 +67,8 @@ typedef TouchSettings = {
var jumpButtonSize:Float;
var powerupButtonPos:Array<Float>;
var powerupButtonSize:Float;
var blastButtonPos:Array<Float>;
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;
}

View file

@ -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<Void>;
#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;

View file

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

View file

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

15
src/touch/BlastButton.hx Normal file
View file

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

View file

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