From 48c3c1de49e741296feea6094b172c2cdcf6cc5e Mon Sep 17 00:00:00 2001
From: "v.tarantik" <v.tarantik@gmail.com>
Date: Fri, 9 Oct 2015 10:31:00 +0200
Subject: [PATCH] #32 Victory screen stats values, fixed multiple sound play
 after car drag

---
 .../text/game/pursuit/pursuit_cs.properties   |  5 ++
 .../text/game/pursuit/pursuit_de.properties   |  5 ++
 .../text/game/pursuit/pursuit_sk.properties   |  5 ++
 .../game/games/pursuit/PursuitGame.java       | 75 ++++++++++++++-----
 4 files changed, 70 insertions(+), 20 deletions(-)

diff --git a/android/assets/text/game/pursuit/pursuit_cs.properties b/android/assets/text/game/pursuit/pursuit_cs.properties
index 2ed959e6d..ea9e21549 100644
--- a/android/assets/text/game/pursuit/pursuit_cs.properties
+++ b/android/assets/text/game/pursuit/pursuit_cs.properties
@@ -1,3 +1,8 @@
+victory_text_hours= {0}h
+victory_text_minutes= {0}min
+victory_text_seconds= {0}s
+victory_text_time=ÄŚas: {0}
+victory_text_moves=PoÄŤet tahĹŻ: {0}
 game_pronasledovani_loadingtext=Sestav mapu přemisťováním a otáčením jednotlivých dílků.
 game_pronasledovani_victorytext_threestars=Počkat si na lupiče v jejich doupěti, tak to je povedený kousek!
 game_pronasledovani_victorytext_twostars=Začínající dektiv by se za takový výkon nemusel stydět!
diff --git a/android/assets/text/game/pursuit/pursuit_de.properties b/android/assets/text/game/pursuit/pursuit_de.properties
index 2afd62aee..3710eec4e 100644
--- a/android/assets/text/game/pursuit/pursuit_de.properties
+++ b/android/assets/text/game/pursuit/pursuit_de.properties
@@ -1,3 +1,8 @@
+victory_text_hours= {0}h
+victory_text_minutes= {0}min
+victory_text_seconds= {0}s
+victory_text_time=Zeit: {0}
+victory_text_moves=Anzahl der ZĂĽge: {0}
 game_pronasledovani_loadingtext=Stelle die Karte zusammen, indem du einzelne Teile verschiebst und drehst.
 game_pronasledovani_victorytext_threestars=Auf die Einbrecher in ihrem Unterschlupf warten, das ist ein MeisterstĂĽck!
 game_pronasledovani_victorytext_twostars=Ein angehender Detektiv muss sich für eine solche Leistung nicht schämen!
diff --git a/android/assets/text/game/pursuit/pursuit_sk.properties b/android/assets/text/game/pursuit/pursuit_sk.properties
index 88ea78687..d56fce505 100644
--- a/android/assets/text/game/pursuit/pursuit_sk.properties
+++ b/android/assets/text/game/pursuit/pursuit_sk.properties
@@ -1,3 +1,8 @@
+victory_text_hours= {0}h
+victory_text_minutes= {0}min
+victory_text_seconds= {0}s
+victory_text_time=ÄŚas: {0}
+victory_text_moves=PoÄŤet ĹĄahov: {0}
 game_pronasledovani_loadingtext=Zostav mapu premiestňovania a otáčania jednotlivých dielcov.
 game_pronasledovani_victorytext_threestars=Počkať si na lupiča v jeho skrýši, tak to bol podarený kúsok!
 game_pronasledovani_victorytext_twostars=Začínajúci detektív by sa za taký výkon nemusel hanbiť!
diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
index 4f217d5e3..3b42f55d6 100644
--- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
+++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java
@@ -8,6 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Group;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.utils.Array;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -22,6 +23,7 @@ import cz.nic.tablexia.game.games.pursuit.helper.GameRulesHelper;
 import cz.nic.tablexia.game.games.pursuit.helper.TextureHelper;
 import cz.nic.tablexia.game.games.pursuit.listener.VehicleDragListener;
 import cz.nic.tablexia.game.games.pursuit.model.Grid;
+import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.Point;
 import cz.nic.tablexia.game.games.pursuit.model.PuzzlePiece;
 import cz.nic.tablexia.game.games.pursuit.model.Vehicle;
