mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 10:54:51 +00:00
legal move highlight and onhover effect added back
This commit is contained in:
@@ -2,9 +2,13 @@ package org.toop.app.canvas;
|
|||||||
|
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import org.toop.app.App;
|
import org.toop.app.App;
|
||||||
|
import org.toop.framework.game.games.reversi.BitboardReversi;
|
||||||
|
import org.toop.framework.game.players.LocalPlayer;
|
||||||
import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
||||||
|
|
||||||
public class ReversiBitCanvas extends BitGameCanvas {
|
public class ReversiBitCanvas extends BitGameCanvas {
|
||||||
|
private TurnBasedGame gameCopy;
|
||||||
|
private int previousCell;
|
||||||
public ReversiBitCanvas() {
|
public ReversiBitCanvas() {
|
||||||
super(Color.GRAY, new Color(0f, 0.4f, 0.2f, 1f), (App.getHeight() / 4) * 3, (App.getHeight() / 4) * 3, 8, 8, 5, true);
|
super(Color.GRAY, new Color(0f, 0.4f, 0.2f, 1f), (App.getHeight() / 4) * 3, (App.getHeight() / 4) * 3, 8, 8, 5, true);
|
||||||
canvas.setOnMouseMoved(event -> {
|
canvas.setOnMouseMoved(event -> {
|
||||||
@@ -20,6 +24,9 @@ public class ReversiBitCanvas extends BitGameCanvas {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (hovered != null) {
|
||||||
|
checkHoverDots(hovered, cellId);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,9 +38,31 @@ public class ReversiBitCanvas extends BitGameCanvas {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void redraw(TurnBasedGame gameCopy) {
|
public void redraw(TurnBasedGame gameCopy) {
|
||||||
|
this.gameCopy = gameCopy;
|
||||||
clearAll();
|
clearAll();
|
||||||
long[] board = gameCopy.getBoard();
|
long[] board = gameCopy.getBoard();
|
||||||
loopOverBoard(board[0], (i) -> drawDot(Color.WHITE, i));
|
loopOverBoard(board[0], (i) -> drawDot(Color.WHITE, i));
|
||||||
loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i));
|
loopOverBoard(board[1], (i) -> drawDot(Color.BLACK, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void drawLegalDots(TurnBasedGame gameCopy){
|
||||||
|
long legal = gameCopy.getLegalMoves();
|
||||||
|
loopOverBoard(legal, (i) -> drawInnerDot(gameCopy.getCurrentTurn()==0?new Color(1f,1f,1f,0.65f) :new Color(0f,0f,0f,0.65f), i,false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkHoverDots(BitGameCanvas.Cell hovered, int cellId){
|
||||||
|
if (previousCell == cellId){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
long backflips = ((BitboardReversi)gameCopy).getFlips(1L << previousCell);
|
||||||
|
loopOverBoard(backflips, (i) -> drawInnerDot(gameCopy.getCurrentTurn()==1?Color.WHITE:Color.BLACK, i,true));
|
||||||
|
previousCell = cellId;
|
||||||
|
if (gameCopy.getPlayer(gameCopy.getCurrentTurn()) instanceof LocalPlayer) {
|
||||||
|
long legal = gameCopy.getLegalMoves();
|
||||||
|
if ((legal & (1L << cellId)) != 0) {
|
||||||
|
long flips = ((BitboardReversi) gameCopy).getFlips(1L << cellId);
|
||||||
|
loopOverBoard(flips, (i) -> drawInnerDot(gameCopy.getCurrentTurn() == 0 ? Color.WHITE : Color.BLACK, i, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import javafx.geometry.Pos;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.toop.app.canvas.GameCanvas;
|
import org.toop.app.canvas.GameCanvas;
|
||||||
|
import org.toop.app.canvas.ReversiBitCanvas;
|
||||||
import org.toop.app.widget.WidgetContainer;
|
import org.toop.app.widget.WidgetContainer;
|
||||||
import org.toop.app.widget.view.GameView;
|
import org.toop.app.widget.view.GameView;
|
||||||
import org.toop.framework.eventbus.EventFlow;
|
import org.toop.framework.eventbus.EventFlow;
|
||||||
@@ -153,8 +154,12 @@ public class GenericGameController implements GameController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateUI() {
|
public void updateUI() {
|
||||||
canvas.redraw(game.deepCopy());
|
TurnBasedGame gameCopy = game.deepCopy();
|
||||||
|
canvas.redraw(gameCopy);
|
||||||
String gameType = game.getClass().getSimpleName().replace("Bitboard","");
|
String gameType = game.getClass().getSimpleName().replace("Bitboard","");
|
||||||
gameView.nextPlayer(true, getCurrentPlayer().getName(), game.getPlayer(1-getCurrentPlayerIndex()).getName(),gameType);
|
gameView.nextPlayer(true, getCurrentPlayer().getName(), game.getPlayer(1-getCurrentPlayerIndex()).getName(),gameType);
|
||||||
|
if (getCurrentPlayer() instanceof LocalPlayer && gameType.equals("Reversi")){
|
||||||
|
((ReversiBitCanvas)canvas).drawLegalDots(gameCopy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user