package OverseerGUI;
import EnvironmentPluginAPI.Service.AbstractVisualizeReplayPanel;
import EnvironmentPluginAPI.Service.ICycleReplay;
import EnvironmentPluginAPI.Service.IVisualizeReplay;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameReplayForm {
private JPanel panel1;
private JButton stepBackButton;
private JButton playButton;
private JButton stepForwardButton;
private JButton pauseButton;
private JPanel gamePanel;
private JSlider replaySpeedSlider;
private ICycleReplay replay;
private IVisualizeReplay visualizeReplay;
private boolean swing;
public GameReplayForm() {
playButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (replay != null) {
visualizeReplay.play();
pauseButton.setEnabled(true);
}
}
});
stepForwardButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (replay != null) {
visualizeReplay.stepForward();
}
}
});
pauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
visualizeReplay.pause();
pauseButton.setEnabled(false);
playButton.setEnabled(true);
}
});
replaySpeedSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (!replaySpeedSlider.getValueIsAdjusting() && visualizeReplay != null) {
visualizeReplay.changeReplaySpeed(replaySpeedSlider.getValue());
}
}
});
stepBackButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (replay != null) {
visualizeReplay.stepBackward();
}
}
});
}
public void setGameReplay(ICycleReplay replay) {
this.replay = replay;
visualizeReplay.setGameReplay(replay);
}
public void setVisualizationPlugin(IVisualizeReplay plugin) {
if (plugin != null) { //if a visualization plugin is set
this.visualizeReplay = plugin;
swing = plugin instanceof AbstractVisualizeReplayPanel;
gamePanel.setLayout(new BorderLayout());
if (swing) {
gamePanel.add((AbstractVisualizeReplayPanel) visualizeReplay);
gamePanel.revalidate();
}
visualizeReplay.changeReplaySpeed(replaySpeedSlider.getValue());
} else { //if ne plugin was provided disable all controls
pauseButton.setEnabled(false);
playButton.setEnabled(false);
stepBackButton.setEnabled(false);
stepBackButton.setEnabled(false);
}
}
}