@@ -45,10 +47,10 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 
     private enum ResultMapping {
 
-        NO_STAR_TEXT	(GameResult.NO_STAR, 	PursuitAssets.VICTORYTEXT_NOSTAR, 		PursuitAssets.VICTORYSPEECH_NOSTAR),
-        ONE_STAR_TEXT	(GameResult.ONE_STAR, 	PursuitAssets.VICTORYTEXT_ONESTAR, 		PursuitAssets.VICTORYSPEECH_ONESTAR),
-        TWO_STAR_TEXT	(GameResult.TWO_STAR, 	PursuitAssets.VICTORYTEXT_TWOSTARS, 	PursuitAssets.VICTORYSPEECH_TWOSTAR),
-        THREE_STAR_TEXT	(GameResult.THREE_STAR, PursuitAssets.VICTORYTEXT_THREESTARS,	PursuitAssets.VICTORYSPEECH_THREESTAR);
+        NO_STAR_TEXT(GameResult.NO_STAR, PursuitAssets.VICTORYTEXT_NOSTAR, PursuitAssets.VICTORYSPEECH_NOSTAR),
+        ONE_STAR_TEXT(GameResult.ONE_STAR, PursuitAssets.VICTORYTEXT_ONESTAR, PursuitAssets.VICTORYSPEECH_ONESTAR),
+        TWO_STAR_TEXT(GameResult.TWO_STAR, PursuitAssets.VICTORYTEXT_TWOSTARS, PursuitAssets.VICTORYSPEECH_TWOSTAR),
+        THREE_STAR_TEXT(GameResult.THREE_STAR, PursuitAssets.VICTORYTEXT_THREESTARS, PursuitAssets.VICTORYSPEECH_THREESTAR);
 
         private final GameResult gameResult;
         private final String textKey;
@@ -78,10 +80,16 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
         }
     }
 
-    private static final Point SCREEN_SIZE = new Point(TablexiaSettings.getWorldWidth(),TablexiaSettings.getMinWorldHeight());
+    private static final Point SCREEN_SIZE = new Point(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight());
     private static final int GRID_PADDING = 10;
 
-    private  static final String SCORE_KEY_MOVE_COUNT = "move_count";
+    private static final String SUMMARY_TEXT_TIME_HOURS = "victory_text_hours";
+    private static final String SUMMARY_TEXT_TIME_MINUTES = "victory_text_minutes";
+    private static final String SUMMARY_TEXT_TIME_SECONDS = "victory_text_seconds";
+    private static final String SUMMARY_TEXT_MOVE_COUNT = "victory_text_moves";
+    private static final String SUMMARY_TEXT_TIME = "victory_text_time";
+
+    private static final String SCORE_KEY_MOVE_COUNT = "move_count";
 
     private Group contentGroup;
     private Grid grid;
