Skip to content

Commit

Permalink
Make PlayerSelectionPanel less flicky
Browse files Browse the repository at this point in the history
  • Loading branch information
fathzer committed Feb 19, 2024
1 parent 8a8e1ce commit 09b83cb
Show file tree
Hide file tree
Showing 10 changed files with 144 additions and 111 deletions.
7 changes: 7 additions & 0 deletions src/main/java/com/fathzer/jchess/bot/Engine.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,19 @@
import java.util.List;

import com.fathzer.games.clock.CountDownState;
import com.fathzer.jchess.settings.GameSettings.Variant;

public interface Engine extends Closeable {
String getName();

List<Option<?>> getOptions();

/** Tests whether a variant is supported or not by this engine.
* @param variant A variant
* @return true if the variant is supported
*/
boolean isSupported(Variant variant);

/** Starts a new game.
* @param variant The game variant
* @return false if the variant is not supported
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/com/fathzer/jchess/bot/Variant.java

This file was deleted.

11 changes: 8 additions & 3 deletions src/main/java/com/fathzer/jchess/bot/uci/UCIEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import com.fathzer.jchess.bot.Option;
import com.fathzer.jchess.bot.Option.Type;
import com.fathzer.jchess.bot.uci.EngineLoader.EngineData;
import com.fathzer.jchess.bot.Variant;
import com.fathzer.jchess.settings.GameSettings.Variant;

import lombok.extern.slf4j.Slf4j;

Expand Down Expand Up @@ -116,16 +116,21 @@ public String getName() {
public List<Option<?>> getOptions() {
return options;
}

@Override
public boolean isSupported(Variant variant) {
return variant==Variant.STANDARD || (variant==Variant.CHESS960 && is960Supported);
}

@Override
public boolean newGame(Variant variant) {
positionSet = false;
if (variant==Variant.CHESS_960 && !is960Supported) {
if (variant==Variant.CHESS960 && !is960Supported) {
return false;
}
write("ucinewgame");
if (is960Supported) {
write("setoption name "+CHESS960_OPTION + " value "+(variant==Variant.CHESS_960));
write("setoption name "+CHESS960_OPTION + " value "+(variant==Variant.CHESS960));
}
write("isready");
return waitAnswer("readyok"::equals)!=null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
import com.fathzer.jchess.ai.evaluator.SimplifiedEvaluator;
import com.fathzer.jchess.bot.Engine;
import com.fathzer.jchess.bot.Option;
import com.fathzer.jchess.bot.Variant;
import com.fathzer.jchess.bot.options.ComboOption;
import com.fathzer.jchess.bot.options.SpinOption;
import com.fathzer.jchess.fen.FENUtils;
import com.fathzer.jchess.lichess.DefaultOpenings;
import com.fathzer.jchess.settings.GameSettings.Variant;
import com.fathzer.jchess.time.VuckovicSolakOracle;
import com.fathzer.jchess.uci.JChessUCIEngine;
import com.fathzer.jchess.uci.UCIMove;
Expand Down Expand Up @@ -73,6 +73,11 @@ public List<Option<?>> getOptions() {
return options;
}

@Override
public boolean isSupported(Variant variant) {
return true;
}

@Override
public boolean newGame(Variant variant) {
board = null;
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/com/fathzer/jchess/settings/GameSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,6 @@ public Color getColor() {
}
}

public enum PlayerType {
HUMAN, ENGINE;
}

@NoArgsConstructor
@AllArgsConstructor
@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public ClockSettingsPanel() {
add(timeField, timeFieldGbc);
timeField.setColumns(5);

final JLabel incrementLabel = new JLabel("Increment (s): ");
final JLabel incrementLabel = new JLabel("Increment: ");
GridBagConstraints incrementLabelGbc = new GridBagConstraints();
incrementLabelGbc.anchor = GridBagConstraints.WEST;
incrementLabelGbc.insets = new Insets(0, 0, 5, 5);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import java.awt.BorderLayout;
import javax.swing.ListSelectionModel;

public class ExternalEnginesPanel extends JPanel {
public class EnginesPanel extends JPanel {
static final String STARTED_PROPERTY_NAME = "Started engines";

private static final class Renderer extends DefaultListCellRenderer {
Expand All @@ -52,7 +52,7 @@ public Component getListCellRendererComponent(JList<?> list, Object value, int i
private transient List<EngineData> data;
private Predicate<EngineData> isLocked;

private ExternalEnginesPanel() {
private EnginesPanel() {
GridBagLayout gridBagLayout = new GridBagLayout();
setLayout(gridBagLayout);

Expand Down Expand Up @@ -153,7 +153,7 @@ private ExternalEnginesPanel() {
/**
* Create the panel.
*/
public ExternalEnginesPanel(List<EngineData> data, Predicate<EngineData> isLocked) {
public EnginesPanel(List<EngineData> data, Predicate<EngineData> isLocked) {
this();
this.data = data;
this.isLocked = isLocked;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.fathzer.jchess.bot.uci.EngineLoader.EngineData;
import com.fathzer.jchess.settings.Context;
import com.fathzer.jchess.settings.GameSettings;
import com.fathzer.jchess.swing.settings.PlayerSelectionPanel.Player;

import java.awt.GridBagLayout;
import javax.swing.JLabel;
Expand All @@ -14,6 +15,8 @@
import java.awt.GridBagConstraints;
import javax.swing.JComboBox;
import java.awt.Insets;
import java.util.Objects;

import javax.swing.JCheckBox;
import javax.swing.border.TitledBorder;

Expand All @@ -31,8 +34,8 @@ public class GameSettingsPanel extends JPanel {
private PlayerSelectionPanel player2Panel;
private JCheckBox startAfterFirstMoveCheckBox;

private String player1EngineName;
private String player2EngineName;
private transient Player player1;
private transient Player player2;

/**
* Create the panel.
Expand Down Expand Up @@ -155,17 +158,23 @@ private GameSettingsPanel() {
timeDetailsPanelGbc.gridy = 2;
timePanel.add(timeDetailsPanel, timeDetailsPanelGbc);

variantCombo.addActionListener(e -> {
final Variant variant = (Variant) variantCombo.getSelectedItem();
player1Panel.setVariant(variant);
player2Panel.setVariant(variant);
});

timeControlCheckBox.addItemListener(e -> {
boolean enabled = timeControlCheckBox.isSelected();
timeDetailsPanel.setEnabled(enabled);
startAfterFirstMoveCheckBox.setEnabled(enabled);
});

player1Panel.addPropertyChangeListener(PlayerSelectionPanel.SELECTED_ENGINE_PROPERTY_NAME, e -> {
player1EngineName = (String) e.getNewValue();
player1Panel.addPropertyChangeListener(PlayerSelectionPanel.SELECTED_PLAYER_PROPERTY_NAME, e -> {
player1 = (Player) e.getNewValue();
});
player2Panel.addPropertyChangeListener(PlayerSelectionPanel.SELECTED_ENGINE_PROPERTY_NAME, e -> {
player2EngineName = (String) e.getNewValue();
player2Panel.addPropertyChangeListener(PlayerSelectionPanel.SELECTED_PLAYER_PROPERTY_NAME, e -> {
player2 = (Player) e.getNewValue();
});
}

Expand All @@ -187,8 +196,8 @@ private void setSettings(Context context) {

this.variantCombo.setSelectedItem(settings.getVariant());

this.player1Panel.setSettings(settings.getPlayer1(), context.getEngines());
this.player2Panel.setSettings(settings.getPlayer2(), context.getEngines());
this.player1Panel.setSettings(settings.getPlayer1(), context.getEngines(), settings.getVariant());
this.player2Panel.setSettings(settings.getPlayer2(), context.getEngines(), settings.getVariant());
this.player1Panel.setColor(settings.getPlayer1Color());
}

Expand All @@ -208,7 +217,6 @@ public void engineStoped(EngineData engine) {
}

boolean isEngineInUse(EngineData engine) {
final String name = engine.getName();
return name.equals(player1EngineName) || name.equals(player2EngineName);
return Objects.equals(engine, player1.engine) || Objects.equals(engine, player2.engine);
}
}
Loading

0 comments on commit 09b83cb

Please sign in to comment.