summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-11-16 02:01:58 -0500
committersowgro <tpoke.ferrari@gmail.com>2025-11-16 02:01:58 -0500
commit969b8071dd799dfaed939e10bf77b8a1ad42f9dc (patch)
tree214016dc742a155512fbb2f851cf589509f3b361 /src/main/java/design/controller/userinput/menus/HolePlayMenu.java
parentcf59d52cba70742f1d4098c38b4c7a798b3d89fa (diff)
parent43530df067b1132b944e9619bdf60b72264829ec (diff)
downloaddesignproject-design-6-969b8071dd799dfaed939e10bf77b8a1ad42f9dc.tar.gz
designproject-design-6-969b8071dd799dfaed939e10bf77b8a1ad42f9dc.tar.bz2
designproject-design-6-969b8071dd799dfaed939e10bf77b8a1ad42f9dc.zip
Merge branch 'main' into import-exportimport-export
# Conflicts: # data/personaldb.json # src/main/java/design/controller/userinput/menus/MainMenu.java # src/main/java/design/persistence/JSONLeagueDatabase.java # src/main/java/design/persistence/JSONPersonalDatabase.java # src/test/java/design/model/ClubTest.java # src/test/java/design/model/GolferTest.java
Diffstat (limited to 'src/main/java/design/controller/userinput/menus/HolePlayMenu.java')
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java46
1 files changed, 35 insertions, 11 deletions
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
index e0d1572..6651500 100644
--- a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -3,12 +3,15 @@ package design.controller.userinput.menus;
import design.controller.userinput.Menu;
import design.controller.userinput.MenuOption;
import design.model.Course;
+import design.model.Golfer;
import design.model.Hole;
import design.runtime.Session;
import design.model.Club;
import design.model.Round;
import design.model.holeplay.HolePlayContext;
import design.persistence.PersonalDatabase;
+import design.model.undo.UndoManager;
+import design.controller.userinput.UndoActions;
import java.util.ArrayList;
import java.util.List;
@@ -18,10 +21,11 @@ public class HolePlayMenu extends Menu {
private final Round round;
private final HolePlayContext ctx;
+ private final Golfer golfer = Session.getCurrentGolfer();
public HolePlayMenu() {
this.round = createRound();
- this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, PersonalDatabase.instance());
+ this.ctx = new HolePlayContext(this.golfer, round, PersonalDatabase.instance());
}
@Override
@@ -34,17 +38,37 @@ public class HolePlayMenu extends Menu {
public List<MenuOption> getMenuOptions() {
List<MenuOption> opts = new ArrayList<>();
+ // End round (always shown) 1
+ opts.add(new MenuOption("end round", () -> {
+ UndoManager.instance().capture(golfer, "End round on " + round.getCourse().getName());
+ ctx.endRoundNow();
+ System.out.println("Round ended.");
+ new MainMenu().present();
+ }));
+
+ // 2
+ opts.add(new MenuOption("undo", () -> {
+ UndoActions.undoWithSave();
+ this.present();
+ }));
+
+ // 3
+ opts.add(new MenuOption("redo", () -> {
+ UndoActions.redoWithSave();
+ this.present();
+ }));
+
boolean inSetup = (ctx.getCurrentPlay() == null);
if (inSetup) {
- // 0) Start hole
+ // 4) Start hole
opts.add(new MenuOption("start hole", () -> {
ctx.startHole();
System.out.println("Started hole " + round.getCurrentHole().getNumber() + ".");
this.present();
}));
} else {
- // 0) Take a shot
+ // 4) Take a shot
opts.add(new MenuOption("take a shot", () -> {
var selector = new SelectClub();
selector.present();
@@ -60,6 +84,8 @@ public class HolePlayMenu extends Menu {
dist = Integer.parseInt(ds);
}
+ UndoManager.instance().capture(ctx, "Shot with " + club.getNickname() + " for " + dist + " yds");
+
// Records shot
ctx.recordShot(club, dist);
System.out.println("Shot recorded: " + dist + " yds with " + club.getNickname());
@@ -67,23 +93,19 @@ public class HolePlayMenu extends Menu {
this.present();
}));
- // 1) Hole out
+ // 5) Hole out
opts.add(new MenuOption("hole out", () -> {
// Precedes to next hole
int prev = round.getCurrentHole().getNumber();
+
+ UndoManager.instance().capture(golfer, "Hole out on " + prev + " at " + round.getCourse().getName());
+
ctx.holeOut();
System.out.println("Holed out on " + prev + ". Next: " + round.getCurrentHole().getNumber());
this.present();
}));
}
- // End round (always shown)
- opts.add(new MenuOption("end round", () -> {
- ctx.endRoundNow();
- System.out.println("Round ended.");
- new MainMenu().present();
- }));
-
return opts;
}
@@ -118,6 +140,8 @@ public class HolePlayMenu extends Menu {
// Starts round and sends user to HolePlayMenu
Hole startHole = course.getHoles().get(startHoleNum - 1);
Round r = new Round(course, Session.getDateTime(), startHole);
+ // Undo puts golfer back to before round existed.
+ UndoManager.instance().capture(golfer, "Start round on " + course.getName() + " (hole " + startHoleNum + ")");
golfer.addRound(r);
return r;
}