From 1a92d0a31a0d6a1b2d020faa67cda63c7426878f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Wed, 18 Mar 2015 17:01:56 +0100 Subject: [PATCH] #19 Improved menu move behavior --- core/src/cz/nic/tablexia/Tablexia.java | 2 +- core/src/cz/nic/tablexia/menu/MainMenu.java | 92 +++++++++++---------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java index f8a58a9c1..c46f08ef1 100644 --- a/core/src/cz/nic/tablexia/Tablexia.java +++ b/core/src/cz/nic/tablexia/Tablexia.java @@ -128,11 +128,11 @@ public class Tablexia extends TablexiaApplication { @Override public void pause() { - super.pause(); if (mainMenuContainer != null) { // don't use menu open animation for android pause event (animation is run after resume on android) mainMenuContainer.openMainMenu(!Gdx.app.getType().equals(Application.ApplicationType.Android)); } + super.pause(); } @Override diff --git a/core/src/cz/nic/tablexia/menu/MainMenu.java b/core/src/cz/nic/tablexia/menu/MainMenu.java index 2308ad9d2..9f5b5234b 100644 --- a/core/src/cz/nic/tablexia/menu/MainMenu.java +++ b/core/src/cz/nic/tablexia/menu/MainMenu.java @@ -6,9 +6,9 @@ import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Interpolation.PowOut; +import com.badlogic.gdx.scenes.scene2d.Action; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.actions.Actions; -import com.badlogic.gdx.scenes.scene2d.actions.MoveToAction; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Stack; import com.badlogic.gdx.scenes.scene2d.ui.Table; @@ -47,7 +47,8 @@ public class MainMenu extends Stack { private float menuClosePositionX; private int menuOpenPositionX; private int menuPositionY; - private MoveToAction moveAction; + private Action moveAction; + private boolean isMenuClose; private boolean isMenuOpen; private boolean isClosing; private boolean isOpening; @@ -134,13 +135,16 @@ public class MainMenu extends Stack { private void prepareMenuPositions() { isMenuOpen = false; + isMenuClose = false; + isOpening = false; + isClosing = false; menuClosePositionX = -(getWidth() - (getWidth() * MENU_CONTROLLER_SIZE_RATIO)); menuOpenPositionX = 0; menuPositionY = 0; } private void toggleMenu() { - if (isMenuOpen) { + if (isOpening || isMenuOpen) { closeMenu(true); } else { openMenu(true); @@ -148,75 +152,77 @@ public class MainMenu extends Stack { } public void closeMenu(boolean animated) { - isMenuOpen = false; - if (animated) { - if (!isClosing) { - isClosing = true; - isOpening = false; - moveAction = Actions.moveTo(menuClosePositionX, menuPositionY, MENU_MOVE_DURATION, MENU_MOVE_INTERPOLATION); - addAction(Actions.sequence( - moveAction, + if (!isMenuClose && !isClosing) { + removeAction(moveAction); + isMenuOpen = false; + isOpening = false; + isClosing = true; + if (animated) { + moveAction = Actions.sequence( + Actions.moveTo(menuClosePositionX, menuPositionY, MENU_MOVE_DURATION, MENU_MOVE_INTERPOLATION), Actions.run(new Runnable() { @Override public void run() { - if (!isMenuOpen) { - moveAction = null; - isClosing = false; - sendMenuPositionChangedEvent(); - } + moveAction = null; + isClosing = false; + isMenuClose = true; + sendMenuPositionChangedEvent(); } - }))); + })); + addAction(moveAction); ApplicationSoundManager.getInstance().getSound(ApplicationSoundManager.MAINMENU_CLOSE).play(); + } else { + moveAction = null; + isClosing = false; + isMenuClose = true; + setPosition(menuClosePositionX, menuPositionY); + sendMenuPositionChangedEvent(); } - } else { - setPosition(menuClosePositionX, menuPositionY); - sendMenuPositionChangedEvent(); } } public void openMenu(boolean animated) { - isMenuOpen = true; - sendMenuPositionChangedEvent(); - if (animated) { - if (!isOpening) { - isOpening = true; - isClosing = false; - moveAction = Actions.moveTo(menuOpenPositionX, menuPositionY, MENU_MOVE_DURATION, MENU_MOVE_INTERPOLATION); - addAction(Actions.sequence(moveAction, + if (!isMenuOpen && !isOpening) { + removeAction(moveAction); + isMenuClose = false; + isClosing = false; + isOpening = true; + sendMenuPositionChangedEvent(); + if (animated) { + moveAction = Actions.sequence( + Actions.moveTo(menuOpenPositionX, menuPositionY, MENU_MOVE_DURATION, MENU_MOVE_INTERPOLATION), Actions.run(new Runnable() { @Override public void run() { - if (isMenuOpen) { - moveAction = null; - isOpening = false; - } + moveAction = null; + isMenuOpen = true; + isOpening = false; } - }))); + })); + addAction(moveAction); ApplicationSoundManager.getInstance().getSound(ApplicationSoundManager.MAINMENU_OPEN).play(); + } else { + moveAction = null; + isMenuOpen = true; + isOpening = false; + setPosition(menuOpenPositionX, menuPositionY); } - } else { - setPosition(menuOpenPositionX, menuPositionY); } } - -//////////////////////////// POSITION CHANGED EVENT + //////////////////////////// POSITION CHANGED EVENT private void sendMenuPositionChangedEvent() { - ApplicationBus.getInstance().post(new MainMenuPositionChangedEvent(isMenuOpen)).asynchronously(); + ApplicationBus.getInstance().post(new MainMenuPositionChangedEvent(!isMenuClose)).asynchronously(); } //////////////////////////// MENU MOVE PROGRESS public float getMenuOpenPercentage() { - if (moveAction != null) { - return 1 - Math.abs(getX() / menuClosePositionX); - } else { - return isMenuOpen ? 1 : 0; - } + return 1 - Math.abs(getX() / menuClosePositionX); } } -- GitLab