Add partial menu navigatability

This commit is contained in:
Terry Hearst 2023-02-11 03:21:55 -05:00
parent 98662dfd3a
commit dc9ee0a60c
10 changed files with 33 additions and 3 deletions

View file

@ -45,6 +45,7 @@ class EndGameGui extends GuiControl {
continueButton.position = new Vector(460, 307);
continueButton.extent = new Vector(104, 54);
continueButton.accelerator = hxd.Key.ENTER;
continueButton.gamepadAccelerator = ["A"];
continueButton.pressedAction = (e) -> continueFunc(continueButton);
var restartButton = new GuiButton(loadButtonImages("data/ui/endgame/replay"));
@ -52,6 +53,7 @@ class EndGameGui extends GuiControl {
restartButton.vertSizing = Bottom;
restartButton.position = new Vector(460, 363);
restartButton.extent = new Vector(104, 54);
restartButton.gamepadAccelerator = ["B"];
restartButton.pressedAction = (e) -> restartFunc(restartButton);
var nextLevel = new GuiControl();
@ -77,6 +79,7 @@ class EndGameGui extends GuiControl {
nextLevelBtn.vertSizing = Height;
nextLevelBtn.position = new Vector(0, 0);
nextLevelBtn.extent = new Vector(130, 110);
nextLevelBtn.gamepadAccelerator = ["X"];
nextLevelBtn.pressedAction = (e) -> nextLevelFunc(nextLevelBtn);
nextLevel.addChild(nextLevelBtn);

View file

@ -70,6 +70,7 @@ class EnterNameDlg extends GuiControl {
okbutton.position = new Vector(151, 184);
okbutton.extent = new Vector(110, 55);
okbutton.accelerator = hxd.Key.ENTER;
okbutton.gamepadAccelerator = ["A"];
okbutton.pressedAction = (sender) -> {
MarbleGame.canvas.popDialog(this);
Settings.highscoreName = enterNameEdit.text.text;

View file

@ -41,6 +41,7 @@ class ExitGameDlg extends GuiControl {
yesButton.vertSizing = Top;
yesButton.horizSizing = Right;
yesButton.accelerator = hxd.Key.ENTER;
yesButton.gamepadAccelerator = ["A"];
yesButton.pressedAction = (sender) -> yesFunc(yesButton);
var noButton = new GuiButton(loadButtonImages("data/ui/common/no"));
@ -48,6 +49,7 @@ class ExitGameDlg extends GuiControl {
noButton.extent = new Vector(86, 40);
noButton.vertSizing = Top;
noButton.horizSizing = Right;
noButton.gamepadAccelerator = ["B"];
noButton.pressedAction = (sender) -> noFunc(noButton);
var restartButton = new GuiButton(loadButtonImages("data/ui/common/restart"));
@ -55,6 +57,7 @@ class ExitGameDlg extends GuiControl {
restartButton.extent = new Vector(86, 40);
restartButton.vertSizing = Top;
restartButton.horizSizing = Right;
restartButton.gamepadAccelerator = ["X"];
restartButton.pressedAction = (sender) -> restartFunc(restartButton);
dialogImg.addChild(overlay);

View file

@ -6,6 +6,7 @@ import gui.GuiControl.MouseState;
import hxd.Window;
import h2d.Tile;
import src.ResourceLoader;
import src.Gamepad;
enum ButtonType {
Normal;
@ -28,6 +29,8 @@ class GuiButton extends GuiAnim {
public var buttonSounds:Bool = true;
public var accelerator:Int = 0;
public var gamepadAccelerator:Array<String> = [];
public var acceleratorWasPressed = false;
public function new(anim:Array<Tile>) {
super(anim);
@ -69,11 +72,20 @@ class GuiButton extends GuiAnim {
}
}
}
if (!disabled && accelerator != 0 && hxd.Key.isReleased(accelerator)) {
if (this.pressedAction != null) {
this.pressedAction(new GuiEvent(this));
if (!disabled) {
if (acceleratorWasPressed &&
(accelerator != 0 && hxd.Key.isReleased(accelerator)) || Gamepad.isReleased(gamepadAccelerator)) {
if (this.pressedAction != null) {
this.pressedAction(new GuiEvent(this));
}
} else if ((accelerator != 0 && hxd.Key.isPressed(accelerator)) || Gamepad.isPressed(gamepadAccelerator)) {
acceleratorWasPressed = true;
}
}
if (acceleratorWasPressed) {
if ((accelerator != 0 && hxd.Key.isReleased(accelerator)) || Gamepad.isReleased(gamepadAccelerator))
acceleratorWasPressed = false;
}
super.update(dt, mouseState);
}

View file

@ -48,6 +48,7 @@ class HelpCreditsGui extends GuiImage {
homeButton.position = new Vector(274, 385);
homeButton.extent = new Vector(94, 46);
homeButton.accelerator = hxd.Key.ESCAPE;
homeButton.gamepadAccelerator = ["B"];
homeButton.pressedAction = (sender) -> {
MarbleGame.canvas.setContent(new MainMenuGui());
}

View file

@ -62,6 +62,7 @@ class MainMenuGui extends GuiImage {
var playButton = new GuiButton(loadButtonImages("data/ui/menu/play"));
playButton.position = new Vector(-5, -2);
playButton.extent = new Vector(247, 164);
playButton.gamepadAccelerator = ["A"];
playButton.pressedAction = (sender) -> {
cast(this.parent, Canvas).setContent(new PlayMissionGui());
}

View file

@ -47,6 +47,7 @@ class MessageBoxOkDlg extends GuiControl {
okButton.extent = new Vector(88, 41);
okButton.vertSizing = Top;
okButton.accelerator = hxd.Key.ENTER;
okButton.gamepadAccelerator = ["A"];
okButton.pressedAction = (sender) -> {
MarbleGame.canvas.popDialog(this);
}

View file

@ -47,6 +47,7 @@ class MessageBoxYesNoDlg extends GuiControl {
yesButton.extent = new Vector(82, 35);
yesButton.vertSizing = Top;
yesButton.accelerator = hxd.Key.ENTER;
yesButton.gamepadAccelerator = ["A"];
yesButton.pressedAction = (sender) -> {
MarbleGame.canvas.popDialog(this);
yesFunc();
@ -58,6 +59,7 @@ class MessageBoxYesNoDlg extends GuiControl {
noButton.extent = new Vector(75, 35);
noButton.vertSizing = Top;
noButton.accelerator = hxd.Key.ESCAPE;
noButton.gamepadAccelerator = ["B"];
noButton.pressedAction = (sender) -> {
MarbleGame.canvas.popDialog(this);
noFunc();

View file

@ -176,6 +176,7 @@ class PlayMissionGui extends GuiImage {
pmMenuButton.position = new Vector(119, 325);
pmMenuButton.extent = new Vector(92, 43);
pmMenuButton.accelerator = hxd.Key.ESCAPE;
pmMenuButton.gamepadAccelerator = ["B"];
pmMenuButton.pressedAction = (sender) -> {
cast(this.parent, Canvas).setContent(new MainMenuGui());
};
@ -202,6 +203,7 @@ class PlayMissionGui extends GuiImage {
var pmPrev = new GuiButton(loadButtonImages("data/ui/play/prev"));
pmPrev.position = new Vector(436, 325);
pmPrev.extent = new Vector(72, 43);
pmPrev.gamepadAccelerator = ["dpadLeft"];
pmPrev.pressedAction = (sender) -> {
setSelectedFunc(currentSelection - 1);
}
@ -210,6 +212,7 @@ class PlayMissionGui extends GuiImage {
var pmPlay = new GuiButton(loadButtonImages("data/ui/play/play"));
pmPlay.position = new Vector(510, 325);
pmPlay.extent = new Vector(92, 43);
pmPlay.gamepadAccelerator = ["A"];
pmPlay.pressedAction = (sender) -> {
// Wacky hacks
currentList[currentSelection].index = currentSelection;
@ -223,6 +226,7 @@ class PlayMissionGui extends GuiImage {
var pmNext = new GuiButton(loadButtonImages("data/ui/play/next"));
pmNext.position = new Vector(604, 325);
pmNext.extent = new Vector(72, 43);
pmNext.gamepadAccelerator = ["dpadRight"];
pmNext.pressedAction = (sender) -> {
setSelectedFunc(currentSelection + 1);
}

View file

@ -71,6 +71,7 @@ class ReplayNameDlg extends GuiControl {
yesButton.extent = new Vector(95, 45);
yesButton.vertSizing = Top;
yesButton.accelerator = hxd.Key.ENTER;
yesButton.gamepadAccelerator = ["A"];
yesButton.pressedAction = (sender) -> {
if (StringTools.trim(textInput.text.text) != "") {
MarbleGame.instance.recordingName = textInput.text.text;
@ -86,6 +87,7 @@ class ReplayNameDlg extends GuiControl {
noButton.extent = new Vector(88, 41);
noButton.vertSizing = Top;
noButton.accelerator = hxd.Key.ESCAPE;
noButton.gamepadAccelerator = ["B"];
noButton.pressedAction = (sender) -> {
MarbleGame.canvas.popDialog(this);
callback();