diff --git a/bin/de/deadlocker8/roadgame/logic/Board.class b/bin/de/deadlocker8/roadgame/logic/Board.class index 5002354fa788d9ad2cb7e0a118b34a1e59f12279..77923361b15e8e4cda50856b9180924b288ff65d 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/Board.class and b/bin/de/deadlocker8/roadgame/logic/Board.class differ diff --git a/bin/de/deadlocker8/roadgame/logic/Game.class b/bin/de/deadlocker8/roadgame/logic/Game.class index 20a792026f1a3a7feb2fbf39d3855e87f54a0d37..dc3bfe85233eb41d5d7b319ec476fd8804810208 100644 Binary files a/bin/de/deadlocker8/roadgame/logic/Game.class and b/bin/de/deadlocker8/roadgame/logic/Game.class differ diff --git a/bin/de/deadlocker8/roadgame/tilepacks/TilePack.class b/bin/de/deadlocker8/roadgame/tilepacks/TilePack.class new file mode 100644 index 0000000000000000000000000000000000000000..b6062949311ba9b6e03b21dc6006417329ed37e3 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/tilepacks/TilePack.class differ diff --git a/bin/de/deadlocker8/roadgame/tilepacks/TilePackDefault.class b/bin/de/deadlocker8/roadgame/tilepacks/TilePackDefault.class new file mode 100644 index 0000000000000000000000000000000000000000..7c1427b4892c3b626dcc421e0966f879a5d01d83 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/tilepacks/TilePackDefault.class differ diff --git a/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest.class b/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest.class new file mode 100644 index 0000000000000000000000000000000000000000..b4da84bd8b356f00fda881df6ae9c538b92c1cdd Binary files /dev/null and b/bin/de/deadlocker8/roadgame/tilepacks/TilePackTest.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller$1.class b/bin/de/deadlocker8/roadgame/ui/Controller$1.class index ec7c6013bcdcb9d922c7a1cb2a9b98d89f319267..6f25679d13703a2bd3e5d1e2f2263eca6fb93cae 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller$1.class and b/bin/de/deadlocker8/roadgame/ui/Controller$1.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller$2.class b/bin/de/deadlocker8/roadgame/ui/Controller$2.class index 4cc8ad6e254350d45905509b71d3928a0b3a6d4f..fbe577013de6ba25a8f7dccf22368c68e3f615ae 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller$2.class and b/bin/de/deadlocker8/roadgame/ui/Controller$2.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/Controller.class b/bin/de/deadlocker8/roadgame/ui/Controller.class index dcd66c72351bac9ad3c637bee436fa64b380acce..5cfb47e5e37c56fb953c13b3aa1a0facd10988d5 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/Controller.class and b/bin/de/deadlocker8/roadgame/ui/Controller.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/GUI.fxml b/bin/de/deadlocker8/roadgame/ui/GUI.fxml index 563b3ab601971736aa73256556f769baafbe5d2b..22974c03f72d05a5a28feb2fef89b5059e581973 100644 --- a/bin/de/deadlocker8/roadgame/ui/GUI.fxml +++ b/bin/de/deadlocker8/roadgame/ui/GUI.fxml @@ -39,7 +39,7 @@ <Menu mnemonicParsing="false" text="Menu"> <items> <MenuItem mnemonicParsing="false" onAction="#reset" text="Reset" /> - <MenuItem mnemonicParsing="false" onAction="#showPossibleTiles" text="Show possible Tiles" /> + <MenuItem mnemonicParsing="false" onAction="#selectTilePack" text="Select Tilepack" /> <MenuItem mnemonicParsing="false" onAction="#about" text="About" /> </items> </Menu> diff --git a/bin/de/deadlocker8/roadgame/ui/PossibleTilesController.class b/bin/de/deadlocker8/roadgame/ui/PossibleTilesController.class index ea711209c766124b319448d080ffd7c51f0a6883..b731ce80406763fbbf987bec49d038ff13f35890 100644 Binary files a/bin/de/deadlocker8/roadgame/ui/PossibleTilesController.class and b/bin/de/deadlocker8/roadgame/ui/PossibleTilesController.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$1.class b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$1.class new file mode 100644 index 0000000000000000000000000000000000000000..c1af4747b200597f3f0485cb0d6f4c16ee33ed4e Binary files /dev/null and b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$1.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$2.class b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$2.class new file mode 100644 index 0000000000000000000000000000000000000000..be74b4de64a6fdebf063304046ebd578eb8bd2c3 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController$2.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/SelectTilePackController.class b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController.class new file mode 100644 index 0000000000000000000000000000000000000000..3cdb96bb020372702b45494abf8dafcb6f5488b9 Binary files /dev/null and b/bin/de/deadlocker8/roadgame/ui/SelectTilePackController.class differ diff --git a/bin/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml b/bin/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml new file mode 100644 index 0000000000000000000000000000000000000000..b13ba0a58796a7eb7e8a1a88e324746cb0cfcf3d --- /dev/null +++ b/bin/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ScrollPane?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + +<AnchorPane prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.roadgame.ui.SelectTilePackController"> + <children> + <ScrollPane fx:id="scrollPane" layoutX="14.0" layoutY="14.0" AnchorPane.bottomAnchor="56.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> + <content> + <VBox fx:id="vbox" prefHeight="231.0" prefWidth="272.0" /> + </content> + </ScrollPane> + <Button fx:id="buttonBack" layoutX="119.0" layoutY="256.0" mnemonicParsing="false" onAction="#back" prefHeight="30.0" prefWidth="63.0" text="Back" AnchorPane.bottomAnchor="14.0"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> + </children> +</AnchorPane> diff --git a/src/de/deadlocker8/roadgame/logic/Board.java b/src/de/deadlocker8/roadgame/logic/Board.java index dc18b3c2037f2b01c57031bb5bd65174a8405a4a..dd774fb76cdb624efc6b3c64e4ce7e0331426dcd 100644 --- a/src/de/deadlocker8/roadgame/logic/Board.java +++ b/src/de/deadlocker8/roadgame/logic/Board.java @@ -1,26 +1,32 @@ package de.deadlocker8.roadgame.logic; import java.util.ArrayList; -import java.util.Random; +import de.deadlocker8.roadgame.tilepacks.TilePack; import javafx.geometry.Point2D; public class Board { + private TilePack tilePack; private ArrayList<Tile> tiles; - public Board() + public Board(TilePack tilePack) { + this.tilePack = tilePack; this.tiles = new ArrayList<>(); initBoard(); } private void initBoard() { - Tile startTile = getRandomTile(); - startTile.setPosition(new Point2D(0, 0)); - - tiles.add(startTile); + TileType tileType = getRandomTile(); + if(tileType != null) + { + Tile startTile = new Tile(tileType); + startTile.setPosition(new Point2D(0, 0)); + + tiles.add(startTile); + } } public ArrayList<Tile> getTiles() @@ -41,21 +47,9 @@ public class Board return null; } - public Tile getRandomTile() + public TileType getRandomTile() { - Random random = new Random(); - int index = random.nextInt(TileType.values().length); - TileType tileType = TileType.values()[index]; - Tile tile = new Tile(tileType.getN(), tileType.getE(), tileType.getS(), tileType.getW(), tileType.getC()); - - //random rotation - int rotate = random.nextInt(3); - for(int i = 0; i < rotate; i++) - { - tile.rotateRight(); - } - - return tile; + return tilePack.getRandomTile(); } public boolean containsTileAtPosition(int x, int y) diff --git a/src/de/deadlocker8/roadgame/logic/Game.java b/src/de/deadlocker8/roadgame/logic/Game.java index 99005205e43e3baad4f605886893b0d9b61b0843..1d51cbe07801c62b1f5cd7119da0d1e899b3b0ae 100644 --- a/src/de/deadlocker8/roadgame/logic/Game.java +++ b/src/de/deadlocker8/roadgame/logic/Game.java @@ -2,16 +2,17 @@ package de.deadlocker8.roadgame.logic; import java.util.ArrayList; +import de.deadlocker8.roadgame.tilepacks.TilePack; import javafx.geometry.Point2D; public class Game -{ +{ private Board board; private Tile currentTile; - public Game() + public Game(TilePack tilePack) { - board = new Board(); + board = new Board(tilePack); } public Board getBoard() @@ -21,7 +22,13 @@ public class Game public Tile getNextTile() { - return board.getRandomTile(); + TileType type = board.getRandomTile(); + if(type == null) + { + return null; + } + + return new Tile(type); } public void setCurrentTile(Tile currentTile) diff --git a/src/de/deadlocker8/roadgame/tilepacks/TilePack.java b/src/de/deadlocker8/roadgame/tilepacks/TilePack.java new file mode 100644 index 0000000000000000000000000000000000000000..6ca06dd8ba88ff42a5163286eadfe232e0c6f701 --- /dev/null +++ b/src/de/deadlocker8/roadgame/tilepacks/TilePack.java @@ -0,0 +1,73 @@ +package de.deadlocker8.roadgame.tilepacks; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Random; + +import de.deadlocker8.roadgame.logic.Tile; +import de.deadlocker8.roadgame.logic.TileType; + +public abstract class TilePack +{ + protected String name; + protected HashMap<TileType, Integer> tiles; + + public TilePack(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public HashMap<TileType, Integer> getTiles() + { + return tiles; + } + + public int getNumberOfTiles() + { + int numberOfTiles = 0; + for(TileType key : tiles.keySet()) + { + numberOfTiles += tiles.get(key); + } + + return numberOfTiles; + } + + public TileType getRandomTile() + { + if(tiles.size() > 0) + { + Random random = new Random(); + int index = random.nextInt(tiles.size()); + List<TileType> keysAsArray = new ArrayList<>(tiles.keySet()); + TileType tileType = keysAsArray.get(index); + + tiles.put(tileType, tiles.get(tileType) -1); + if(tiles.get(tileType) <= 0) + { + tiles.remove(tileType); + } + + Tile tile = new Tile(tileType); + + //random rotation + int rotate = random.nextInt(3); + for(int i = 0; i < rotate; i++) + { + tile.rotateRight(); + } + + return tileType; + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/tilepacks/TilePackDefault.java b/src/de/deadlocker8/roadgame/tilepacks/TilePackDefault.java new file mode 100644 index 0000000000000000000000000000000000000000..66399cb357b9a58b6e99772a70652666d135657d --- /dev/null +++ b/src/de/deadlocker8/roadgame/tilepacks/TilePackDefault.java @@ -0,0 +1,50 @@ +package de.deadlocker8.roadgame.tilepacks; + +import java.util.HashMap; + +import de.deadlocker8.roadgame.logic.TileType; + +public class TilePackDefault extends TilePack +{ + public TilePackDefault() + { + super("Default"); + + tiles = new HashMap<>(); + tiles.put(TileType.ROAD_END, 1); + tiles.put(TileType.ROAD_STRAIGHT, 1); + tiles.put(TileType.ROAD_CURVE, 1); + tiles.put(TileType.ROAD_T_JUNCTION, 1); + tiles.put(TileType.ROAD_X_JUNCTION, 1); + tiles.put(TileType.ROAD_END_CHURCH, 1); + tiles.put(TileType.ROAD_STRAIGHT_CHURCH, 1); + tiles.put(TileType.ROAD_CURVE_CHURCH, 1); + tiles.put(TileType.ROAD_T_JUNCTION_CHURCH, 1); + tiles.put(TileType.ROAD_X_JUNCTION_CHURCH, 1); + tiles.put(TileType.CASTLE_SINGLE, 1); + tiles.put(TileType.CASTLE_TWO_SINGLE_OPPOSITE, 1); + tiles.put(TileType.CASTLE_TWO_SINGLE_NEIGHBOR, 1); + tiles.put(TileType.CASTLE_THREE_SINGLE, 1); + tiles.put(TileType.CASTLE_FOUR_SINGLE, 1); + tiles.put(TileType.CASTLE_TRIANGLE, 1); + tiles.put(TileType.CASTLE_TUBE, 1); + tiles.put(TileType.CASTLE_FULL, 1); + tiles.put(TileType.CASTLE_U, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_STRAIGHT, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_CURVE_RIGHT, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_CURVE_LEFT, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_T_JUNCTION, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_END_IN_CASTLE, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_CURVE_RIGHT_END_IN_CASTLE, 1); + tiles.put(TileType.CASTLE_SINGLE_ROAD_CURVE_LEFT_END_IN_CASTLE, 1); + tiles.put(TileType.CASTLE_TWO_SINGLE_OPPOSITE_ROAD_STRAIGHT, 1); + tiles.put(TileType.CASTLE_TWO_SINGLE_NEIGHBOR_ROAD_CURVE, 1); + tiles.put(TileType.CASTLE_THREE_SINGLE_ROAD_END, 1); + tiles.put(TileType.CASTLE_TRIANGLE_ROAD_CURVE, 1); + tiles.put(TileType.CASTLE_TRIANGLE_ROAD_RIGHT, 1); + tiles.put(TileType.CASTLE_TRIANGLE_ROAD_LEFT, 1); + tiles.put(TileType.CASTLE_TUBE_ROAD_ONE_SIDE, 1); + tiles.put(TileType.CASTLE_TUBE_ROAD_TWO_SIDE, 1); + tiles.put(TileType.CASTLE_U_ROAD_END, 1); + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/tilepacks/TilePackTest.java b/src/de/deadlocker8/roadgame/tilepacks/TilePackTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6e396e244e3b6f50c26ecde5933040ef16e612b4 --- /dev/null +++ b/src/de/deadlocker8/roadgame/tilepacks/TilePackTest.java @@ -0,0 +1,18 @@ +package de.deadlocker8.roadgame.tilepacks; + +import java.util.HashMap; + +import de.deadlocker8.roadgame.logic.TileType; + +public class TilePackTest extends TilePack +{ + public TilePackTest() + { + super("Test"); + + tiles = new HashMap<>(); + tiles.put(TileType.ROAD_END, 1); + tiles.put(TileType.ROAD_STRAIGHT, 1); + tiles.put(TileType.ROAD_CURVE, 3); + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/ui/Controller.java b/src/de/deadlocker8/roadgame/ui/Controller.java index bed5339a4cae56de2f09027dec0e7060ecdaf940..698627764e472476a451b68f1d1f0233b18dc38b 100644 --- a/src/de/deadlocker8/roadgame/ui/Controller.java +++ b/src/de/deadlocker8/roadgame/ui/Controller.java @@ -10,6 +10,7 @@ import de.deadlocker8.roadgame.logic.EdgeType; import de.deadlocker8.roadgame.logic.Game; import de.deadlocker8.roadgame.logic.Textures; import de.deadlocker8.roadgame.logic.Tile; +import de.deadlocker8.roadgame.tilepacks.TilePack; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; @@ -19,6 +20,7 @@ import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; +import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -45,7 +47,8 @@ public class Controller private GridPane grid; private Game game; private Textures textures; - + private StackPane stackPanePlaceHolder; + public void init(Stage stage) { this.stage = stage; @@ -68,12 +71,17 @@ public class Controller } } }); - - game = new Game(); - - updateGrid(game.getBoard(), null); - - nextTile(); + + buttonRotate.setDisable(true); + Label labelPlaceHolder = new Label("Please select Tilepack first."); + labelPlaceHolder.setStyle("-fx-font-weight: bold; -fx-font-size: 16;"); + stackPanePlaceHolder = new StackPane(); + stackPanePlaceHolder.getChildren().add(labelPlaceHolder); + anchorPaneGame.getChildren().add(stackPanePlaceHolder); + AnchorPane.setTopAnchor(stackPanePlaceHolder, 0.0); + AnchorPane.setRightAnchor(stackPanePlaceHolder, 0.0); + AnchorPane.setBottomAnchor(stackPanePlaceHolder, 0.0); + AnchorPane.setLeftAnchor(stackPanePlaceHolder, 0.0); } private void updateGrid(Board board, ArrayList<Point2D> possibleLocations) @@ -288,7 +296,17 @@ public class Controller private void nextTile() { - game.setCurrentTile(game.getNextTile()); + Tile nextTile = game.getNextTile(); + if(nextTile == null) + { + game.setCurrentTile(null); + stackPaneCurrentTile.getChildren().clear(); + //TODO + updateGrid(game.getBoard(), null); + return; + } + + game.setCurrentTile(nextTile); stackPaneCurrentTile.getChildren().clear(); stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); @@ -298,11 +316,14 @@ public class Controller public void rotateRight() { - game.getCurrentTile().rotateRight(); - stackPaneCurrentTile.getChildren().clear(); - stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); - - updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); + if(game != null && game.getCurrentTile() != null) + { + game.getCurrentTile().rotateRight(); + stackPaneCurrentTile.getChildren().clear(); + stackPaneCurrentTile.getChildren().add(createStackPaneForTile(game.getCurrentTile(), false, 0, 0)); + + updateGrid(game.getBoard(), game.getPossibleLocations(game.getCurrentTile())); + } } public void reset() @@ -310,21 +331,21 @@ public class Controller init(stage); } - public void showPossibleTiles() + public void selectTilePack() { try { - FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/deadlocker8/roadgame/ui/PossibleTilesGUI.fxml")); + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml")); Parent root = (Parent)fxmlLoader.load(); Stage newStage = new Stage(); newStage.initOwner(stage); newStage.initModality(Modality.APPLICATION_MODAL); - newStage.setTitle("Possible Tiles"); + newStage.setTitle("Select Tilepack"); newStage.setScene(new Scene(root)); newStage.getIcons().add(icon); newStage.setResizable(false); - PossibleTilesController newController = fxmlLoader.getController(); - newController.init(newStage, this); + SelectTilePackController newController = fxmlLoader.getController(); + newController.init(newStage, icon, this); newStage.show(); } @@ -333,6 +354,21 @@ public class Controller Logger.log(LogLevel.ERROR, Logger.exceptionToString(io)); } } + + public void setTilePack(TilePack tilePack) + { + buttonRotate.setDisable(false); + if(anchorPaneGame.getChildren().contains(stackPanePlaceHolder)) + { + anchorPaneGame.getChildren().remove(stackPanePlaceHolder); + } + + game = new Game(tilePack); + + updateGrid(game.getBoard(), null); + + nextTile(); + } public void about() { diff --git a/src/de/deadlocker8/roadgame/ui/GUI.fxml b/src/de/deadlocker8/roadgame/ui/GUI.fxml index 563b3ab601971736aa73256556f769baafbe5d2b..22974c03f72d05a5a28feb2fef89b5059e581973 100644 --- a/src/de/deadlocker8/roadgame/ui/GUI.fxml +++ b/src/de/deadlocker8/roadgame/ui/GUI.fxml @@ -39,7 +39,7 @@ <Menu mnemonicParsing="false" text="Menu"> <items> <MenuItem mnemonicParsing="false" onAction="#reset" text="Reset" /> - <MenuItem mnemonicParsing="false" onAction="#showPossibleTiles" text="Show possible Tiles" /> + <MenuItem mnemonicParsing="false" onAction="#selectTilePack" text="Select Tilepack" /> <MenuItem mnemonicParsing="false" onAction="#about" text="About" /> </items> </Menu> diff --git a/src/de/deadlocker8/roadgame/ui/PossibleTilesController.java b/src/de/deadlocker8/roadgame/ui/PossibleTilesController.java index c3f7c2a7cde67629f7a335d69fc132bb038b99b2..971691ec3cc2dca1511c94edb7964f1c24e34f78 100644 --- a/src/de/deadlocker8/roadgame/ui/PossibleTilesController.java +++ b/src/de/deadlocker8/roadgame/ui/PossibleTilesController.java @@ -2,9 +2,13 @@ package de.deadlocker8.roadgame.ui; import de.deadlocker8.roadgame.logic.Tile; import de.deadlocker8.roadgame.logic.TileType; +import de.deadlocker8.roadgame.tilepacks.TilePack; import javafx.fxml.FXML; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -16,19 +20,29 @@ public class PossibleTilesController private Stage stage; - public void init(Stage stage, Controller controller) + public void init(Stage stage, Controller controller, TilePack tilePack) { this.stage = stage; vbox.setSpacing(10.0); - vbox.setAlignment(Pos.CENTER); + vbox.setAlignment(Pos.TOP_CENTER); - for(TileType currentType : TileType.values()) + for(TileType key : tilePack.getTiles().keySet()) { - Tile tile = new Tile(currentType); + HBox hbox = new HBox(); + hbox.setAlignment(Pos.CENTER); + + Tile tile = new Tile(key); StackPane currentStack = controller.createStackPaneForTile(tile, false, 0, 0); currentStack.setMaxWidth(100.0); - vbox.getChildren().add(currentStack); + + Label labelTimes = new Label("x" + tilePack.getTiles().get(key)); + labelTimes.setStyle("-fx-font-weight: bold; -fx-font-size: 20;"); + + hbox.getChildren().add(currentStack); + hbox.getChildren().add(labelTimes); + HBox.setMargin(labelTimes, new Insets(0, 0, 0, 25)); + vbox.getChildren().add(hbox); } } diff --git a/src/de/deadlocker8/roadgame/ui/SelectTilePackController.java b/src/de/deadlocker8/roadgame/ui/SelectTilePackController.java new file mode 100644 index 0000000000000000000000000000000000000000..d74acae6fb9b4f63165f7ceca9960be23be53961 --- /dev/null +++ b/src/de/deadlocker8/roadgame/ui/SelectTilePackController.java @@ -0,0 +1,122 @@ +package de.deadlocker8.roadgame.ui; + +import java.io.IOException; +import java.util.ArrayList; + +import de.deadlocker8.roadgame.tilepacks.TilePack; +import de.deadlocker8.roadgame.tilepacks.TilePackDefault; +import de.deadlocker8.roadgame.tilepacks.TilePackTest; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.image.Image; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; +import javafx.stage.Modality; +import javafx.stage.Stage; +import logger.LogLevel; +import logger.Logger; + +public class SelectTilePackController +{ + @FXML private ScrollPane scrollPane; + @FXML private VBox vbox; + @FXML private Button buttonBack; + + private Stage stage; + + public void init(Stage stage, Image icon, Controller controller) + { + this.stage = stage; + + vbox.setSpacing(10.0); + vbox.prefWidthProperty().bind(scrollPane.widthProperty().subtract(5.0)); + vbox.setAlignment(Pos.TOP_CENTER); + + ArrayList<TilePack> possibleTilePacks = new ArrayList<>(); + possibleTilePacks.add(new TilePackDefault()); + possibleTilePacks.add(new TilePackTest()); + + for(TilePack currentPack : possibleTilePacks) + { + HBox hbox = new HBox(); + Label labelName = new Label(currentPack.getName()); + labelName.setStyle("-fx-font-weight: bold; -fx-font-size: 16;"); + + Label labelTiles = new Label("(" + currentPack.getNumberOfTiles() + " Tiles)"); + labelTiles.setStyle("-fx-font-size: 16;"); + + Button buttonShowTiles = new Button("Show Tiles"); + buttonShowTiles.setStyle("-fx-font-weight: bold; -fx-font-size: 12;"); + buttonShowTiles.setOnAction(new EventHandler<ActionEvent>() + { + @Override + public void handle(ActionEvent event) + { + try + { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/deadlocker8/roadgame/ui/PossibleTilesGUI.fxml")); + Parent root = (Parent)fxmlLoader.load(); + Stage newStage = new Stage(); + newStage.initOwner(stage); + newStage.initModality(Modality.APPLICATION_MODAL); + newStage.setTitle("Possible Tiles"); + newStage.setScene(new Scene(root)); + newStage.getIcons().add(icon); + newStage.setResizable(false); + PossibleTilesController newController = fxmlLoader.getController(); + newController.init(newStage, controller, currentPack); + newStage.show(); + + } + catch(IOException io) + { + Logger.log(LogLevel.ERROR, Logger.exceptionToString(io)); + } + + } + }); + + hbox.getChildren().add(labelName); + Region r = new Region(); + hbox.getChildren().add(r); + HBox.setHgrow(r, Priority.ALWAYS); + hbox.getChildren().add(labelTiles); + hbox.getChildren().add(buttonShowTiles); + HBox.setMargin(buttonShowTiles, new Insets(0, 0, 0, 25)); + hbox.setStyle("-fx-border-color: #212121; -fx-border-width: 1; -fx-background-color: #CCCCCC"); + hbox.setPadding(new Insets(5)); + vbox.getChildren().add(hbox); + + hbox.setOnMouseClicked(new EventHandler<MouseEvent>() + { + @Override + public void handle(MouseEvent event) + { + if(event.getButton().equals(MouseButton.PRIMARY)) + { + controller.setTilePack(currentPack); + stage.close(); + } + } + }); + } + } + + public void back() + { + stage.close(); + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml b/src/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml new file mode 100644 index 0000000000000000000000000000000000000000..b13ba0a58796a7eb7e8a1a88e324746cb0cfcf3d --- /dev/null +++ b/src/de/deadlocker8/roadgame/ui/SelectTilePackGUI.fxml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ScrollPane?> +<?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + +<AnchorPane prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.roadgame.ui.SelectTilePackController"> + <children> + <ScrollPane fx:id="scrollPane" layoutX="14.0" layoutY="14.0" AnchorPane.bottomAnchor="56.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> + <content> + <VBox fx:id="vbox" prefHeight="231.0" prefWidth="272.0" /> + </content> + </ScrollPane> + <Button fx:id="buttonBack" layoutX="119.0" layoutY="256.0" mnemonicParsing="false" onAction="#back" prefHeight="30.0" prefWidth="63.0" text="Back" AnchorPane.bottomAnchor="14.0"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> + </children> +</AnchorPane>