@@ -110,7 +118,7 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
     @Override
     protected void gameLoaded(Map<String, String> gameState) {
         gridColumnCount = GameRulesHelper.getNumberOfColumns(getGameDifficulty());
-        overlappedPieceZIndex = (int)Math.pow(gridColumnCount,2)-1;
+        overlappedPieceZIndex = (int) Math.pow(gridColumnCount, 2) - 1;
         contentGroup = new Group();
         contentGroup.setSize(SCREEN_SIZE.x, SCREEN_SIZE.y);
         getStage().addActor(contentGroup);
@@ -123,7 +131,7 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
         dragAndRotateActorListener = new DragAndRotateActorListener(new DragAndRotateActorListener.IOnRotationFinished() {
             @Override
             public void onRotationFinished() {
-                setGameScore(SCORE_KEY_MOVE_COUNT,movesCounter++);
+                setGameScore(SCORE_KEY_MOVE_COUNT, movesCounter++);
             }
         }) {
             @Override
@@ -160,7 +168,7 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
                         Action onPiecesSwitchFinishedAction = new Action() {
                             @Override
                             public boolean act(float delta) {
-                                setGameScore(SCORE_KEY_MOVE_COUNT,movesCounter++);
+                                setGameScore(SCORE_KEY_MOVE_COUNT, movesCounter++);
                                 dragAndRotateActorListener.setDraggedActor(null);
                                 dragAndRotateActorListener.setPerformingAction(false);
                                 grid.unscaleAllPieces();
@@ -207,16 +215,18 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 
     private void prepareVehicle() {
         VehicleType vehicleType = TextureHelper.getVehicleTextureName(getRandom(), mapNumber);
-        Point vehiclePosition = new Point(0,0);
+        Point vehiclePosition = new Point(0, 0);
         Point vehicleSize = new Point(vehicleType.getVehicleSize().x, vehicleType.getVehicleSize().y);
         vehicle = new Vehicle(getScreenTextureRegion(vehicleType.getTextureName()), vehiclePosition, vehicleSize);
         vehicle.addListener(new VehicleDragListener(vehicle, getData(), new Point(roadMap.getRegionWidth(), roadMap.getRegionHeight()), finishFlag, new VehicleDragListener.OnVehicleDragCompleteListener() {
             @Override
             public void onVehicleDragComplete() {
-                gameComplete();
-                //remove all actor listeners
-                for(EventListener el: vehicle.getListeners()){
-                    vehicle.removeListener(el);
+                if(!getGame().isFinished()){
+                    gameComplete();
+                    //remove all actor listeners
+                    for (EventListener el : vehicle.getListeners()) {
+                        vehicle.removeListener(el);
+                    }
                 }
             }
         }));
@@ -236,15 +246,15 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
     }
 
     //sets the position according to completed map rotation
-    private void showCheckpoints(){
-        Point gridRotationCenter = new Point(grid.getWidth()/2,grid.getHeight()/2);
+    private void showCheckpoints() {
+        Point gridRotationCenter = new Point(grid.getWidth() / 2, grid.getHeight() / 2);
         //flag
         Point flagPosition = TextureHelper.getFinishFlagPosition(grid.getWidth(), mapNumber);
-        Point flagPositonConsideringMapRotation =ArithmeticsHelper.translatePositionAccordingToRotation(flagPosition, grid.getRotation(), gridRotationCenter);
+        Point flagPositonConsideringMapRotation = ArithmeticsHelper.translatePositionAccordingToRotation(flagPosition, grid.getRotation(), gridRotationCenter);
         //positioning both flag and vehicle by center
         //flag is not rotated
-        Point flagPoleOrigin = new Point(finishFlag.getWidth()*TextureHelper.FLAG_BLACK_DOT_RELATIVE_POSITION.x,finishFlag.getHeight()*TextureHelper.FLAG_BLACK_DOT_RELATIVE_POSITION.y);
-        finishFlag.setPosition(flagPositonConsideringMapRotation.x-flagPoleOrigin.x, flagPositonConsideringMapRotation.y-flagPoleOrigin.y);
+        Point flagPoleOrigin = new Point(finishFlag.getWidth() * TextureHelper.FLAG_BLACK_DOT_RELATIVE_POSITION.x, finishFlag.getHeight() * TextureHelper.FLAG_BLACK_DOT_RELATIVE_POSITION.y);
+        finishFlag.setPosition(flagPositonConsideringMapRotation.x - flagPoleOrigin.x, flagPositonConsideringMapRotation.y - flagPoleOrigin.y);
 
         //vehicle
         Point vehiclePosition = TextureHelper.getVehicleStartPosition(grid.getWidth(), mapNumber);
@@ -258,7 +268,8 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
 
     @Override
     protected List<SummaryMessage> getSummaryMessageForGameResult(Game game) {
-        return null;
+        return Arrays.asList(new SummaryMessage(SummaryImage.TIME, getFormattedText(SUMMARY_TEXT_TIME, getOverallTimeText(game.getGameDuration()))),
+                new SummaryMessage(SummaryImage.STATS, getFormattedText(SUMMARY_TEXT_MOVE_COUNT, game.getGameScore(SCORE_KEY_MOVE_COUNT, "0"))));
     }
 
     @Override
@@ -270,4 +281,28 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> {
     protected String getSoundNameForGameResult(GameResult gameResult) {
         return ResultMapping.getResultTextMappingForGameResult(gameResult).getSoundName();
     }
+
+    private String getOverallTimeText(float millis){
+        String time="";
+        StringBuilder sb = new StringBuilder();
+        int seconds = (int) (millis / 1000) % 60 ;
+        int minutes = (int) ((millis / (1000*60)) % 60);
+        int hours   = (int) ((millis / (1000*60*60)) % 24);
+        Log.info(getClass(),"TIME: "+hours+"h, "+minutes+"m, "+seconds+"s");
+        if(hours!=0){
+            Log.info(getClass(),"HOURS");
+            sb.append(getFormattedText(SUMMARY_TEXT_TIME_HOURS,hours));
+        }
+        if(minutes!=0){
+            Log.info(getClass(),"MINUTES");
+            sb.append(getFormattedText(SUMMARY_TEXT_TIME_MINUTES,minutes));
+        }
+        if(seconds!=0){
+            Log.info(getClass(),"SECONDS");
+            sb.append(getFormattedText(SUMMARY_TEXT_TIME_SECONDS,seconds));
+        }
+        return sb.toString();
+    }
+
+
 }
-- 
GitLab