Skip to content

Commit 07a68c0

Browse files
authored
Merge pull request #8 from Eric-Butcher/make_playing
Added the Play and Pause functionality.
2 parents 2126dcc + b713f4f commit 07a68c0

19 files changed

+288
-140
lines changed

.idea/workspace.xml

Lines changed: 40 additions & 55 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/controller/Controller.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,56 @@
33
import model.Model;
44
import view.View;
55

6+
import javax.swing.*;
7+
import java.awt.event.ActionEvent;
8+
import java.awt.event.ActionListener;
9+
610
public class Controller {
711

812
private final Model model;
913
private final View view;
14+
private final ActionListener autoIterateFromPlayer = new ActionListener() {
15+
@Override
16+
public void actionPerformed(ActionEvent e) {
17+
model.step();
18+
view.updateView(model.updateView());
19+
}
20+
};
21+
22+
private final int delayInMilliseconds = 100;
23+
private final Timer timer = new Timer(delayInMilliseconds, autoIterateFromPlayer);
1024

1125
public Controller(Model model, View view) {
1226
this.model = model;
1327
this.view = view;
1428

15-
this.view.getMenuPanel().getGenerateMazeButton().addActionListener(new GenerateAction(this.model, this.view));
29+
this.view.getMenuPanel().getGenerateMazeButton().addActionListener(new GenerateAction(this.model, this.view, this));
1630
this.view.getMenuPanel().getMazeGeneratorComboBox().addActionListener(new GenerateSelectAction(this.model, this.view));
1731

18-
this.view.getMenuPanel().getSolveMazeButton().addActionListener(new SolveAction(this.model, this.view));
32+
this.view.getMenuPanel().getSolveMazeButton().addActionListener(new SolveAction(this.model, this.view, this));
1933
this.view.getMenuPanel().getMazeSolverComboBox().addActionListener(new SolverSelectAction(this.model, this.view));
2034

21-
this.view.getMenuPanel().getFinishButton().addActionListener(new FinishAction(this.model, this.view));
22-
this.view.getMenuPanel().getStepButton().addActionListener(new StepAction(this.model, this.view));
35+
this.view.getMenuPanel().getFinishButton().addActionListener(new FinishAction(this.model, this.view, this));
36+
this.view.getMenuPanel().getStepButton().addActionListener(new StepAction(this.model, this.view, this));
37+
38+
this.view.getMenuPanel().getPlayPauseButton().addActionListener(new PlayPauseAction(this.model, this.view, this));
39+
40+
}
41+
42+
public Timer getTimer() {
43+
return timer;
44+
}
45+
46+
public void playPause() {
47+
if (this.timer.isRunning()) {
48+
this.timer.stop();
49+
} else {
50+
this.timer.restart();
51+
}
52+
}
53+
54+
public void stopPlaying() {
55+
this.timer.stop();
2356
}
2457

2558
}

src/controller/FinishAction.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ public class FinishAction implements ActionListener {
1111
private final Model model;
1212
private final View view;
1313

14-
public FinishAction(Model model, View view) {
14+
private final Controller controller;
15+
16+
public FinishAction(Model model, View view, Controller controller) {
1517
this.model = model;
1618
this.view = view;
19+
this.controller = controller;
1720
}
1821

1922
@Override
2023
public void actionPerformed(ActionEvent e) {
24+
this.controller.stopPlaying();
2125
this.model.finish();
2226
this.view.updateView(this.model.updateView());
2327
}

src/controller/GenerateAction.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ public class GenerateAction implements ActionListener {
1111
private final Model model;
1212
private final View view;
1313

14-
public GenerateAction(Model model, View view) {
14+
private final Controller controller;
15+
16+
public GenerateAction(Model model, View view, Controller controller) {
1517
this.model = model;
1618
this.view = view;
19+
this.controller = controller;
1720
}
1821

1922
@Override
2023
public void actionPerformed(ActionEvent e) {
24+
this.controller.stopPlaying();
2125
this.model.generate();
2226
this.view.updateView(this.model.updateView());
2327
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package controller;
2+
3+
import model.Model;
4+
import view.View;
5+
6+
import java.awt.event.ActionEvent;
7+
import java.awt.event.ActionListener;
8+
9+
public class PlayPauseAction implements ActionListener {
10+
private final Model model;
11+
private final View view;
12+
private final Controller controller;
13+
14+
public PlayPauseAction(Model model, View view, Controller controller) {
15+
this.model = model;
16+
this.view = view;
17+
this.controller = controller;
18+
}
19+
20+
@Override
21+
public void actionPerformed(ActionEvent e) {
22+
this.controller.playPause();
23+
}
24+
}

src/controller/SolveAction.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ public class SolveAction implements ActionListener {
1111
private final Model model;
1212
private final View view;
1313

14-
public SolveAction(Model model, View view) {
14+
private final Controller controller;
15+
16+
public SolveAction(Model model, View view, Controller controller) {
1517
this.model = model;
1618
this.view = view;
19+
this.controller = controller;
1720
}
1821

1922
@Override
2023
public void actionPerformed(ActionEvent e) {
24+
this.controller.stopPlaying();
2125
this.model.solve();
2226
this.view.updateView(this.model.updateView());
2327
}

src/controller/StepAction.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ public class StepAction implements ActionListener {
1111
private final Model model;
1212
private final View view;
1313

14-
public StepAction(Model model, View view) {
14+
private final Controller controller;
15+
16+
public StepAction(Model model, View view, Controller controller) {
1517
this.model = model;
1618
this.view = view;
19+
this.controller = controller;
1720
}
1821

1922
@Override
2023
public void actionPerformed(ActionEvent e) {
24+
this.controller.stopPlaying();
2125
this.model.step();
2226
this.view.updateView(this.model.updateView());
2327
}

src/controller/ViewUpdatePacket.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package controller;
22

3-
import java.util.LinkedList;
3+
import java.util.ArrayList;
44

5-
public record ViewUpdatePacket(LinkedList<TileUpdate> tileUpdates) {
5+
public record ViewUpdatePacket(ArrayList<TileUpdate> tileUpdates) {
66

77
public void addTileUpdate(TileUpdate tileUpdate) {
88
tileUpdates.add(tileUpdate);

src/model/generators/AldousBroderGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import utilities.Constants;
77

88
import java.util.ArrayList;
9-
import java.util.LinkedList;
109

1110
public class AldousBroderGenerator extends Generator {
1211

@@ -28,7 +27,7 @@ public void setCurrentCell(Cell currentCell) {
2827

2928
@Override
3029
public ViewUpdatePacket makeViewUpdatePacket() {
31-
ViewUpdatePacket updatePacket = new ViewUpdatePacket(new LinkedList<>());
30+
ViewUpdatePacket updatePacket = new ViewUpdatePacket(new ArrayList<>(300));
3231

3332
for (int x = Constants.minCellIndex; x <= Constants.maxCellIndex; x++) {
3433
for (int y = Constants.minCellIndex; y <= Constants.maxCellIndex; y++) {

0 commit comments

Comments
 (0)