summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
diff options
context:
space:
mode:
authorMichael Lizzio <mjl2396@rit.edu>2025-10-05 16:42:54 -0400
committerMichael Lizzio <mjl2396@rit.edu>2025-10-05 16:42:54 -0400
commit042c456a542a60262e71f694fa21e0dfcfc25f3a (patch)
tree9a9fc9b17db70a280f32949e423c7138bd0a69fd /src/main/java/design/controller/userinput/menus/HolePlayMenu.java
parent204654ad4a69677e9f38308344760ddb33316758 (diff)
downloaddesignproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.tar.gz
designproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.tar.bz2
designproject-design-6-042c456a542a60262e71f694fa21e0dfcfc25f3a.zip
Completed HolePlayMenu and basic CourseSelectionMenu, minal updates to other classes
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/HolePlayMenu.java88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/main/java/design/controller/userinput/menus/HolePlayMenu.java b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
new file mode 100644
index 0000000..63447e2
--- /dev/null
+++ b/src/main/java/design/controller/userinput/menus/HolePlayMenu.java
@@ -0,0 +1,88 @@
+package design.controller.userinput.menus;
+
+import design.controller.userinput.Menu;
+import design.controller.userinput.MenuOption;
+import design.controller.userinput.Session;
+import design.model.Club;
+import design.model.Round;
+import design.model.holeplay.HolePlayContext;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class HolePlayMenu extends Menu {
+
+ private final Round round;
+ private final HolePlayContext ctx;
+
+ public HolePlayMenu(Round round) {
+ this.round = round;
+ this.ctx = new HolePlayContext(Session.getCurrentGolfer(), round, Session.PDB);
+ }
+
+ @Override
+ public String getTitle() {
+ return String.format("hole play - %s | hole %d", round.getCourse().getName(),
+ round.getCurrentHole().getNumber());
+ }
+
+ @Override
+ public List<MenuOption> getMenuOptions() {
+ List<MenuOption> opts = new ArrayList<>();
+
+ boolean inSetup = (ctx.getCurrentPlay() == null);
+
+ if (inSetup) {
+ // 0) Start hole
+ opts.add(new MenuOption("start hole", (a) -> {
+ ctx.startHole();
+ System.out.println("Started hole " + round.getCurrentHole().getNumber() + ".");
+ this.present();
+ }));
+ } else {
+ // 0) Take a shot
+ opts.add(new MenuOption("take a shot", (a) -> {
+ // Gets club
+ Scanner sc = new Scanner(System.in);
+ System.out.print("Club nickname: ");
+ String nick = sc.nextLine().trim();
+ // Defaulted to Driver for now
+ // TODO update logic
+ Club club = new Club("Generic", nick, Club.ClubType.DRIVER);
+
+ // Get shot distance (defaults to 0 of not stated)
+ System.out.print("Distance (yds, blank=0): ");
+ String ds = sc.nextLine().trim();
+ int dist = 0;
+ if (!ds.isEmpty()) {
+ dist = Integer.parseInt(ds);
+ }
+
+ // Records shot
+ ctx.recordShot(club, dist);
+ System.out.println("Shot recorded: " + dist + " yds with " + club.getNickname());
+
+ this.present();
+ }));
+
+ // 1) Hole out
+ opts.add(new MenuOption("hole out", (a) -> {
+ // Precedes to next hole
+ int prev = round.getCurrentHole().getNumber();
+ 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", (a) -> {
+ ctx.endRoundNow();
+ System.out.println("Round ended.");
+ new MainMenu().present();
+ }));
+
+ return opts;
+ }
+}