From 85a561e1527a8eb444f0e684d6be9fa7522dad4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Thu, 29 Oct 2015 10:05:34 +0100 Subject: [PATCH] #58 New user item in user menu, refactor of menu control --- .../tablexia/bus/event/MenuControlEvent.java | 12 ++++++-- .../tablexia/game/AbstractTablexiaGame.java | 5 ++-- .../cz/nic/tablexia/menu/MenuController.java | 6 ++-- .../menu/main/user/UserSelectBox.java | 11 +++++++- .../cz/nic/tablexia/menu/user/UserMenu.java | 28 ++++++++++++++++--- .../user/UserMenuNewSelectBoxItemGroup.java | 18 ++++-------- core/src/cz/nic/tablexia/model/User.java | 2 +- 7 files changed, 54 insertions(+), 28 deletions(-) diff --git a/core/src/cz/nic/tablexia/bus/event/MenuControlEvent.java b/core/src/cz/nic/tablexia/bus/event/MenuControlEvent.java index 866c3dd82..f31fcea9c 100644 --- a/core/src/cz/nic/tablexia/bus/event/MenuControlEvent.java +++ b/core/src/cz/nic/tablexia/bus/event/MenuControlEvent.java @@ -5,14 +5,20 @@ import cz.nic.tablexia.menu.AbstractMenu; public class MenuControlEvent implements ApplicationBus.ApplicationEvent { - private AbstractMenu.MenuAction menuAction; - private boolean animated; + private Class<? extends AbstractMenu> menu; + private AbstractMenu.MenuAction menuAction; + private boolean animated; - public MenuControlEvent(AbstractMenu.MenuAction menuAction, boolean animated) { + public MenuControlEvent(Class<? extends AbstractMenu> menu, AbstractMenu.MenuAction menuAction, boolean animated) { + this.menu = menu; this.menuAction = menuAction; this.animated = animated; } + public Class<? extends AbstractMenu> getMenu() { + return menu; + } + public AbstractMenu.MenuAction getMenuAction() { return menuAction; } diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java index 17add5da3..6d7d5319d 100644 --- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java +++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java @@ -37,6 +37,7 @@ import cz.nic.tablexia.game.difficulty.GameDifficulty; import cz.nic.tablexia.loader.application.ApplicationFontManager; import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.menu.AbstractMenu; +import cz.nic.tablexia.menu.main.MainMenu; import cz.nic.tablexia.model.game.Game; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.gamemenu.GameMenuScreen; @@ -194,7 +195,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> gamePhase = GamePhase.STARTED; // if game is restored -> open menu and pause game if (screenState.size() > 0) { - ApplicationBus.getInstance().publishAsync(new MenuControlEvent(AbstractMenu.MenuAction.OPEN, true)); + ApplicationBus.getInstance().publishAsync(new MenuControlEvent(MainMenu.class, AbstractMenu.MenuAction.OPEN, true)); } } @@ -225,7 +226,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> @Override protected final void screenPaused(Map<String, String> screenState) { if (gamePhase == GamePhase.STARTED) { - ApplicationBus.getInstance().post(new MenuControlEvent(AbstractMenu.MenuAction.OPEN, true)).asynchronously(); + ApplicationBus.getInstance().post(new MenuControlEvent(MainMenu.class, AbstractMenu.MenuAction.OPEN, true)).asynchronously(); performGamePaused(screenState); screenState.put(GAME_STATE_GAME_ID, String.valueOf(game.getId())); Log.info(getClass(), "[DB] Stored game object to screen state: " + game); diff --git a/core/src/cz/nic/tablexia/menu/MenuController.java b/core/src/cz/nic/tablexia/menu/MenuController.java index d2fb85858..4528b02a8 100644 --- a/core/src/cz/nic/tablexia/menu/MenuController.java +++ b/core/src/cz/nic/tablexia/menu/MenuController.java @@ -142,7 +142,7 @@ public class MenuController extends Group implements Disposable { @Handler public void handleMenuControlEvent(MenuControlEvent menuControlEvent) { - doMenuAction(MainMenu.class, menuControlEvent.getMenuAction(), menuControlEvent.isAnimated(), false); + doMenuAction(menuControlEvent.getMenu(), menuControlEvent.getMenuAction(), menuControlEvent.isAnimated(), false); } @@ -156,9 +156,7 @@ public class MenuController extends Group implements Disposable { @Handler public void handleSelectedUserEvent(TablexiaSettings.SelectedUserEvent selectedUserEvent) { - if (selectedUserEvent.isUserSelected()) { - doMenuAction(UserMenu.class, AbstractMenu.MenuAction.HIDE, true, true); - } else { + if (!selectedUserEvent.isUserSelected()) { doMenuAction(MainMenu.class, AbstractMenu.MenuAction.HIDE, true, true); } } diff --git a/core/src/cz/nic/tablexia/menu/main/user/UserSelectBox.java b/core/src/cz/nic/tablexia/menu/main/user/UserSelectBox.java index 1d420c069..422edd306 100644 --- a/core/src/cz/nic/tablexia/menu/main/user/UserSelectBox.java +++ b/core/src/cz/nic/tablexia/menu/main/user/UserSelectBox.java @@ -11,12 +11,15 @@ import net.engio.mbassy.listener.Handler; import java.util.ArrayList; import java.util.List; +import cz.nic.tablexia.Tablexia; +import cz.nic.tablexia.TablexiaApplication; import cz.nic.tablexia.TablexiaSettings; import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.loader.application.ApplicationAtlasManager; import cz.nic.tablexia.menu.user.UserMenuNewSelectBoxItemGroup; import cz.nic.tablexia.menu.user.UserMenuSelectBoxItemGroup; import cz.nic.tablexia.model.User; +import cz.nic.tablexia.screen.createuser.PanoramaScreen; import cz.nic.tablexia.util.ui.AbstractTablexiaSelectBox; /** @@ -74,7 +77,13 @@ public class UserSelectBox extends AbstractTablexiaSelectBox<UserSelectBox.UserS selectedUserItem = userItem; } } - userItems.add(new UserMenuNewSelectBoxItemGroup()); + userItems.add(new UserMenuNewSelectBoxItemGroup() { + @Override + public void performAction() { + TablexiaSettings.getInstance().setSelectedUser(null); + ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(PanoramaScreen.class, TablexiaApplication.ScreenTransaction.FADE)).asynchronously(); + } + }); setItems(userItems.toArray(new UserSelectBoxItem[]{})); if (selectedUserItem != null) { setSelected(selectedUserItem); diff --git a/core/src/cz/nic/tablexia/menu/user/UserMenu.java b/core/src/cz/nic/tablexia/menu/user/UserMenu.java index 53227bb94..c2ea07d37 100644 --- a/core/src/cz/nic/tablexia/menu/user/UserMenu.java +++ b/core/src/cz/nic/tablexia/menu/user/UserMenu.java @@ -6,14 +6,17 @@ import com.badlogic.gdx.scenes.scene2d.ui.Container; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; -import com.badlogic.gdx.utils.Align; import net.engio.mbassy.listener.Handler; +import cz.nic.tablexia.Tablexia; +import cz.nic.tablexia.TablexiaApplication; import cz.nic.tablexia.bus.ApplicationBus; +import cz.nic.tablexia.bus.event.MenuControlEvent; import cz.nic.tablexia.menu.AbstractMenu; import cz.nic.tablexia.menu.IMenuItem; import cz.nic.tablexia.model.User; +import cz.nic.tablexia.screen.createuser.PanoramaScreen; /** * UserMenu container @@ -22,8 +25,9 @@ import cz.nic.tablexia.model.User; */ public class UserMenu extends AbstractMenu { - private static final MenuControlType MENU_CONTROL_TYPE = MenuControlType.AUTOMATIC; - private static final boolean MENU_SCREEN_PAUSE = false; + private static final MenuControlType MENU_CONTROL_TYPE = MenuControlType.AUTOMATIC; + private static final boolean MENU_SCREEN_PAUSE = false; + private static final int USER_ITEM_HEIGHT = 80; public UserMenu(Float width, Float height) { super(width, height); @@ -48,9 +52,10 @@ public class UserMenu extends AbstractMenu { Container<ScrollPane> container = new Container<ScrollPane>(scrollPane); container.setFillParent(true); + final float userMenuItemWidth = getBackground().getWidth(); for (final IMenuItem menuItem : User.selectActiveUsers()) { Group userItemGroup = getGroupForMenuItem(menuItem); - userItemGroup.setSize(getBackground().getWidth(), 100); + userItemGroup.setSize(userMenuItemWidth, USER_ITEM_HEIGHT); userItemGroup.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { @@ -60,6 +65,21 @@ public class UserMenu extends AbstractMenu { }); menuItemsLayout.addActor(userItemGroup); } + final UserMenuNewSelectBoxItemGroup userMenuNewSelectBoxItemGroup = new UserMenuNewSelectBoxItemGroup() { + @Override + public void performAction() { + ApplicationBus.getInstance().post(new MenuControlEvent(UserMenu.class, MenuAction.HIDE, true)).asynchronously(); + ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(PanoramaScreen.class, TablexiaApplication.ScreenTransaction.MOVE_UP)).asynchronously(); + } + }; + userMenuNewSelectBoxItemGroup.setSize(userMenuItemWidth, USER_ITEM_HEIGHT); + userMenuNewSelectBoxItemGroup.addListener(new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + userMenuNewSelectBoxItemGroup.performAction(); + } + }); + menuItemsLayout.addActor(userMenuNewSelectBoxItemGroup); layoutContainer.setActor(container); } diff --git a/core/src/cz/nic/tablexia/menu/user/UserMenuNewSelectBoxItemGroup.java b/core/src/cz/nic/tablexia/menu/user/UserMenuNewSelectBoxItemGroup.java index 120d621ee..5c396afb2 100644 --- a/core/src/cz/nic/tablexia/menu/user/UserMenuNewSelectBoxItemGroup.java +++ b/core/src/cz/nic/tablexia/menu/user/UserMenuNewSelectBoxItemGroup.java @@ -8,28 +8,23 @@ import com.badlogic.gdx.graphics.g2d.NinePatch; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Align; -import cz.nic.tablexia.Tablexia; -import cz.nic.tablexia.TablexiaApplication; -import cz.nic.tablexia.TablexiaSettings; -import cz.nic.tablexia.bus.ApplicationBus; import cz.nic.tablexia.loader.application.ApplicationAtlasManager; import cz.nic.tablexia.loader.application.ApplicationFontManager; import cz.nic.tablexia.loader.application.ApplicationTextManager; import cz.nic.tablexia.menu.main.user.UserSelectBox; -import cz.nic.tablexia.screen.createuser.PanoramaScreen; /** * Created by Matyáš Latner. */ -public class UserMenuNewSelectBoxItemGroup extends Actor implements UserSelectBox.UserSelectBoxItem { +public abstract class UserMenuNewSelectBoxItemGroup extends Actor implements UserSelectBox.UserSelectBoxItem { private static final Color NEWUSER_TEXT_COLOR = new Color(0.098f, 0.086f, 0.075f, 1f); private static final int NEWUSER_TEXT_ALIGN = Align.center; - private final NinePatch background; - private final BitmapFont font; + private final NinePatch background; + private final BitmapFont font; private final String text; - private final GlyphLayout glyphLayout; + private final GlyphLayout glyphLayout; public UserMenuNewSelectBoxItemGroup() { background = ApplicationAtlasManager.getInstance().getPatch(ApplicationAtlasManager.USERMENU_MENUBUTTON_BACKGROUND); @@ -38,10 +33,7 @@ public class UserMenuNewSelectBoxItemGroup extends Actor implements UserSelectBo glyphLayout = new GlyphLayout(); } - public void performAction() { - TablexiaSettings.getInstance().setSelectedUser(null); - ApplicationBus.getInstance().post(new Tablexia.ChangeScreenEvent(PanoramaScreen.class, TablexiaApplication.ScreenTransaction.FADE)).asynchronously(); - } + public abstract void performAction(); @Override public void draw(Batch batch, float parentAlpha) { diff --git a/core/src/cz/nic/tablexia/model/User.java b/core/src/cz/nic/tablexia/model/User.java index 8751e88c1..4cc28cb88 100644 --- a/core/src/cz/nic/tablexia/model/User.java +++ b/core/src/cz/nic/tablexia/model/User.java @@ -139,7 +139,7 @@ public class User implements IMenuItem { @Override public AbstractMenu.MenuAction getMenuAction() { - return null; + return AbstractMenu.MenuAction.HIDE; } @Override -- GitLab