Merge branch 'master' of https://github.com/RandomityGuy/MBHaxe into marbleland

This commit is contained in:
RandomityGuy 2023-02-15 21:36:42 +05:30
commit 6945dd4acc
17 changed files with 221 additions and 30 deletions

View file

@ -26,6 +26,7 @@ import h3d.Camera;
import h3d.Vector; import h3d.Vector;
import hxsl.Types.Matrix; import hxsl.Types.Matrix;
import h3d.scene.Scene; import h3d.scene.Scene;
import src.Gamepad;
enum CameraMode { enum CameraMode {
FreeOrbit; FreeOrbit;
@ -160,18 +161,18 @@ class CameraController extends Object {
var lerpt = hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); var lerpt = hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600));
if (Key.isDown(Settings.controlsSettings.camForward)) { var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0)
nextCameraPitch += 0.75 * 5 * dt; - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0)
} + Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis);
if (Key.isDown(Settings.controlsSettings.camBackward)) { if (Settings.gamepadSettings.invertYAxis)
nextCameraPitch -= 0.75 * 5 * dt; cameraPitchDelta = -cameraPitchDelta;
} nextCameraPitch += 0.75 * 5 * cameraPitchDelta * dt * Settings.gamepadSettings.cameraSensitivity;
if (Key.isDown(Settings.controlsSettings.camLeft)) { var cameraYawDelta = (Key.isDown(Settings.controlsSettings.camRight) ? 1 : 0)
nextCameraYaw -= 0.75 * 5 * dt; - (Key.isDown(Settings.controlsSettings.camLeft) ? 1 : 0)
} + Gamepad.getAxis(Settings.gamepadSettings.cameraXAxis);
if (Key.isDown(Settings.controlsSettings.camRight)) { if (Settings.gamepadSettings.invertXAxis)
nextCameraYaw += 0.75 * 5 * dt; cameraYawDelta = -cameraYawDelta;
} nextCameraYaw += 0.75 * 5 * cameraYawDelta * dt * Settings.gamepadSettings.cameraSensitivity;
nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch)); nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch));

116
src/Gamepad.hx Normal file
View file

@ -0,0 +1,116 @@
package src;
import hxd.Pad;
import src.Console;
import src.Settings;
class Gamepad {
public static var gamepad:Pad = Pad.createDummy();
public static function init() {
Pad.wait(onPad);
}
public static function onPad(pad:Pad) {
Console.log("Gamepad found");
pad.axisDeadZone = Settings.gamepadSettings.axisDeadzone;
pad.onDisconnect = function() {
Console.log("Gamepad disconnected");
gamepad = Pad.createDummy();
}
gamepad = pad;
}
public static function getId(name:String) {
switch (name) {
case "start":
return gamepad.config.start;
case "ranalogY":
return gamepad.config.ranalogY;
case "ranalogX":
return gamepad.config.ranalogX;
case "ranalogClick":
return gamepad.config.ranalogClick;
case "dpadUp":
return gamepad.config.dpadUp;
case "dpadRight":
return gamepad.config.dpadRight;
case "dpadLeft":
return gamepad.config.dpadLeft;
case "dpadDown":
return gamepad.config.dpadDown;
case "back":
return gamepad.config.back;
case "analogY":
return gamepad.config.analogY;
case "analogX":
return gamepad.config.analogX;
case "analogClick":
return gamepad.config.analogClick;
case "Y":
return gamepad.config.Y;
case "X":
return gamepad.config.X;
case "RT":
return gamepad.config.RT;
case "RB":
return gamepad.config.RB;
case "LT":
return gamepad.config.LT;
case "LB":
return gamepad.config.LB;
case "B":
return gamepad.config.B;
case "A":
return gamepad.config.A;
}
return -1;
}
public static function isDown(buttons:Array<String>) {
for (button in buttons) {
var buttonId = getId(button);
if (buttonId < 0 || buttonId > gamepad.buttons.length)
continue;
if (gamepad.isDown(buttonId))
return true;
}
return false;
}
public static function isPressed(buttons:Array<String>) {
for (button in buttons) {
var buttonId = getId(button);
if (buttonId < 0 || buttonId > gamepad.buttons.length)
continue;
if (gamepad.isPressed(buttonId))
return true;
}
return false;
}
public static function isReleased(buttons:Array<String>) {
for (button in buttons) {
var buttonId = getId(button);
if (buttonId < 0 || buttonId > gamepad.buttons.length)
continue;
if (gamepad.isReleased(buttonId))
return true;
}
return false;
}
public static function getAxis(axis:String) {
switch (axis) {
case "analogX":
return gamepad.xAxis;
case "analogY":
return gamepad.yAxis;
case "ranalogX":
return gamepad.rxAxis;
case "ranalogY":
return gamepad.ryAxis;
}
return 0.0;
}
}

View file

