package com.hearthsim.gui;
import com.hearthsim.player.playercontroller.BruteForceSearchAI;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class HSSimulationSettingsFrame extends JDialog {
private static final long serialVersionUID = 1L;
private static final Color BACKGROUND_COLOR = new Color(64, 64, 64);
private static final Color SUCCESS_BUTTON_COLOR = new Color(67, 172, 106);
private JPanel contentPane;
private HSSimulation simulation_;
private JTextField fldNumSims;
private JTextField fldNumThreads;
private JTextField fldSimName;
private JCheckBox flag_useFastPlacement_p0;
private JCheckBox flag_useFastPlacement_p1;
private JCheckBox flag_useDuplicateNodePruning_p0;
private JCheckBox flag_useDuplicateNodePruning_p1;
/**
* Create the frame.
*/
public HSSimulationSettingsFrame(JFrame parent, HSSimulation simulation) {
super(parent, true);
simulation_ = simulation;
setBackground(BACKGROUND_COLOR);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(200, 200, 840, 560);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setBackground(BACKGROUND_COLOR);
setContentPane(contentPane);
SpringLayout sl_contentPane = new SpringLayout();
contentPane.setLayout(sl_contentPane);
JPanel bottom_panel = new JPanel();
bottom_panel.setBorder(new MatteBorder(1, 0, 0, 0, Color.GRAY));
bottom_panel.setBackground(BACKGROUND_COLOR);
sl_contentPane.putConstraint(SpringLayout.WEST, bottom_panel, 0, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, bottom_panel, 0, SpringLayout.SOUTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, bottom_panel, 0, SpringLayout.EAST, contentPane);
contentPane.add(bottom_panel);
JPanel main_panel = new JPanel();
main_panel.setBackground(BACKGROUND_COLOR);
sl_contentPane.putConstraint(SpringLayout.SOUTH, main_panel, -40, SpringLayout.SOUTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.NORTH, bottom_panel, 0, SpringLayout.SOUTH, main_panel);
bottom_panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton btnSettingsDone = new HSButton("Done");
btnSettingsDone.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
HSSimulationSettingsFrame.this.setVisible(false);
}
});
btnSettingsDone.setForeground(Color.WHITE);
btnSettingsDone.setBackground(SUCCESS_BUTTON_COLOR);
bottom_panel.add(btnSettingsDone);
sl_contentPane.putConstraint(SpringLayout.NORTH, main_panel, 0, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.WEST, main_panel, 0, SpringLayout.WEST, contentPane);
sl_contentPane.putConstraint(SpringLayout.EAST, main_panel, 0, SpringLayout.EAST, contentPane);
contentPane.add(main_panel);
SpringLayout sl_main_panel = new SpringLayout();
main_panel.setLayout(sl_main_panel);
JPanel settings_P0 = new JPanel();
sl_main_panel.putConstraint(SpringLayout.EAST, settings_P0, 240, SpringLayout.WEST, main_panel);
settings_P0.setBorder(new MatteBorder(0, 0, 0, 1, Color.GRAY));
sl_main_panel.putConstraint(SpringLayout.NORTH, settings_P0, 0, SpringLayout.NORTH, main_panel);
sl_main_panel.putConstraint(SpringLayout.WEST, settings_P0, 0, SpringLayout.WEST, main_panel);
sl_main_panel.putConstraint(SpringLayout.SOUTH, settings_P0, 0, SpringLayout.SOUTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.NORTH, settings_P0, 0, SpringLayout.NORTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.WEST, settings_P0, 0, SpringLayout.WEST, main_panel);
sl_contentPane.putConstraint(SpringLayout.SOUTH, settings_P0, 0, SpringLayout.SOUTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.EAST, settings_P0, 260, SpringLayout.WEST, main_panel);
main_panel.add(settings_P0);
settings_P0.setBackground(BACKGROUND_COLOR);
SpringLayout sl_settings_P0 = new SpringLayout();
settings_P0.setLayout(sl_settings_P0);
JPanel settings_P0_title = new JPanel();
settings_P0_title.setBackground(BACKGROUND_COLOR);
sl_settings_P0.putConstraint(SpringLayout.NORTH, settings_P0_title, 0, SpringLayout.NORTH, settings_P0);
sl_settings_P0.putConstraint(SpringLayout.WEST, settings_P0_title, 0, SpringLayout.WEST, settings_P0);
sl_settings_P0.putConstraint(SpringLayout.SOUTH, settings_P0_title, 40, SpringLayout.NORTH, settings_P0);
sl_settings_P0.putConstraint(SpringLayout.EAST, settings_P0_title, 0, SpringLayout.EAST, settings_P0);
settings_P0.add(settings_P0_title);
JLabel lblNewLabel = new JLabel("Player0");
lblNewLabel.setFont(new Font("Helvetica Neue", Font.PLAIN, 20));
lblNewLabel.setForeground(Color.WHITE);
settings_P0_title.add(lblNewLabel);
JPanel settings_P0_main = new JPanel();
settings_P0_main.setBackground(BACKGROUND_COLOR);
sl_settings_P0.putConstraint(SpringLayout.NORTH, settings_P0_main, 0, SpringLayout.SOUTH, settings_P0_title);
sl_settings_P0.putConstraint(SpringLayout.WEST, settings_P0_main, 0, SpringLayout.WEST, settings_P0);
sl_settings_P0.putConstraint(SpringLayout.SOUTH, settings_P0_main, 0, SpringLayout.SOUTH, settings_P0);
sl_settings_P0.putConstraint(SpringLayout.EAST, settings_P0_main, 0, SpringLayout.EAST, settings_P0);
settings_P0.add(settings_P0_main);
GridBagLayout gbl_settings_P0_main = new GridBagLayout();
gbl_settings_P0_main.rowHeights = new int[] {0, 28, 28, 28, 0};
gbl_settings_P0_main.columnWeights = new double[]{0.0, 0.0};
gbl_settings_P0_main.rowWeights = new double[]{0.0, Double.MIN_VALUE};
settings_P0_main.setLayout(gbl_settings_P0_main);
JLabel lblSettings_p0_0 = new JLabel("Fast Minion Placement");
lblSettings_p0_0.setForeground(HSColors.TEXT_COLOR);
GridBagConstraints gbc_lblSettings_p0_0 = new GridBagConstraints();
gbc_lblSettings_p0_0.insets = new Insets(0, 0, 0, 5);
gbc_lblSettings_p0_0.fill = GridBagConstraints.HORIZONTAL;
gbc_lblSettings_p0_0.gridx = 0;
gbc_lblSettings_p0_0.gridy = 0;
settings_P0_main.add(lblSettings_p0_0, gbc_lblSettings_p0_0);
flag_useFastPlacement_p0 = new JCheckBox("");
GridBagConstraints gbc_flag_useFastPlacement_p0 = new GridBagConstraints();
gbc_flag_useFastPlacement_p0.gridx = 1;
gbc_flag_useFastPlacement_p0.gridy = 0;
flag_useFastPlacement_p0.setSelected(((BruteForceSearchAI)simulation_.getAI_p0()).getUseSparseBoardStateFactory());
settings_P0_main.add(flag_useFastPlacement_p0, gbc_flag_useFastPlacement_p0);
//----------------------------------------------------------------------------
JLabel lblUseDuplicateNodePruning_p0_0 = new JLabel("Duplicate Node Pruning");
lblUseDuplicateNodePruning_p0_0.setForeground(HSColors.TEXT_COLOR);
GridBagConstraints gbc_lblUseDuplicateNodePruning_p0_0 = new GridBagConstraints();
gbc_lblUseDuplicateNodePruning_p0_0.insets = new Insets(0, 0, 0, 5);
gbc_lblUseDuplicateNodePruning_p0_0.fill = GridBagConstraints.HORIZONTAL;
gbc_lblUseDuplicateNodePruning_p0_0.gridx = 0;
gbc_lblUseDuplicateNodePruning_p0_0.gridy = 1;
settings_P0_main.add(lblUseDuplicateNodePruning_p0_0, gbc_lblUseDuplicateNodePruning_p0_0);
flag_useDuplicateNodePruning_p0 = new JCheckBox("");
GridBagConstraints gbc_flag_useDuplicateNodePruning_p0 = new GridBagConstraints();
gbc_flag_useDuplicateNodePruning_p0.gridx = 1;
gbc_flag_useDuplicateNodePruning_p0.gridy = 1;
flag_useDuplicateNodePruning_p0.setSelected(((BruteForceSearchAI)simulation_.getAI_p1()).getUseDuplicateNodePruning());
settings_P0_main.add(flag_useDuplicateNodePruning_p0, gbc_flag_useDuplicateNodePruning_p0);
//----------------------------------------------------------------------------
JPanel settings_P1 = new JPanel();
settings_P1.setBorder(new MatteBorder(0, 1, 0, 0, Color.GRAY));
sl_main_panel.putConstraint(SpringLayout.NORTH, settings_P1, 0, SpringLayout.NORTH, main_panel);
sl_main_panel.putConstraint(SpringLayout.WEST, settings_P1, -240, SpringLayout.EAST, main_panel);
sl_main_panel.putConstraint(SpringLayout.SOUTH, settings_P1, 0, SpringLayout.SOUTH, main_panel);
sl_main_panel.putConstraint(SpringLayout.EAST, settings_P1, 0, SpringLayout.EAST, main_panel);
sl_contentPane.putConstraint(SpringLayout.NORTH, settings_P1, 0, SpringLayout.NORTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.WEST, settings_P1, -260, SpringLayout.EAST, main_panel);
sl_contentPane.putConstraint(SpringLayout.SOUTH, settings_P1, 0, SpringLayout.SOUTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.EAST, settings_P1, 0, SpringLayout.EAST, main_panel);
main_panel.add(settings_P1);
settings_P1.setBackground(BACKGROUND_COLOR);
SpringLayout sl_settings_P1 = new SpringLayout();
settings_P1.setLayout(sl_settings_P1);
JPanel settings_P1_title = new JPanel();
settings_P1_title.setBackground(BACKGROUND_COLOR);
sl_settings_P1.putConstraint(SpringLayout.NORTH, settings_P1_title, 0, SpringLayout.NORTH, settings_P1);
sl_settings_P1.putConstraint(SpringLayout.WEST, settings_P1_title, 0, SpringLayout.WEST, settings_P1);
sl_settings_P1.putConstraint(SpringLayout.SOUTH, settings_P1_title, 40, SpringLayout.NORTH, settings_P1);
sl_settings_P1.putConstraint(SpringLayout.EAST, settings_P1_title, 0, SpringLayout.EAST, settings_P1);
settings_P1.add(settings_P1_title);
JLabel lblNewLabel_1 = new JLabel("Player1");
lblNewLabel_1.setFont(new Font("Helvetica Neue", Font.PLAIN, 20));
lblNewLabel_1.setForeground(Color.WHITE);
settings_P1_title.add(lblNewLabel_1);
JPanel settings_P1_main = new JPanel();
settings_P1_main.setBackground(BACKGROUND_COLOR);
sl_settings_P1.putConstraint(SpringLayout.NORTH, settings_P1_main, 0, SpringLayout.SOUTH, settings_P1_title);
sl_settings_P1.putConstraint(SpringLayout.WEST, settings_P1_main, 0, SpringLayout.WEST, settings_P1);
sl_settings_P1.putConstraint(SpringLayout.SOUTH, settings_P1_main, 0, SpringLayout.SOUTH, settings_P1);
sl_settings_P1.putConstraint(SpringLayout.EAST, settings_P1_main, 0, SpringLayout.EAST, settings_P1);
settings_P1.add(settings_P1_main);
GridBagLayout gbl_settings_P1_main = new GridBagLayout();
gbl_settings_P1_main.rowHeights = new int[] {0, 28, 28, 28, 0};
gbl_settings_P1_main.columnWeights = new double[]{0.0, 0.0};
gbl_settings_P1_main.rowWeights = new double[]{0.0, Double.MIN_VALUE};
settings_P1_main.setLayout(gbl_settings_P1_main);
JLabel lblSettings_p1_0 = new JLabel("Fast Minion Placement");
lblSettings_p1_0.setForeground(HSColors.TEXT_COLOR);
GridBagConstraints gbc_lblSettings_p1_0 = new GridBagConstraints();
gbc_lblSettings_p1_0.insets = new Insets(0, 0, 0, 5);
gbc_lblSettings_p1_0.fill = GridBagConstraints.HORIZONTAL;
gbc_lblSettings_p1_0.gridx = 0;
gbc_lblSettings_p1_0.gridy = 0;
settings_P1_main.add(lblSettings_p1_0, gbc_lblSettings_p1_0);
flag_useFastPlacement_p1 = new JCheckBox("");
GridBagConstraints gbc_flag_useFastPlacement_p1 = new GridBagConstraints();
gbc_flag_useFastPlacement_p1.gridx = 1;
gbc_flag_useFastPlacement_p1.gridy = 0;
flag_useFastPlacement_p1.setSelected(((BruteForceSearchAI)simulation_.getAI_p1()).getUseSparseBoardStateFactory());
settings_P1_main.add(flag_useFastPlacement_p1, gbc_flag_useFastPlacement_p1);
//----------------------------------------------------------------------------
JLabel lblUseDuplicateNodePruning_p1_0 = new JLabel("Duplicate Node Pruning");
lblUseDuplicateNodePruning_p1_0.setForeground(HSColors.TEXT_COLOR);
GridBagConstraints gbc_lblUseDuplicateNodePruning_p1_0 = new GridBagConstraints();
gbc_lblUseDuplicateNodePruning_p1_0.insets = new Insets(0, 0, 0, 5);
gbc_lblUseDuplicateNodePruning_p1_0.fill = GridBagConstraints.HORIZONTAL;
gbc_lblUseDuplicateNodePruning_p1_0.gridx = 0;
gbc_lblUseDuplicateNodePruning_p1_0.gridy = 1;
settings_P1_main.add(lblUseDuplicateNodePruning_p1_0, gbc_lblUseDuplicateNodePruning_p1_0);
flag_useDuplicateNodePruning_p1 = new JCheckBox("");
GridBagConstraints gbc_flag_useDuplicateNodePruning_p1 = new GridBagConstraints();
gbc_flag_useDuplicateNodePruning_p1.gridx = 1;
gbc_flag_useDuplicateNodePruning_p1.gridy = 1;
flag_useDuplicateNodePruning_p1.setSelected(((BruteForceSearchAI)simulation_.getAI_p1()).getUseDuplicateNodePruning());
settings_P1_main.add(flag_useDuplicateNodePruning_p1, gbc_flag_useDuplicateNodePruning_p1);
//----------------------------------------------------------------------------
JPanel settings_sim = new JPanel();
sl_main_panel.putConstraint(SpringLayout.NORTH, settings_sim, 0, SpringLayout.NORTH, main_panel);
sl_main_panel.putConstraint(SpringLayout.WEST, settings_sim, 20, SpringLayout.EAST, settings_P0);
sl_main_panel.putConstraint(SpringLayout.SOUTH, settings_sim, 0, SpringLayout.SOUTH, main_panel);
sl_main_panel.putConstraint(SpringLayout.EAST, settings_sim, -20, SpringLayout.WEST, settings_P1);
sl_contentPane.putConstraint(SpringLayout.NORTH, settings_sim, 5, SpringLayout.NORTH, main_panel);
sl_contentPane.putConstraint(SpringLayout.WEST, settings_sim, 425, SpringLayout.WEST, main_panel);
main_panel.add(settings_sim);
sl_contentPane.putConstraint(SpringLayout.SOUTH, settings_sim, 0, SpringLayout.SOUTH, contentPane);
SpringLayout sl_settings_sim = new SpringLayout();
settings_sim.setLayout(sl_settings_sim);
JPanel settings_general = new JPanel();
sl_settings_sim.putConstraint(SpringLayout.WEST, settings_general, 0, SpringLayout.WEST, settings_sim);
sl_settings_sim.putConstraint(SpringLayout.SOUTH, settings_general, 0, SpringLayout.SOUTH, settings_sim);
sl_settings_sim.putConstraint(SpringLayout.EAST, settings_general, 0, SpringLayout.EAST, settings_sim);
sl_contentPane.putConstraint(SpringLayout.NORTH, settings_general, 0, SpringLayout.NORTH, contentPane);
sl_contentPane.putConstraint(SpringLayout.SOUTH, settings_general, 0, SpringLayout.SOUTH, contentPane);
settings_sim.add(settings_general);
settings_general.setBackground(BACKGROUND_COLOR);
GridBagLayout gbl_settings_general = new GridBagLayout();
gbl_settings_general.columnWidths = new int[] {160, 150, 0};
gbl_settings_general.rowHeights = new int[]{28, 28, 28, 0};
gbl_settings_general.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
gbl_settings_general.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
settings_general.setLayout(gbl_settings_general);
JLabel lblSettings_general_0 = new JLabel("Simulation Name:");
lblSettings_general_0.setForeground(Color.WHITE);
GridBagConstraints gbc_lblSettings_general_0 = new GridBagConstraints();
gbc_lblSettings_general_0.fill = GridBagConstraints.HORIZONTAL;
gbc_lblSettings_general_0.insets = new Insets(0, 0, 5, 5);
gbc_lblSettings_general_0.gridx = 0;
gbc_lblSettings_general_0.gridy = 0;
settings_general.add(lblSettings_general_0, gbc_lblSettings_general_0);
fldSimName = new JTextField();
fldSimName.setText("HearthSim");
GridBagConstraints gbc_fldSimName = new GridBagConstraints();
gbc_fldSimName.anchor = GridBagConstraints.NORTH;
gbc_fldSimName.fill = GridBagConstraints.HORIZONTAL;
gbc_fldSimName.insets = new Insets(0, 0, 5, 0);
gbc_fldSimName.gridx = 1;
gbc_fldSimName.gridy = 0;
settings_general.add(fldSimName, gbc_fldSimName);
fldSimName.setColumns(10);
JLabel lblSettings_general_1 = new JLabel("Number of Simulations:");
lblSettings_general_1.setForeground(Color.WHITE);
GridBagConstraints gbc_lblSettings_general_1 = new GridBagConstraints();
gbc_lblSettings_general_1.fill = GridBagConstraints.HORIZONTAL;
gbc_lblSettings_general_1.insets = new Insets(0, 0, 5, 5);
gbc_lblSettings_general_1.gridx = 0;
gbc_lblSettings_general_1.gridy = 1;
settings_general.add(lblSettings_general_1, gbc_lblSettings_general_1);
fldNumSims = new JTextField();
if (simulation_.getConfig().numSimulations_ > 0)
fldNumSims.setText("" + simulation_.getConfig().numSimulations_);
else
fldNumSims.setText("10");
GridBagConstraints gbc_fldNumSims = new GridBagConstraints();
gbc_fldNumSims.anchor = GridBagConstraints.NORTH;
gbc_fldNumSims.fill = GridBagConstraints.HORIZONTAL;
gbc_fldNumSims.insets = new Insets(0, 0, 5, 0);
gbc_fldNumSims.gridx = 1;
gbc_fldNumSims.gridy = 1;
settings_general.add(fldNumSims, gbc_fldNumSims);
fldNumSims.setColumns(10);
JLabel lblSettings_general_2 = new JLabel("Number of Threads:");
lblSettings_general_2.setForeground(Color.WHITE);
GridBagConstraints gbc_lblSettings_general_2 = new GridBagConstraints();
gbc_lblSettings_general_2.fill = GridBagConstraints.HORIZONTAL;
gbc_lblSettings_general_2.insets = new Insets(0, 0, 0, 5);
gbc_lblSettings_general_2.gridx = 0;
gbc_lblSettings_general_2.gridy = 2;
settings_general.add(lblSettings_general_2, gbc_lblSettings_general_2);
fldNumThreads = new JTextField();
if (simulation_.getConfig().numThreads_ > 0)
fldNumThreads.setText("" + simulation_.getConfig().numThreads_);
else
fldNumThreads.setText("1");
GridBagConstraints gbc_fldNumThreads = new GridBagConstraints();
gbc_fldNumThreads.anchor = GridBagConstraints.NORTH;
gbc_fldNumThreads.fill = GridBagConstraints.HORIZONTAL;
gbc_fldNumThreads.gridx = 1;
gbc_fldNumThreads.gridy = 2;
settings_general.add(fldNumThreads, gbc_fldNumThreads);
fldNumThreads.setColumns(10);
JPanel settings_sim_title = new JPanel();
settings_sim_title.setBackground(BACKGROUND_COLOR);
sl_settings_sim.putConstraint(SpringLayout.NORTH, settings_general, 0, SpringLayout.SOUTH, settings_sim_title);
sl_settings_sim.putConstraint(SpringLayout.NORTH, settings_sim_title, 0, SpringLayout.NORTH, settings_sim);
sl_settings_sim.putConstraint(SpringLayout.WEST, settings_sim_title, 0, SpringLayout.WEST, settings_sim);
sl_settings_sim.putConstraint(SpringLayout.SOUTH, settings_sim_title, 40, SpringLayout.NORTH, settings_sim);
sl_settings_sim.putConstraint(SpringLayout.EAST, settings_sim_title, 0, SpringLayout.EAST, settings_sim);
settings_sim.add(settings_sim_title);
JLabel lblNewLabel_2 = new JLabel("General");
lblNewLabel_2.setFont(new Font("Helvetica Neue", Font.PLAIN, 20));
lblNewLabel_2.setForeground(Color.WHITE);
settings_sim_title.add(lblNewLabel_2);
sl_contentPane.putConstraint(SpringLayout.WEST, settings_general, 6, SpringLayout.EAST, settings_P0);
sl_contentPane.putConstraint(SpringLayout.EAST, settings_sim, -6, SpringLayout.WEST, settings_P1);
sl_contentPane.putConstraint(SpringLayout.EAST, settings_general, -6, SpringLayout.WEST, settings_P1);
GridBagConstraints dummyConstraints = new GridBagConstraints();
dummyConstraints.gridy = 2;
dummyConstraints.weighty = 1.0;
JPanel dummyPanel0 = new JPanel();
JPanel dummyPanel1 = new JPanel();
dummyPanel0.setOpaque(false);
dummyPanel1.setOpaque(false);
settings_P0_main.add(dummyPanel0, dummyConstraints);
settings_P1_main.add(dummyPanel1, dummyConstraints);
this.addWindowListeners();
}
private void addWindowListeners() {
addWindowListener(new WindowAdapter() {
@Override
public void windowDeactivated(WindowEvent e) {
simulation_.getConfig().numSimulations_ = Integer.parseInt(fldNumSims.getText());
simulation_.getConfig().numThreads_ = Integer.parseInt(fldNumThreads.getText());
simulation_.getConfig().simName_ = fldSimName.getText();
simulation_.setAI_p0(BruteForceSearchAI.buildStandardAI2());
simulation_.setAI_p1(BruteForceSearchAI.buildStandardAI2());
((BruteForceSearchAI)simulation_.getAI_p0()).setUseSparseBoardStateFactory(flag_useFastPlacement_p0.isSelected());
((BruteForceSearchAI)simulation_.getAI_p1()).setUseSparseBoardStateFactory(flag_useFastPlacement_p1.isSelected());
((BruteForceSearchAI)simulation_.getAI_p0()).setUseDuplicateNodePruning(flag_useDuplicateNodePruning_p0.isSelected());
((BruteForceSearchAI)simulation_.getAI_p1()).setUseDuplicateNodePruning(flag_useDuplicateNodePruning_p1.isSelected());
}
});
}
}