Skip to content
This repository has been archived by the owner on Nov 29, 2017. It is now read-only.

Commit

Permalink
Merge pull request #32 from GoSuji/prettification
Browse files Browse the repository at this point in the history
Prettification
  • Loading branch information
vapour101 committed Sep 15, 2017
2 parents b4abc6a + a6b21cf commit 7557c2e
Show file tree
Hide file tree
Showing 21 changed files with 661 additions and 225 deletions.
8 changes: 6 additions & 2 deletions src/main/java/event/EventBus.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,12 @@ public static <T extends Event> void addEventHandler(EventType<T> eventType, Eve
}

public static EventBus getInstance() {
if ( instance == null )
instance = new EventBus();
if ( instance == null ) {
synchronized (EventBus.class) {
if ( instance == null )
instance = new EventBus();
}
}

return instance;
}
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/ui/controller/BoardController.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import logic.gamehandler.GameHandler;
import ui.drawer.BoardDrawer;
import ui.drawer.GameDrawer;

import java.net.URL;
import java.util.ResourceBundle;
Expand All @@ -41,7 +41,7 @@ public abstract class BoardController extends SelfBuildingController implements

GameHandler game;
Canvas boardCanvas;
BoardDrawer boardDrawer;
GameDrawer gameDrawer;

BoardController() {
game = buildGameHandler();
Expand Down Expand Up @@ -70,13 +70,14 @@ private void constructCanvas() {
boardCanvas = new Canvas();
boardCanvas.setOnMouseMoved(this::canvasHover);
boardCanvas.setOnMouseClicked(this::canvasClicked);
boardCanvas.setOnMouseExited(this::canvasExit);

boardPane.getChildren().add(boardCanvas);

boardDrawer = buildBoardDrawer();
gameDrawer = buildGameDrawer();
}

abstract BoardDrawer buildBoardDrawer();
abstract GameDrawer buildGameDrawer();

private void resizeCanvas(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
boardCanvas.setHeight(boardPane.getHeight());
Expand All @@ -89,6 +90,8 @@ private void resizeCanvas(ObservableValue<? extends Number> observableValue, Num

abstract void canvasHover(MouseEvent mouseEvent);

abstract void canvasExit(MouseEvent mouseEvent);

abstract void enterScoring(GameEvent event);

abstract void reviewStart(GameEvent event);
Expand Down
57 changes: 46 additions & 11 deletions src/main/java/ui/controller/LocalGameController.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@
import event.GameEvent;
import event.ScoreEvent;
import event.decorators.GameHandlerEventDecorator;
import javafx.scene.image.Image;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import logic.gamehandler.GameHandler;
import logic.gamehandler.LocalGameHandler;
import logic.score.Scorer;
import ui.drawer.BoardDrawer;
import ui.drawer.BoardScoreDrawer;
import ui.drawer.*;
import util.*;

import java.net.URL;
Expand Down Expand Up @@ -84,8 +84,22 @@ void setupPanes() {
}

@Override
BoardDrawer buildBoardDrawer() {
return new BoardDrawer(boardCanvas, game);
GameDrawer buildGameDrawer() {
GameDrawer drawer = new GameDrawer(boardCanvas, game);

Image blackStone = new Image("/black.png", false);
Image whiteStone = new Image("/white.png", false);

StoneDrawer stoneDrawer = new TexturedStoneDrawer(boardCanvas, blackStone, whiteStone);
drawer.setStoneDrawer(stoneDrawer);

Image wood = new Image("/wood.jpg", false);
Image lines = new Image("/grid.png", false);

BoardDrawer boardDrawer = new TexturedBoardDrawer(boardCanvas, wood, lines);
drawer.setBoardDrawer(boardDrawer);

return drawer;
}

@Override
Expand All @@ -96,12 +110,14 @@ void gameEventHandler(GameEvent event) {

@Override
void canvasClicked(MouseEvent mouseEvent) {

DrawCoords mousePosition = new DrawCoords(mouseEvent.getX(), mouseEvent.getY());
CoordProjector projector = new CoordProjector(getBoardLength(boardCanvas),
DimensionHelper.getTopLeftCorner(boardCanvas));
Coords boardPos = projector.nearestCoords(mousePosition);

if ( !projector.isWithinBounds(mousePosition) )
return;

if ( gameState == LocalGameController.GameState.SCORING ) {
scorePaneController.enableButtons();
if ( mouseEvent.getButton() == MouseButton.PRIMARY )
Expand All @@ -122,8 +138,15 @@ void canvasHover(MouseEvent mouseEvent) {
return;

DrawCoords mousePosition = new DrawCoords(mouseEvent.getX(), mouseEvent.getY());
drawBoard();
boardDrawer.drawGhostStone(mousePosition, getTurnPlayer());
gameDrawer.setHoverStone(mousePosition, getTurnPlayer());
}

@Override
void canvasExit(MouseEvent mouseEvent) {
if ( gameState != GameState.PLAYING )
return;

gameDrawer.setHoverStone(new DrawCoords(-1, -1), getTurnPlayer());
}


Expand All @@ -138,15 +161,27 @@ void enterScoring(GameEvent event) {
scorePaneController.setScorer(boardScorer);
scorePaneController.setVisible(true);

boardDrawer = new BoardScoreDrawer(boardCanvas, game, boardScorer);
boardDrawer.draw();
gameDrawer = buildBoardScoreDrawer();
gameDrawer.draw();
ScoreEvent.fireScoreEvent(boardScorer);
}

private GameScoreDrawer buildBoardScoreDrawer() {
GameScoreDrawer drawer = new GameScoreDrawer(boardCanvas, game, boardScorer);

Image blackStone = new Image("/black.png", false);
Image whiteStone = new Image("/white.png", false);

StoneDrawer stoneDrawer = new TexturedStoneDrawer(boardCanvas, blackStone, whiteStone);
drawer.setStoneDrawer(stoneDrawer);

return drawer;
}

@Override
void reviewStart(GameEvent event) {
gameState = GameState.REVIEW;
boardDrawer = buildBoardDrawer();
gameDrawer = buildGameDrawer();
}

private StoneColour getTurnPlayer() {
Expand All @@ -156,7 +191,7 @@ private StoneColour getTurnPlayer() {
private void drawBoard() {
if ( gameState == GameState.SCORING )
return;
boardDrawer.draw();
gameDrawer.draw();
}

private void loadScorePane() {
Expand Down
138 changes: 13 additions & 125 deletions src/main/java/ui/drawer/BoardDrawer.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,154 +17,42 @@

package ui.drawer;

import javafx.beans.Observable;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import logic.gamehandler.GameHandler;
import util.*;
import util.CoordProjector;
import util.DimensionHelper;
import util.DrawCoords;

import java.util.Collection;

import static util.Coords.getCoords;
import static util.DimensionHelper.getBoardLength;
import static util.DimensionHelper.getTopLeftCorner;
import static util.HandicapHelper.getHandicapStones;

public class BoardDrawer {
public abstract class BoardDrawer {

private Canvas canvas;
private GameHandler game;

public BoardDrawer(Canvas canvas, GameHandler game) {
BoardDrawer(Canvas canvas) {
this.canvas = canvas;
this.game = game;
canvas.widthProperty().addListener(this::onCanvasResize);
canvas.heightProperty().addListener(this::onCanvasResize);
}

private void onCanvasResize(Observable observable) {
draw();
}

public void draw() {
drawBackground();
drawBoardTexture();
drawBoardLines();
drawStones();
}

private void drawStones() {
for (StoneColour colour : StoneColour.values())
drawStones(colour);
}

void drawStones(StoneColour colour) {
double radius = getStoneRadius();

Collection<Coords> stones = getStones(colour);
drawStonesToCanvas(stones, radius, colour);
drawLines();
}

Collection<Coords> getStones(StoneColour colour) {
return game.getStones(colour);
}

public void drawGhostStone(DrawCoords position, StoneColour colour) {
double radius = getStoneRadius();
CoordProjector projector = new CoordProjector(getBoardLength(canvas), getTopLeftCorner(canvas));
GraphicsContext context = getGraphicsContext();
Coords boardPos = projector.nearestCoords(position);
DrawCoords pos = projector.fromBoardCoords(boardPos);

context.setGlobalAlpha(0.5);
abstract void drawBackground();

if ( game.isLegalMove(Move.play(boardPos, colour)) ) {
drawStoneToCanvas(pos, radius, colour);
}

context.setGlobalAlpha(1);
}

double getStoneRadius() {
return getBoardLength(canvas) / (19 + 1) / 2;
}
abstract void drawLines();

GraphicsContext getGraphicsContext() {
return canvas.getGraphicsContext2D();
}

void drawStoneToCanvas(DrawCoords position, double radius, StoneColour colour) {
GraphicsContext context = getGraphicsContext();

if ( colour == StoneColour.BLACK )
context.setFill(Paint.valueOf("#000000"));
else
context.setFill(Paint.valueOf("#FFFFFF"));

drawCircle(position, radius);
double getBoardLength() {
return DimensionHelper.getBoardLength(canvas);
}

private void drawCircle(DrawCoords position, double radius) {
double left = position.getX() - radius;
double top = position.getY() - radius;
double diameter = 2 * radius;

getGraphicsContext().fillOval(left, top, diameter, diameter);
DrawCoords getTopLeftCorner() {
return DimensionHelper.getTopLeftCorner(canvas);
}

CoordProjector getProjector() {
return new CoordProjector(getBoardLength(canvas), getTopLeftCorner(canvas));
}

void drawStonesToCanvas(Collection<Coords> stones, double radius, StoneColour colour) {
for (Coords stone : stones) {
drawStoneToCanvas(getProjector().fromBoardCoords(stone), radius, colour);
}
}

private void drawBackground() {
GraphicsContext context = getGraphicsContext();

context.setFill(Color.GREEN);
context.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
}

private void drawBoardTexture() {
DrawCoords topLeft = getTopLeftCorner(canvas);
GraphicsContext context = getGraphicsContext();
double length = getBoardLength(canvas);

context.setFill(Color.web("0xB78600"));
context.fillRect(topLeft.getX(), topLeft.getY(), length, length);
}

private void drawBoardLines() {
CoordProjector projector = getProjector();

GraphicsContext context = getGraphicsContext();

for (int i = 1; i < 20; i++) {
//Horizontal Lines
DrawCoords start = projector.fromBoardCoords(getCoords(1, i));
DrawCoords end = projector.fromBoardCoords(getCoords(19, i));

context.strokeLine(start.getX(), start.getY(), end.getX(), end.getY());

//Vertical Lines
start = projector.fromBoardCoords(getCoords(i, 1));
end = projector.fromBoardCoords(getCoords(i, 19));

context.strokeLine(start.getX(), start.getY(), end.getX(), end.getY());
}

for (Coords c : getHandicapStones(9)) {
DrawCoords star = projector.fromBoardCoords(c);
double radius = context.getLineWidth() * 4;

context.setFill(Paint.valueOf("#000000"));
drawCircle(star, radius);
}
return DimensionHelper.getProjector(canvas);
}
}
Loading

0 comments on commit 7557c2e

Please sign in to comment.