From 81bd83a6e69ee068774c5a0ab41e0b0fac148044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz> Date: Wed, 14 Oct 2015 08:53:57 +0200 Subject: [PATCH] #58 Arrow icon change to restart icon for active games --- .../tablexia/game/AbstractTablexiaGame.java | 2 +- .../cz/nic/tablexia/game/GameDefinition.java | 4 ++ .../in_the_darkness/InTheDarknessGame.java | 8 +--- .../tablexia/loader/TablexiaAtlasManager.java | 34 ++++++++----- .../application/ApplicationAtlasManager.java | 4 ++ .../cz/nic/tablexia/menu/main/MainMenu.java | 48 ++++++++++++++++--- .../menu/main/MainMenuDefinition.java | 4 +- .../screen/gamemenu/pages/GameMenuPage.java | 6 ++- 8 files changed, 81 insertions(+), 29 deletions(-) diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java index 544e8284d..959993784 100644 --- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java +++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java @@ -175,7 +175,7 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> gamePhase = GamePhase.STARTED; // if game is restored -> open menu and pause game - if (screenState != null) { + if (screenState.size() > 0) { ApplicationBus.getInstance().publishAsync(new MenuControlEvent(true, true)); } } diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java index 64817c6b6..7156751c1 100644 --- a/core/src/cz/nic/tablexia/game/GameDefinition.java +++ b/core/src/cz/nic/tablexia/game/GameDefinition.java @@ -71,6 +71,10 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem { return ApplicationTextManager.getInstance().getResult().get(descriptionResource); } + public Class<? extends AbstractTablexiaGame<?>> getScreenClass() { + return screenClass; + } + public boolean hasTutorial() { return hasTutorial; } diff --git a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java index a25d9049a..552fc0a47 100644 --- a/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java +++ b/core/src/cz/nic/tablexia/game/games/in_the_darkness/InTheDarknessGame.java @@ -545,12 +545,8 @@ public class InTheDarknessGame extends AbstractTablexiaGame<List<MapWidget>> imp private ActionsStripWidget showActionsStripWidget(Map<String, String> gameState) { // Sprite actionStripBackground = new Sprite(displaySize.x - (actionStripWidgetWidth / 2), displaySize.y - (displaySize.y / 2), actionStripWidgetWidth, displaySize.y, ResourceManager.getInstance().getTexture(ResourceManager.BACKGROUND_ACTIONSTRIP_TEXTURE), getVertexBufferObjectManager()); // GameLayer.BACKGROUND_TEXTURE_LAYER.getLayerEntity().attachChild(actionStripBackground); - Float scrollPanePosition = null; - String selectedActionsString = null; - if (gameState != null) { - scrollPanePosition = Float.valueOf(gameState.get(GAME_STATE_KEY_SCROLL_PANE_POSITION)); - selectedActionsString = gameState.get(GAME_STATE_KEY_SELECTED_ACTIONS); - } + Float scrollPanePosition = gameState.containsKey(GAME_STATE_KEY_SCROLL_PANE_POSITION) ? Float.valueOf(gameState.get(GAME_STATE_KEY_SCROLL_PANE_POSITION)) : null; + String selectedActionsString = gameState.containsKey(GAME_STATE_KEY_SELECTED_ACTIONS) ? gameState.get(GAME_STATE_KEY_SELECTED_ACTIONS) : null; ActionsStripWidget actionStripWidget = new ActionsStripWidget(ACTION_STRIP_WIDGET_WIDTH, contentGroup.getHeight(), scrollPanePosition, selectedActionsString, this); actionStripWidget.setPosition(getStage().getWidth() - actionStripWidget.getWidth(), -SCREEN_Y_CORRECTION_OFFSET); diff --git a/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java b/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java index 9fa277df7..65eb3e964 100644 --- a/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java +++ b/core/src/cz/nic/tablexia/loader/TablexiaAtlasManager.java @@ -44,6 +44,10 @@ public class TablexiaAtlasManager extends TablexiaAbstractFileManager { } public TextureRegion getTextureRegionFromAtlas(String atlasName, String regionName, Integer index) { + return getTextureRegionFromAtlas(atlasName, regionName, index, true); + } + + public TextureRegion getTextureRegionFromAtlas(String atlasName, String regionName, Integer index, boolean useBleedingFix) { TextureAtlas atlas = getAsset(atlasName, TextureAtlas.class); if (atlas == null) { Log.err(getClass(), "Cannot get region: " + regionName + " -> Atlas with name: " + atlasName + " not found!"); @@ -61,19 +65,23 @@ public class TablexiaAtlasManager extends TablexiaAbstractFileManager { return null; } - // create new smaller region -> fix texture bleeding - float x = region.getRegionX(); - float y = region.getRegionY(); - float width = region.getRegionWidth(); - float height = region.getRegionHeight(); - float invTexWidth = 1f / region.getTexture().getWidth(); - float invTexHeight = 1f / region.getTexture().getHeight(); - - return new TextureRegion(region.getTexture(), - (x + BLEEDING_EDGE_OFFSET) * invTexWidth, - (y + BLEEDING_EDGE_OFFSET) * invTexHeight, - (x + width - BLEEDING_EDGE_OFFSET) * invTexWidth, - (y + height - BLEEDING_EDGE_OFFSET) * invTexHeight); + if (useBleedingFix) { + // create new smaller region -> fix texture bleeding + float x = region.getRegionX(); + float y = region.getRegionY(); + float width = region.getRegionWidth(); + float height = region.getRegionHeight(); + float invTexWidth = 1f / region.getTexture().getWidth(); + float invTexHeight = 1f / region.getTexture().getHeight(); + + return new TextureRegion(region.getTexture(), + (x + BLEEDING_EDGE_OFFSET) * invTexWidth, + (y + BLEEDING_EDGE_OFFSET) * invTexHeight, + (x + width - BLEEDING_EDGE_OFFSET) * invTexWidth, + (y + height - BLEEDING_EDGE_OFFSET) * invTexHeight); + } else { + return region; + } } public NinePatch getPatchFromAtlas(String atlasName, String patchName) { diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java index 88b194b04..90d2c8cf4 100644 --- a/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java +++ b/core/src/cz/nic/tablexia/loader/application/ApplicationAtlasManager.java @@ -90,6 +90,10 @@ public class ApplicationAtlasManager extends TablexiaAtlasManager implements IAp return getTextureRegionFromAtlas(APPLICATION_ATLAS, textureName, null); } + public TextureRegion getTextureRegion(String textureName, boolean useBleedingFix) { + return getTextureRegionFromAtlas(APPLICATION_ATLAS, textureName, null, useBleedingFix); + } + public NinePatch getPatch(String patchName) { return getPatchFromAtlas(APPLICATION_ATLAS, patchName); } diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenu.java b/core/src/cz/nic/tablexia/menu/main/MainMenu.java index 3133681e5..d0b29e9e3 100644 --- a/core/src/cz/nic/tablexia/menu/main/MainMenu.java +++ b/core/src/cz/nic/tablexia/menu/main/MainMenu.java @@ -1,12 +1,11 @@ package cz.nic.tablexia.menu.main; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Touchable; +import com.badlogic.gdx.scenes.scene2d.ui.Cell; import com.badlogic.gdx.scenes.scene2d.ui.Container; -import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Stack; @@ -16,8 +15,14 @@ import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.utils.Align; +import net.engio.mbassy.listener.Handler; + import java.util.List; +import cz.nic.tablexia.TablexiaApplication; +import cz.nic.tablexia.bus.ApplicationBus; +import cz.nic.tablexia.game.AbstractTablexiaGame; +import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.loader.application.ApplicationAtlasManager; import cz.nic.tablexia.loader.application.ApplicationFontManager; import cz.nic.tablexia.menu.AbstractMenu; @@ -146,10 +151,17 @@ public class MainMenu extends AbstractMenu { private static final float CONTAINER_BOTTOM_PADDING = 4f; private final Table layoutContainer; + private final Image arrowIcon; + private final Image restartIcon; + private final Cell<Image> iconCell; private NinePatchDrawable background; private TextureRegionDrawable highlitedBackground; - public SubMenuItemGroup(String title, String description) { + private Class<? extends AbstractTablexiaGame> abstractTablexiaGameClass; + + public SubMenuItemGroup(String title, String description, Class<? extends AbstractTablexiaGame> abstractTablexiaGameClass) { + this.abstractTablexiaGameClass = abstractTablexiaGameClass; + layoutContainer = new Table(); layoutContainer.pad(LAYOUT_PADDING); layoutContainer.setTouchable(Touchable.enabled); @@ -194,14 +206,28 @@ public class MainMenu extends AbstractMenu { layoutContainer.add(labelsContainer); // arrow - Image arrow = new Image(ApplicationAtlasManager.getInstance().getTextureRegion(ApplicationAtlasManager.MAINMENU_CHILDITEM_ARROW)); - layoutContainer.add(arrow).expandX().align(Align.right).padRight(ARROW_PADING_RIGHT); + arrowIcon = new Image(ApplicationAtlasManager.getInstance().getTextureRegion(ApplicationAtlasManager.MAINMENU_CHILDITEM_ARROW, false)); + restartIcon = new Image(ApplicationAtlasManager.getInstance().getTextureRegion(ApplicationAtlasManager.MAINMENU_CHILDITEM_RESTART, false)); + iconCell = layoutContainer.add(); + iconCell.expandX().align(Align.right).padRight(ARROW_PADING_RIGHT); + changeIconToArrow(); // highliter size highliter.getDrawable().setMinWidth(5); highliter.getDrawable().setMinHeight(layoutContainer.getMinHeight()); setUnpressed(); + ApplicationBus.getInstance().subscribe(this); + } + + private void changeIconToArrow() { + restartIcon.remove(); + iconCell.setActor(arrowIcon); + } + + private void changeIconToRestart() { + arrowIcon.remove(); + iconCell.setActor(restartIcon); } private void setUnpressed() { @@ -211,6 +237,15 @@ public class MainMenu extends AbstractMenu { private void setPressed() { layoutContainer.setBackground(highlitedBackground); } + + @Handler + public void onScreenChangedEvent(TablexiaApplication.ScreenChangedEvent screenChangedEvent) { + if (screenChangedEvent.getScreenClass() == abstractTablexiaGameClass) { + changeIconToRestart(); + } else { + changeIconToArrow(); + } + } } public MainMenu(Float width, Float height) { @@ -225,7 +260,8 @@ public class MainMenu extends AbstractMenu { @Override protected Group createSubMenuItem(IMenuItem menuItem) { - return new SubMenuItemGroup(menuItem.getTitle(), menuItem.getDescription()); + GameDefinition gameDefinition = ((GameDefinition) menuItem); + return new SubMenuItemGroup(gameDefinition.getTitle(), gameDefinition.getDescription(), gameDefinition.getScreenClass()); } @Override diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java b/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java index 9d23d49c3..2e218dc7b 100644 --- a/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java +++ b/core/src/cz/nic/tablexia/menu/main/MainMenuDefinition.java @@ -35,8 +35,8 @@ public enum MainMenuDefinition implements IMenuItem { TablexiaSettings.getInstance().setSelectedUser(null); } }, - PREFERENCES (false, null, null, "mainmenu_preferences", null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(PreferencesScreen.class, TablexiaApplication.ScreenTransaction.FADE)), - SCREEN_DEBUG (true, null, null, "mainmenu_screendebug", null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(ViewportDebugScreen.class, TablexiaApplication.ScreenTransaction.FADE)); + PREFERENCES (false, ApplicationAtlasManager.MAINMENU_ICON_ABOUT_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_ABOUT_PRESSED, "mainmenu_preferences", null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(PreferencesScreen.class, TablexiaApplication.ScreenTransaction.FADE)), + SCREEN_DEBUG (true, ApplicationAtlasManager.MAINMENU_ICON_ABOUT_UNPRESSED, ApplicationAtlasManager.MAINMENU_ICON_ABOUT_PRESSED, "mainmenu_screendebug", null, AbstractMenu.MenuAction.CLOSE, new Tablexia.ChangeScreenEvent(ViewportDebugScreen.class, TablexiaApplication.ScreenTransaction.FADE)); private boolean debug; private String iconUnpressed; diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java index a5160c811..4f1a0fa5e 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java @@ -12,7 +12,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Stack; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +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.game.GameDefinition; import cz.nic.tablexia.game.difficulty.GameDifficulty; import cz.nic.tablexia.screen.AbstractTablexiaScreen; @@ -93,7 +96,8 @@ public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener { @Override public void clicked(InputEvent event, float x, float y) { super.clicked(event, x, y); - GameMenuPage.this.game.performAction(); // TODO launch game using events + ApplicationBus.getInstance().publishAsync(new Tablexia.ChangeScreenEvent(GameMenuPage.this.game.getScreenClass(), + TablexiaApplication.ScreenTransaction.FADE)); } }); -- GitLab