@ -19,6 +19,7 @@ import hxd.res.DefaultFont;
import h2d.Text; import h2d.Text;
import h3d.Vector; import h3d.Vector;
import src.ProfilerUI; import src.ProfilerUI;
import src.Gamepad;
import src.Http; import src.Http;
class Main extends hxd.App { class Main extends hxd.App {
@ -71,6 +72,7 @@ class Main extends hxd.App {
Http.init(); Http.init();
haxe.MainLoop.add(() -> Http.loop()); haxe.MainLoop.add(() -> Http.loop());
Settings.init(); Settings.init();
Gamepad.init();
ResourceLoader.init(s2d, () -> { ResourceLoader.init(s2d, () -> {
AudioManager.init(); AudioManager.init();
AudioManager.playShell(); AudioManager.playShell();

View file

@ -61,6 +61,7 @@ import collision.CCDCollision.TraceInfo;
import src.ResourceLoaderWorker; import src.ResourceLoaderWorker;
import src.InteriorObject; import src.InteriorObject;
import src.Console; import src.Console;
import src.Gamepad;
class Move { class Move {
public var d:Vector; public var d:Vector;
@ -1695,6 +1696,8 @@ class Marble extends GameObject {
var move = new Move(); var move = new Move();
move.d = new Vector(); move.d = new Vector();
if (this.controllable && this.mode != Finish && !MarbleGame.instance.paused && !this.level.isWatching) { if (this.controllable && this.mode != Finish && !MarbleGame.instance.paused && !this.level.isWatching) {
move.d.x = Gamepad.getAxis(Settings.gamepadSettings.moveYAxis);
move.d.y = -Gamepad.getAxis(Settings.gamepadSettings.moveXAxis);
if (Key.isDown(Settings.controlsSettings.forward)) { if (Key.isDown(Settings.controlsSettings.forward)) {
move.d.x -= 1; move.d.x -= 1;
} }
@ -1707,10 +1710,14 @@ class Marble extends GameObject {
if (Key.isDown(Settings.controlsSettings.right)) { if (Key.isDown(Settings.controlsSettings.right)) {
move.d.y -= 1; move.d.y -= 1;
} }
if (Key.isDown(Settings.controlsSettings.jump) || MarbleGame.instance.touchInput.jumpButton.pressed) { if (Key.isDown(Settings.controlsSettings.jump)
|| MarbleGame.instance.touchInput.jumpButton.pressed
|| Gamepad.isDown(Settings.gamepadSettings.jump)) {
move.jump = true; move.jump = true;
} }
if (Util.isTouchDevice() ? MarbleGame.instance.touchInput.powerupButton.pressed : Key.isDown(Settings.controlsSettings.powerup)) { if (Key.isDown(Settings.controlsSettings.powerup)
|| (Util.isTouchDevice() && MarbleGame.instance.touchInput.powerupButton.pressed)
|| Gamepad.isDown(Settings.gamepadSettings.powerup)) {
move.powerup = true; move.powerup = true;
} }
if (MarbleGame.instance.touchInput.movementInput.pressed) { if (MarbleGame.instance.touchInput.movementInput.pressed) {

View file

@ -25,6 +25,7 @@ import src.ProfilerUI;
import src.Settings; import src.Settings;
import src.Console; import src.Console;
import src.Debug; import src.Debug;
import src.Gamepad;
@:publicFields @:publicFields
class MarbleGame { class MarbleGame {
@ -183,17 +184,10 @@ class MarbleGame {
if (!paused) { if (!paused) {
world.update(dt * Debug.timeScale); world.update(dt * Debug.timeScale);
} }
if (Key.isPressed(Key.ESCAPE) && world.finishTime == null && world._ready) { if (((Key.isPressed(Key.ESCAPE) #if js && paused #end) || Gamepad.isPressed(["start"]))
#if hl && world.finishTime == null && world._ready) {
paused = !paused; paused = !paused;
handlePauseGame(); handlePauseGame();
#end
#if js
if (paused) {
paused = false;
}
handlePauseGame();
#end
} }
} }
if (canvas != null) { if (canvas != null) {

View file

@ -97,6 +97,7 @@ import src.ProfilerUI;
import src.ResourceLoaderWorker; import src.ResourceLoaderWorker;
import haxe.io.Path; import haxe.io.Path;
import src.Console; import src.Console;
import src.Gamepad;
class MarbleWorld extends Scheduler { class MarbleWorld extends Scheduler {
public var collisionWorld:CollisionWorld; public var collisionWorld:CollisionWorld;
@ -998,12 +999,15 @@ class MarbleWorld extends Scheduler {
ProfilerUI.measure("updateTimer"); ProfilerUI.measure("updateTimer");
this.updateTimer(dt); this.updateTimer(dt);
if ((Key.isPressed(Settings.controlsSettings.respawn)) && this.finishTime == null) { if ((Key.isPressed(Settings.controlsSettings.respawn) || Gamepad.isPressed(Settings.gamepadSettings.respawn))
&& this.finishTime == null) {
performRestart(); performRestart();
return; return;
} }
if ((Key.isDown(Settings.controlsSettings.respawn) || MarbleGame.instance.touchInput.restartButton.pressed) if ((Key.isDown(Settings.controlsSettings.respawn)
|| MarbleGame.instance.touchInput.restartButton.pressed
|| Gamepad.isDown(Settings.gamepadSettings.respawn))
&& !this.isWatching && !this.isWatching
&& this.finishTime == null) { && this.finishTime == null) {
if (timeState.timeSinceLoad - this.respawnPressedTime > 1.5) { if (timeState.timeSinceLoad - this.respawnPressedTime > 1.5) {
@ -1017,6 +1021,7 @@ class MarbleWorld extends Scheduler {
if (Key.isPressed(Settings.controlsSettings.blast) if (Key.isPressed(Settings.controlsSettings.blast)
|| (MarbleGame.instance.touchInput.blastbutton.pressed) || (MarbleGame.instance.touchInput.blastbutton.pressed)
|| Gamepad.isPressed(Settings.gamepadSettings.blast)
&& !this.isWatching && !this.isWatching
&& this.game == "ultra") { && this.game == "ultra") {
this.marble.useBlast(); this.marble.useBlast();
@ -1060,7 +1065,10 @@ class MarbleWorld extends Scheduler {
ProfilerUI.measure("updateAudio"); ProfilerUI.measure("updateAudio");
AudioManager.update(this.scene); AudioManager.update(this.scene);
if (this.outOfBounds && this.finishTime == null && Key.isDown(Settings.controlsSettings.powerup) && !this.isWatching) { if (this.outOfBounds
&& this.finishTime == null
&& (Key.isDown(Settings.controlsSettings.powerup) || Gamepad.isDown(Settings.gamepadSettings.powerup))
&& !this.isWatching) {
this.restart(); this.restart();
return; return;
} }
@ -1510,7 +1518,6 @@ class MarbleWorld extends Scheduler {
}, (sender) -> { }, (sender) -> {
var restartGameCode = () -> { var restartGameCode = () -> {
MarbleGame.canvas.popDialog(egg); MarbleGame.canvas.popDialog(egg);
this.setCursorLock(true);
this.restart(true); this.restart(true);
#if js #if js
pointercontainer.hidden = true; pointercontainer.hidden = true;

View file

@ -75,6 +75,21 @@ typedef TouchSettings = {
var buttonJoystickMultiplier:Float; var buttonJoystickMultiplier:Float;
} }
typedef GamepadSettings = {
var moveXAxis:String;
var moveYAxis:String;
var cameraXAxis:String;
var cameraYAxis:String;
var jump:Array<String>;
var powerup:Array<String>;
var cameraSensitivity:Float;
var invertXAxis:Bool;
var invertYAxis:Bool;
var axisDeadzone:Float;
var respawn:Array<String>;
var blast:Array<String>;
}
typedef PlayStatistics = { typedef PlayStatistics = {
var oobs:Int; var oobs:Int;
var respawns:Int; var respawns:Int;
@ -141,6 +156,21 @@ class Settings {
buttonJoystickMultiplier: 2.5 buttonJoystickMultiplier: 2.5
} }
public static var gamepadSettings:GamepadSettings = {
moveXAxis: "analogX",
moveYAxis: "analogY",
cameraXAxis: "ranalogX",
cameraYAxis: "ranalogY",
jump: ["A", "LT"],
powerup: ["B", "RT"],
cameraSensitivity: 1.0,
invertXAxis: false,
invertYAxis: false,
axisDeadzone: 0.15,
respawn: ["back"],
blast: ["X", "LB", "RB"]
}
public static var playStatistics:PlayStatistics = { public static var playStatistics:PlayStatistics = {
oobs: 0, oobs: 0,
respawns: 0, respawns: 0,
@ -200,6 +230,7 @@ class Settings {
options: optionsSettings, options: optionsSettings,
controls: controlsSettings, controls: controlsSettings,
touch: touchSettings, touch: touchSettings,
gamepad: gamepadSettings,
stats: playStatistics, stats: playStatistics,
highscoreName: highscoreName, highscoreName: highscoreName,
marbleIndex: optionsSettings.marbleIndex, marbleIndex: optionsSettings.marbleIndex,
@ -310,6 +341,9 @@ class Settings {
touchSettings.blastButtonPos = [300, 240]; touchSettings.blastButtonPos = [300, 240];
touchSettings.blastButtonSize = 60; touchSettings.blastButtonSize = 60;
} }
if (json.gamepad != null) {
gamepadSettings = json.gamepad;
}
if (json.stats != null) { if (json.stats != null) {
playStatistics = json.stats; playStatistics = json.stats;
} }

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,11 +72,20 @@ class GuiButton extends GuiAnim {
} }
} }
} }
if (!disabled && accelerator != 0 && hxd.Key.isReleased(accelerator)) { if (!disabled) {
if (this.pressedAction != null) { if (acceleratorWasPressed &&
this.pressedAction(new GuiEvent(this)); (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); 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

@ -180,6 +180,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());
}; };
@ -206,6 +207,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);
} }
@ -214,6 +216,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;
@ -227,6 +230,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();