diff --git a/core/assets/common/application/victoryscreen/ratingstar_disabled.png b/core/assets/common/application/victoryscreen/ratingstar_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..86bb89f6bce744f735d635514b954b64477829c1 Binary files /dev/null and b/core/assets/common/application/victoryscreen/ratingstar_disabled.png differ diff --git a/core/assets/common/application/victoryscreen/ratingstar_enabled.png b/core/assets/common/application/victoryscreen/ratingstar_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a922caadf9bcfaa081fe1cbc8accdae3224731a6 Binary files /dev/null and b/core/assets/common/application/victoryscreen/ratingstar_enabled.png differ diff --git a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java index f88ee158e5c578702b2d68a5985b8c3a8a03e41e..63e9a9008ef0240cde68376417467c9153b625c9 100644 --- a/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java +++ b/core/src/cz/nic/tablexia/game/AbstractTablexiaGame.java @@ -6,7 +6,12 @@ import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Cell; +import com.badlogic.gdx.scenes.scene2d.ui.Dialog; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Stack; +import com.badlogic.gdx.scenes.scene2d.ui.Table; import java.util.List; @@ -21,6 +26,7 @@ import cz.nic.tablexia.util.ui.dialog.TwoButtonDialog; import cz.nic.tablexia.util.ui.dialog.text.DialogTextContent; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.alpha; +import static com.badlogic.gdx.scenes.scene2d.actions.Actions.delay; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeIn; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.fadeOut; import static com.badlogic.gdx.scenes.scene2d.actions.Actions.run; @@ -33,6 +39,8 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> private static final int SCREEN_TRANSACTION_FADE_DELAY = 1; public static final String VICTORYSCREEN_RESULTSBANNER = "application/victoryscreen/resultsbanner.png"; + public static final String VICTORYSCREEN_RATINGSTAR_DISABLED = "application/victoryscreen/ratingstar_disabled.png"; + public static final String VICTORYSCREEN_RATINGSTAR_ENABLED = "application/victoryscreen/ratingstar_enabled.png"; private RandomAccess randomAccess; private GameDifficulty gameDifficulty; @@ -66,6 +74,8 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> @Override protected final void prepareScreenTextureAssetNames(List<String> textureFileNames) { textureFileNames.add(VICTORYSCREEN_RESULTSBANNER); + textureFileNames.add(VICTORYSCREEN_RATINGSTAR_DISABLED); + textureFileNames.add(VICTORYSCREEN_RATINGSTAR_ENABLED); prepareGameTextureAssetNames(textureFileNames); } @@ -112,12 +122,18 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> private final float DIALOG_POSITION_X = (AbstractTablexiaGame.this.getStage().getWidth() / 2) - (DIALOG_WIDTH / 2); private final float DIALOG_POSITION_Y = (AbstractTablexiaGame.this.getStage().getHeight() / 2) - (DIALOG_HEIGHT / 2); - private class VitoryDialog extends TwoButtonDialog { + private class VictoryDialog extends TwoButtonDialog { + + public static final int RATINGSTARS_COUNT = 3; + public static final float RATINGSTAR_DELAY = 0.75f; public static final float RESULTSBANNER_WIDTH_RATIO = 2f / 3; public static final float RESULTSBANNER_TOPPADDING_RATIO = 1f / 30; + public static final float RATINGSTAR_HEIGHT_RATIO = 1f / 8; + + Image[] ratingStarsEnabled; - public VitoryDialog() { + public VictoryDialog() { super(DIALOG_POSITION_X, DIALOG_POSITION_Y, DIALOG_WIDTH, @@ -136,10 +152,58 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> Image resultsBanner = new Image(getTexture(VICTORYSCREEN_RESULTSBANNER)); float resultBannerWidth = getWidth() * RESULTSBANNER_WIDTH_RATIO; float resultsBannerSizeRatio = resultBannerWidth / resultsBanner.getWidth(); - getContentTable().add(resultsBanner).width(resultBannerWidth).height(resultsBanner.getHeight() * resultsBannerSizeRatio).padTop(getHeight() * RESULTSBANNER_TOPPADDING_RATIO).center().row(); + getContentTable().add(resultsBanner).width(resultBannerWidth).height(resultsBanner.getHeight() * resultsBannerSizeRatio).padTop(getHeight() * RESULTSBANNER_TOPPADDING_RATIO).center().colspan(3); + + // RATING STARS + getContentTable().row(); + Table ratingStarTable = new Table(); + ratingStarsEnabled = new Image[RATINGSTARS_COUNT]; + for (int i = 0; i < RATINGSTARS_COUNT; i++) { + createRatingStar(i, ratingStarTable); + } + getContentTable().add(ratingStarTable).center(); + + getContentTable().row(); getContentTable().add(new Actor()).expand(); } + private void createRatingStar(int starNumber, Table ratingStartTable) { + Stack ratingStack = new Stack(); + Image ratingStarDisabled = new Image(getTexture(VICTORYSCREEN_RATINGSTAR_DISABLED)); + Image ratingStarEnabled = new Image(getTexture(VICTORYSCREEN_RATINGSTAR_ENABLED)); + + ratingStarEnabled.setVisible(false); + ratingStarsEnabled[starNumber] = ratingStarEnabled; + + ratingStack.add(ratingStarDisabled); + ratingStack.add(ratingStarEnabled); + + float ratingStarHeight = getWidth() * RATINGSTAR_HEIGHT_RATIO; + float ratingStarSizeRatio = ratingStarHeight / ratingStarDisabled.getHeight(); + Cell<Stack> cell = ratingStartTable.add(ratingStack); + cell.height(ratingStarHeight).width(ratingStarDisabled.getWidth() * ratingStarSizeRatio); + } + + public Dialog show(int score, Stage stage) { + if (score < 0 || score > RATINGSTARS_COUNT) { + throw new IllegalArgumentException("Invalid score value: " + score); + } + + super.show(stage); + + for (int i = 0; i < score; i++) { + final Image ratingStarEnabled = ratingStarsEnabled[i]; + + addAction(sequence(delay((i + 1) * RATINGSTAR_DELAY), run(new Runnable() { + @Override + public void run() { + ratingStarEnabled.setVisible(true); + } + }))); + } + return this; + } + @Override protected void leftButtonAction() { } @@ -158,8 +222,8 @@ public abstract class AbstractTablexiaGame<T> extends AbstractTablexiaScreen<T> return gameDifficulty; } - public void gameComplete() { - (new VitoryDialog()).show(getStage()); + public void gameComplete(int score) { + (new VictoryDialog()).show(score, getStage()); } private void startNewGame() { diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RobberyScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/RobberyScreen.java index 00ada110892cac17afd2c903f35470bb57889e86..590cc2ed7e5d72cbf2e593eeb96bae1fe0cc8aac 100644 --- a/core/src/cz/nic/tablexia/game/games/robbery/RobberyScreen.java +++ b/core/src/cz/nic/tablexia/game/games/robbery/RobberyScreen.java @@ -382,6 +382,6 @@ public class RobberyScreen extends AbstractTablexiaGame<GameRule> { } static void gameRobberyComplete() { - instance.gameComplete(); + instance.gameComplete(2); } }