From 6f14608b3ac8844a3bcead77232cb508d212fd43 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Latner?= <matyas.latner@nic.cz>
Date: Tue, 4 Aug 2015 16:37:45 +0200
Subject: [PATCH] #5 Robbery game debug screen rule text and select box for
 rule selection

---
 .../game/games/robbery/DebugScreen.java       | 92 ++++++++++++++++---
 .../game/games/robbery/RobberyGame.java       | 24 +++--
 2 files changed, 96 insertions(+), 20 deletions(-)

diff --git a/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java b/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java
index c58763d4c..3e5035a85 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/DebugScreen.java
@@ -1,21 +1,37 @@
 package cz.nic.tablexia.game.games.robbery;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
+import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
+import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
+import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
+import com.badlogic.gdx.utils.Align;
 
 import java.util.List;
 import java.util.Map;
 
 import cz.nic.tablexia.game.games.robbery.assets.RobberyAssets;
 import cz.nic.tablexia.game.games.robbery.creature.CreatureRoot;
+import cz.nic.tablexia.game.games.robbery.rules.GameRulesDefinition;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.util.Log;
 
 public class DebugScreen extends AbstractTablexiaScreen<Void> {
-	
-	private enum DebugGroupColors {
+
+    private static final float SELECTBOX_WIDTH_RATIO    = 1f/5;
+    private static final float SELECTBOX_HEIGHT_RATIO   = 1f/20;
+    private static final float SELECTBOX_X_HEIGHT_RATIO = 17f/20;
+    private static final float RULE_WIDTH_RATIO         = 2f/3;
+    private static final float RULE_HEIGHT_RATIO        = 2f/10;
+    private static final float RULE_X_RATIO             = 1f/2;
+    private static final float RULE_Y_RATIO             = 1f/50;
+
+    private enum DebugGroupColors {
         RED(Color.RED),
         GREEN(Color.GREEN),
         BLUE(Color.BLUE),
@@ -30,7 +46,7 @@ public class DebugScreen extends AbstractTablexiaScreen<Void> {
 
         Color color;
 
-        private DebugGroupColors(Color color) {
+        DebugGroupColors(Color color) {
             this.color = color;
         }
 
@@ -47,40 +63,88 @@ public class DebugScreen extends AbstractTablexiaScreen<Void> {
 	@Override
 	protected void screenLoaded(Map<String, String> screenState) {
 		displayAllCreatures(RobberyGame.getRobberyData().getCreatures(), getStage());
+        displayRule();
+        displayRuleSelectBox();
 	}
-	
-	private void displayAllCreatures(List<CreatureRoot> creatures, Stage stage) {
+
+    private void displayRuleSelectBox() {
+        BitmapFont font = getDefaultRegularFont();
+
+        ScrollPane.ScrollPaneStyle scrollPaneStyle = new ScrollPane.ScrollPaneStyle();
+        scrollPaneStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
+        scrollPaneStyle.background.setMinWidth(50); // temporary size
+        scrollPaneStyle.background.setMinHeight(50);
+        com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle listStyle = new com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle();
+        listStyle.selection = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
+        listStyle.font = font;
+        SelectBox.SelectBoxStyle selectBoxStyle = new SelectBox.SelectBoxStyle();
+        selectBoxStyle.font = font;
+        selectBoxStyle.scrollStyle = scrollPaneStyle;
+        selectBoxStyle.listStyle = listStyle;
+        selectBoxStyle.background = new TextureRegionDrawable(getColorTextureRegion(Color.GRAY));
+        selectBoxStyle.background.setMinWidth(50); // temporary size
+        selectBoxStyle.background.setMinHeight(50);
+        SelectBox<GameRulesDefinition> ruleSelectBox = new SelectBox<GameRulesDefinition>(selectBoxStyle);
+        ruleSelectBox.setItems(GameRulesDefinition.values());
+        ruleSelectBox.setSelected(RobberyGame.getRobberyRuleDefinition());
+        ruleSelectBox.addCaptureListener(new ChangeListener() {
+
+            @Override
+            public void changed(ChangeEvent event, Actor actor) {
+
+            }
+        });
+        getStage().addActor(ruleSelectBox);
+
+        float selectBoxWidth = getStage().getWidth() * SELECTBOX_WIDTH_RATIO;
+        float selectBoxHeight = getStage().getHeight() * SELECTBOX_HEIGHT_RATIO;
+        ruleSelectBox.setBounds((getStage().getWidth() / 2) - (selectBoxWidth / 2), getStage().getHeight() * SELECTBOX_X_HEIGHT_RATIO, selectBoxWidth, selectBoxHeight);
+    }
+
+    private void displayRule() {
+        Label label = new Label(RobberyGame.getRobberyData().getRuleMessageText(), new Label.LabelStyle(RobberyGame.getRobberyRegularFont(), Color.WHITE));
+        label.setWrap(true);
+
+        float labelWidth = getStage().getWidth() * RULE_WIDTH_RATIO;
+        float labelHeight = getStage().getHeight() * RULE_HEIGHT_RATIO;
+
+        label.setBounds((getStage().getWidth() * RULE_X_RATIO) - (labelWidth / 2), getStage().getHeight() * RULE_Y_RATIO, labelWidth, labelHeight);
+        label.setAlignment(Align.center);
+        getStage().addActor(label);
+    }
+
+    private void displayAllCreatures(List<CreatureRoot> creatures, Stage stage) {
 		if (creatures != null && creatures.size() > 0) {				
-			float creatureScale 			= 0.5f;
+			float creatureScale 			= 0.4f;
 			TextureRegion sizeTextureRegion = RobberyGame.getRobberyTextureRegion(RobberyAssets.CREATURE_BACKGROUND_TEXTURE);
 			
 			float creatureWidth  			= sizeTextureRegion.getRegionWidth() * creatureScale;
 			float creatureHeight 			= sizeTextureRegion.getRegionHeight() * creatureScale;
 			
-			float borderX 					= (Gdx.graphics.getWidth() / 40);
-			float borderY 					= Gdx.graphics.getHeight() / 7;
+			float borderX 					= getStage().getWidth() / 40;
+			float borderY 					= getStage().getHeight() / 5;
 			
 			int creaturesInLine 			= (int)Math.ceil(Double.valueOf(creatures.size()) / 2);
-			float xStep						= (Gdx.graphics.getWidth() - (2 * borderX) - (creatureWidth / 2)) / creaturesInLine;
+			float xStep						= (getStage().getWidth() - (2 * borderX) - (creatureWidth / 2)) / creaturesInLine;
 			
 			float positionX 				= borderX;
-			float positionY 				= Gdx.graphics.getHeight() - (creatureHeight) - borderY;
+			float positionY 				= getStage().getHeight() - (creatureHeight) - borderY;
 			
 			for (int i = 0; i < creatures.size(); i++) {
 				CreatureRoot creatureRoot = creatures.get(i);
 				creatureRoot.setScale(creatureScale);
 				creatureRoot.setPosition(positionX, positionY);
 				int groupNumber = creatureRoot.getGroupNumber();
-				if (groupNumber >= 0) {            	
+				if (groupNumber >= 0) {
 					creatureRoot.highliteWithColor(DebugGroupColors.values()[groupNumber].getColor());
 				}
-				
+
 				positionX = positionX + xStep;
 				if ((i + 1) % creaturesInLine == 0) {
 					positionX = borderX;
 					positionY = borderY;
 				}
-				
+
 				stage.addActor(creatureRoot);
 			}
 		} else {
diff --git a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
index b6e105e1a..533c4bda2 100644
--- a/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
+++ b/core/src/cz/nic/tablexia/game/games/robbery/RobberyGame.java
@@ -28,13 +28,14 @@ public class RobberyGame extends AbstractTablexiaGame<GameRule> {
 	
 	private InputMultiplexer						inputMultiplexer;
 	private AbstractTablexiaScreen<Void> 			actualScreen;
-	
+	private GameRulesDefinition 					rulesDefinition;
+
 	private boolean isRootScreenVisible;
-	private boolean isComponentScreenVisible;
 
+	private boolean isComponentScreenVisible;
 	private static int actualCreatureNumber;
-	
-	
+
+
 //////////////////////////// SCREEN LOADERS
 	
 	@Override
@@ -46,8 +47,8 @@ public class RobberyGame extends AbstractTablexiaGame<GameRule> {
 
 	@Override
 	protected GameRule prepareGameData(Map<String, String> gameState) {
-		GameRulesDefinition rule = GameRulesDefinition.getRandomGameRuleForDifficulty(getGameDifficulty(), getRandom());
-        GameRule gameRule = rule.getGameRuleInstance(getRandom(), CREATURES_COUNT, THIEVES_COUNT);
+		rulesDefinition = GameRulesDefinition.getRandomGameRuleForDifficulty(getGameDifficulty(), getRandom());
+        GameRule gameRule = rulesDefinition.getGameRuleInstance(getRandom(), CREATURES_COUNT, THIEVES_COUNT);
         gameRule.generateCreatures();
 
         if (gameState != null && gameState.containsKey(ACTUAL_CREATURE_NUMBER)) {
@@ -255,6 +256,17 @@ public class RobberyGame extends AbstractTablexiaGame<GameRule> {
 		}
 		return null;
 	}
+
+	public GameRulesDefinition getRulesDefinition() {
+		return rulesDefinition;
+	}
+
+	public static GameRulesDefinition getRobberyRuleDefinition() {
+		if (instance != null) {
+			return instance.getRulesDefinition();
+		}
+		return null;
+	}
 	
 	static void showRobberyRuleScreen() {
 		instance.showRuleScreen(true);
-- 
GitLab