Skip to content

Commit

Permalink
WIP BoardUI implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Max committed Apr 22, 2024
1 parent 0da55be commit 1cff5fd
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 22 deletions.
37 changes: 22 additions & 15 deletions src/ch/epfl/chacun/gui/BoardUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;

import static ch.epfl.chacun.gui.ImageLoader.LARGE_TILE_FIT_SIZE;
import static ch.epfl.chacun.gui.ImageLoader.NORMAL_TILE_FIT_SIZE;

/**
Expand All @@ -23,16 +26,15 @@
*/
public final class BoardUI {

private static final double EMPTY_TILE_GRAY_SCALE = 0.98;

/**
* Non-instantiable class constructor.
*/
private BoardUI() {
}

public static Node create(int reach, ObservableValue<GameState> gameStateO, ObservableValue<Rotation> rotationO,
ObservableValue<Set<Occupant>> occupantsO, ObservableValue<Set<Integer>> tileIdsO,
Consumer<Rotation> rotationToApply, Consumer<Pos> tileToPlacePos,
Consumer<Occupant> selectedOccupant) {
public static Node create(int reach, ObservableValue<GameState> gameStateO, ObservableValue<Rotation> rotationO, ObservableValue<Set<Occupant>> occupantsO, ObservableValue<Set<Integer>> tileIdsO, Consumer<Rotation> rotationToApply, Consumer<Pos> tileToPlacePos, Consumer<Occupant> selectedOccupant) {

Preconditions.checkArgument(reach > 0);

Expand All @@ -43,24 +45,29 @@ public static Node create(int reach, ObservableValue<GameState> gameStateO, Obse
GridPane gridPane = new GridPane();
gridPane.setId("board-grid");

ObservableValue<Board> boardO = gameStateO.map(GameState::board);
WritableImage emptyTileImage = new WritableImage(1, 1);
emptyTileImage.getPixelWriter().setColor(0, 0, Color.gray(EMPTY_TILE_GRAY_SCALE));

Map<Integer, Image> tileImagesCache = new HashMap<>();

for (int x = -reach; x <= reach; ++x) {
for (int y = -reach; y <= reach; ++y) {
ImageView view = new ImageView();
view.setFitHeight(NORMAL_TILE_FIT_SIZE);
view.setFitWidth(NORMAL_TILE_FIT_SIZE);
// Display the image of the tile to place
int finalX = x;
int finalY = y;
boardO.addListener((_, _, board) -> {
PlacedTile placedTile = board.tileAt(new Pos(finalX, finalY));
if (placedTile != null) {
Image newImage = ImageLoader.largeImageForTile(placedTile.id());
view.setImage(newImage);
}

Pos tilePos = new Pos(x, y);
ObservableValue<PlacedTile> placedTileO = gameStateO
.map(gameState -> gameState.board().tileAt(tilePos));

// Reactive image data
ObservableValue<Image> tileImageO = placedTileO.map(placedTile -> {
if (placedTile != null)
return tileImagesCache.computeIfAbsent(placedTile.id(), ImageLoader::normalImageForTile);
return emptyTileImage;
});

view.imageProperty().bind(tileImageO);
gridPane.getChildren().add(new Group(view));
}
}
Expand Down
9 changes: 2 additions & 7 deletions src/ch/epfl/chacun/gui/DecksUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,8 @@ private static StackPane createNextTileCover(ObservableValue<Tile> tileToPlaceO,
view.setFitWidth(LARGE_TILE_FIT_SIZE);
view.visibleProperty().bind(textToDisplayO.map(String::isEmpty));
// Display the image of the tile to place
Image image = ImageLoader.largeImageForTile(tileToPlaceO.getValue().id());
view.setImage(image);
tileToPlaceO.addListener((_, _, newTile) -> {
Image newImage = ImageLoader.largeImageForTile(newTile.id());
view.setImage(newImage);
});

ObservableValue<Image> nextTileImage = tileToPlaceO.map(tile -> ImageLoader.largeImageForTile(tile.id()));
view.imageProperty().bind(nextTileImage);
// Display the text of the special action and register a mouse click event to skip it
Text text = new Text();
text.textProperty().bind(textToDisplayO);
Expand Down

0 comments on commit 1cff5fd

Please sign in to comment.