diff --git a/src/gui/EndGameGui.hx b/src/gui/EndGameGui.hx index 67591c51..e5b5bdf3 100644 --- a/src/gui/EndGameGui.hx +++ b/src/gui/EndGameGui.hx @@ -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); diff --git a/src/gui/EnterNameDlg.hx b/src/gui/EnterNameDlg.hx index 48a6326c..d82836c1 100644 --- a/src/gui/EnterNameDlg.hx +++ b/src/gui/EnterNameDlg.hx @@ -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; diff --git a/src/gui/ExitGameDlg.hx b/src/gui/ExitGameDlg.hx index 06226e71..0488bd35 100644 --- a/src/gui/ExitGameDlg.hx +++ b/src/gui/ExitGameDlg.hx @@ -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); diff --git a/src/gui/GuiButton.hx b/src/gui/GuiButton.hx index 6a092db4..4d838aaf 100644 --- a/src/gui/GuiButton.hx +++ b/src/gui/GuiButton.hx @@ -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 = []; + public var acceleratorWasPressed = false; public function new(anim:Array) { 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); } diff --git a/src/gui/HelpCreditsGui.hx b/src/gui/HelpCreditsGui.hx index 0d8833a1..277f346f 100644 --- a/src/gui/HelpCreditsGui.hx +++ b/src/gui/HelpCreditsGui.hx @@ -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()); } diff --git a/src/gui/MainMenuGui.hx b/src/gui/MainMenuGui.hx index f45dca53..3cac97fa 100644 --- a/src/gui/MainMenuGui.hx +++ b/src/gui/MainMenuGui.hx @@ -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()); } diff --git a/src/gui/MessageBoxOkDlg.hx b/src/gui/MessageBoxOkDlg.hx index 7b50a2da..69217aaa 100644 --- a/src/gui/MessageBoxOkDlg.hx +++ b/src/gui/MessageBoxOkDlg.hx @@ -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); } diff --git a/src/gui/MessageBoxYesNoDlg.hx b/src/gui/MessageBoxYesNoDlg.hx index 7472146f..f85e98c0 100644 --- a/src/gui/MessageBoxYesNoDlg.hx +++ b/src/gui/MessageBoxYesNoDlg.hx @@ -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(); diff --git a/src/gui/PlayMissionGui.hx b/src/gui/PlayMissionGui.hx index 1bee2026..177c091f 100644 --- a/src/gui/PlayMissionGui.hx +++ b/src/gui/PlayMissionGui.hx @@ -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); } diff --git a/src/gui/ReplayNameDlg.hx b/src/gui/ReplayNameDlg.hx index 84beea3b..15ef02bb 100644 --- a/src/gui/ReplayNameDlg.hx +++ b/src/gui/ReplayNameDlg.hx @@ -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();