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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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