Skip to content

Commit

Permalink
Merge #656
Browse files Browse the repository at this point in the history
  • Loading branch information
Hiraoka committed Sep 28, 2020
2 parents 8ba7fe6 + 5bdd190 commit 9eddc06
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 15 deletions.
10 changes: 10 additions & 0 deletions src/main/java/featurecat/lizzie/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public class Config {
public boolean showKataGoEstimateOnSubboard = true;
public boolean showKataGoEstimateOnMainboard = true;
public String kataGoEstimateMode = "small+dead";
public boolean kataGoEstimateBlend = true;

public boolean showStatus = true;
public boolean showBranch = true;
Expand Down Expand Up @@ -243,6 +244,7 @@ public Config() throws IOException {
showKataGoEstimateOnSubboard = uiConfig.optBoolean("show-katago-estimate-onsubboard", true);
showKataGoEstimateOnMainboard = uiConfig.optBoolean("show-katago-estimate-onmainboard", true);
kataGoEstimateMode = uiConfig.optString("katago-estimate-mode", "small+dead");
kataGoEstimateBlend = uiConfig.optBoolean("katago-estimate-blend", true);
showWinrateInSuggestion = uiConfig.optBoolean("show-winrate-in-suggestion", true);
showPlayoutsInSuggestion = uiConfig.optBoolean("show-playouts-in-suggestion", true);
showScoremeanInSuggestion = uiConfig.optBoolean("show-scoremean-in-suggestion", true);
Expand Down Expand Up @@ -385,6 +387,7 @@ public void toggleShowPolicy() {

public void toggleKataGoEstimate() {
showKataGoEstimate = !showKataGoEstimate;
uiConfig.put("show-katago-estimate", showKataGoEstimate);
}

public void cycleKataGoEstimateMode() {
Expand Down Expand Up @@ -412,6 +415,12 @@ public void cycleKataGoEstimateMode() {
kataGoEstimateMode = "small";
break;
}
uiConfig.put("katago-estimate-mode", kataGoEstimateMode);
}

public void toggleKataGoEstimateBlend() {
kataGoEstimateBlend = !kataGoEstimateBlend;
uiConfig.put("katago-estimate-blend", kataGoEstimateBlend);
}

public void toggleShowStatus() {
Expand Down Expand Up @@ -546,6 +555,7 @@ private JSONObject createDefaultConfig() {
ui.put("show-katago-estimate-onsubboard", true);
ui.put("show-katago-estimate-onmainboard", true);
ui.put("katago-estimate-mode", "small");
ui.put("katago-estimate-blend", true);
config.put("ui", ui);
return config;
}
Expand Down
39 changes: 24 additions & 15 deletions src/main/java/featurecat/lizzie/gui/BoardRenderer.java
Original file line number Diff line number Diff line change
Expand Up @@ -1788,6 +1788,10 @@ public void removeEstimateRect() {
cachedEstimateSmallRectImage = new BufferedImage(boardWidth, boardHeight, TYPE_INT_ARGB);
}

public static int roundToInt(double number) {
return (int) round(number);
}

// isZen: estimates are for black (Zen) rather than player to move (KataGo)
// and estimates are just <0/=0/>0 (Zen) rather than -1..+1 (KataGo)
public void drawEstimateRect(ArrayList<Double> estimateArray, boolean isZen) {
Expand Down Expand Up @@ -1840,13 +1844,10 @@ public void drawEstimateRect(ArrayList<Double> estimateArray, boolean isZen) {
double estimate = estimateArray.get(i);
if (isZen) {
// Zen's estimates are only <0 / =0 / >0
if (estimate < 0) estimate = -1;
else if (estimate > 0) estimate = +1;
}
boolean isBlack = (estimate > 0);
if (!isZen) {
estimate = Math.signum(estimate);
} else {
// KataGo's estimates are for player to move, not for black.
if (!Lizzie.board.getHistory().isBlacksTurn()) isBlack = !isBlack;
if (!Lizzie.board.getHistory().isBlacksTurn()) estimate = -estimate;
}
int[] c = Lizzie.board.getCoord(i);
int x = c[1];
Expand All @@ -1855,13 +1856,20 @@ public void drawEstimateRect(ArrayList<Double> estimateArray, boolean isZen) {
int stoneY = scaledMarginHeight + squareHeight * y;
// g.setColor(Color.BLACK);

int grey = isBlack ? 0 : 255;
double alpha = Math.abs(estimate);
boolean blend = Lizzie.config.kataGoEstimateBlend;
int grey;
double alpha = 255;
if (blend) {
grey = (estimate > 0) ? 0 : 255;
alpha *= Math.abs(estimate);
} else {
grey = roundToInt((1 - estimate) * 255 / 2.0);
}

// Large rectangles (will go behind stones).

if (drawLarge) {
Color cl = new Color(grey, grey, grey, (int) (255 * (0.75 * alpha)));
Color cl = new Color(grey, grey, grey, roundToInt(blend ? 0.75 * alpha : alpha));
gl.setColor(cl);
gl.fillRect(
(int) (stoneX - squareWidth * 0.5),
Expand All @@ -1873,17 +1881,18 @@ public void drawEstimateRect(ArrayList<Double> estimateArray, boolean isZen) {
// Small rectangles (will go on top of stones; perhaps only "dead" stones).

Stone stoneHere = Lizzie.board.getStones()[Board.getIndex(x, y)];
boolean differentColor = isBlack ? stoneHere.isWhite() : stoneHere.isBlack();
boolean anyColor = stoneHere.isWhite() || stoneHere.isBlack();
boolean deadStone =
(estimate >= 0 && stoneHere.isWhite()) || (estimate <= 0 && stoneHere.isBlack());
boolean anyStone = stoneHere.isWhite() || stoneHere.isBlack();
boolean allowed =
drawSmart == 0
|| (drawSmart == 1 && differentColor)
|| (drawSmart == 2 && anyColor)
|| (drawSmart == 1 && !anyColor && drawSmall);
|| (drawSmart == 1 && deadStone)
|| (drawSmart == 2 && anyStone)
|| (drawSmart == 1 && !anyStone && drawSmall);
if (drawSmall && allowed) {
double lengthFactor = drawSize ? 2 * convertLength(estimate) : 1.2;
int length = (int) (lengthFactor * stoneRadius);
int ialpha = drawSize ? 180 : (int) (255 * alpha);
int ialpha = (blend && drawSize) ? 180 : roundToInt(alpha);
Color cl = new Color(grey, grey, grey, ialpha);
gs.setColor(cl);
gs.fillRect(stoneX - length / 2, stoneY - length / 2, length, length);
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/featurecat/lizzie/gui/Input.java
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,8 @@ public void keyPressed(KeyEvent e) {
if (Lizzie.leelaz.isKataGo) {
if (e.isAltDown()) {
Lizzie.frame.toggleEstimateByZen();
} else if (e.isShiftDown()) {
if (Lizzie.config.showKataGoEstimate) Lizzie.config.toggleKataGoEstimateBlend();
} else {
if (e.isControlDown()) {
// ctrl-. cycles modes, but only if estimates being displayed
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/featurecat/lizzie/gui/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -916,6 +916,22 @@ public void actionPerformed(ActionEvent e) {
}
});

final JCheckBoxMenuItem kataEstimateBlend =
new JCheckBoxMenuItem(resourceBundle.getString("Menu.view.kataGo.kataEstimate.blend"));
kataEstimateBlend.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Lizzie.config.toggleKataGoEstimateBlend();
try {
Lizzie.config.save();
} catch (IOException es) {
// TODO Auto-generated catch block
}
}
});
kataEstimate.add(kataEstimateBlend);

viewMenu.addMenuListener(
new MenuListener() {
public void menuSelected(MenuEvent e) {
Expand Down Expand Up @@ -960,6 +976,7 @@ public void menuSelected(MenuEvent e) {
kataEstimateModeLargeAndStones.setState(
Lizzie.config.kataGoEstimateMode.equals("large+stones"));
kataEstimateModeSize.setState(Lizzie.config.kataGoEstimateMode.equals("size"));
kataEstimateBlend.setState(Lizzie.config.kataGoEstimateBlend);
if (Lizzie.config.uiConfig.getBoolean("win-rate-always-black"))
winrateAlwaysBlack.setState(true);
else winrateAlwaysBlack.setState(false);
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/l10n/DisplayStrings.properties
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ Menu.view.kataGo.kataEstimate.mode.largeAndSmall=Large + small everywhere
Menu.view.kataGo.kataEstimate.mode.largeAndDead=Large + small on "dead" stones
Menu.view.kataGo.kataEstimate.mode.largeAndStones=Large + small on all stones
Menu.view.kataGo.kataEstimate.mode.size=Small, of varying size
Menu.view.kataGo.kataEstimate.blend=Blend with board
Menu.game=Game
Menu.game.newGame=NewGame(N)
Menu.game.continueGameBlack=Continue(Play black)
Expand Down

0 comments on commit 9eddc06

Please sign in to comment.