From 5a2158f525a7708475e1cb6232e5e07e7aec9197 Mon Sep 17 00:00:00 2001 From: Kistaro Windrider Date: Sun, 2 Apr 2023 12:54:52 -0700 Subject: [PATCH] Implement Stats Mode. Also rewords some prompts. Might as well be thorough in accepting reasonable inputs. --- cardsim/terminalui.go | 48 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/cardsim/terminalui.go b/cardsim/terminalui.go index 3842a95..26234a5 100644 --- a/cardsim/terminalui.go +++ b/cardsim/terminalui.go @@ -87,7 +87,7 @@ func pickNextAction[C StatsCollection](p *Player[C]) (isCard bool, cardIdx int, max := displayHandMenu(p, handOffset) divider() - fmt.Printf("Show just (M)essages, (S)tats, (A)ctions, make a choice (1-%d), or (Q)uit? >", max+1) + fmt.Printf("Show just (M)essages, (I)nfo Panels, (A)ctions, make a choice (1-%d), or (Q)uit? > ", max+1) input := getResponse() switch input { // Special cases @@ -95,7 +95,7 @@ func pickNextAction[C StatsCollection](p *Player[C]) (isCard bool, cardIdx int, cls() displayMessageSection(p) wait() - case "s", "stat", "stats": + case "s", "stat", "stats", "i", "info", "p", "panel", "panels", "infopanel", "infopanels": statsMode(p) case "a", "act", "actions": actionsMode(p) @@ -157,7 +157,7 @@ func divider() { func confirmQuit() { divider() - fmt.Println("Are you sure you want to quit? (Y/N) ") + fmt.Println("Are you sure you want to quit? (Y/N) > ") s := getResponse() if s == "y" || s == "yes" { fmt.Println("Bye!") @@ -235,9 +235,9 @@ func promptCard[C StatsCollection](p *Player[C], card Card[C]) (optionIdx int, e } fmt.Println() if valid { - fmt.Printf("Go (B)ack, (Q)uit, or enact a choice (1 - %d)? >", len(opts)+1) + fmt.Printf("Go (B)ack, (Q)uit, or enact a choice (1 - %d)? > ", len(opts)+1) } else { - fmt.Print("Go (B)ack or (Q)uit? >") + fmt.Print("Go (B)ack or (Q)uit? > ") } read := getResponse() switch read { @@ -314,3 +314,41 @@ func displayCard[C StatsCollection](p *Player[C], card Card[C]) ([]CardOption[C] } return opts, valid, errs.Emit() } + +func statsMode[C StatsCollection](p *Player[C]) error { + var errs ErrorCollector + for { + cls() + n := displayStatsMenu(p) + if n <= 0 { + fmt.Println("No info panels are available.") + wait() + return errs.Emit() + } + fmt.Println() + fmt.Printf("Go (B)ack, (Q)uit, or view an info panel (1-%d)? > ") + s := getResponse() + switch s { + case "b", "back": + return errs.Emit() + case "q", "quit": + confirmQuit() + default: + v, err := strconv.Atoi(s) + if err != nil { + fmt.Println("Sorry, I don't understand.") + wait() + } else if v <= 0 || v > n { + fmt.Println("There's no info panel with that index.") + } else { + err := displayOnePanel(p, p.InfoPanels[v-1]) + errs.Add(err) + if IsSeriousError(err) { + return errs.Emit() + } + wait() + } + } + // Loop to re-display info panels menu. + } +}