Skeleton of prototypical UI.
This commit is contained in:
parent
9e659ecf41
commit
af9d9a6579
@ -423,3 +423,31 @@ func (p *Player[C]) EnactPermanentAction(actionIdx, choiceIdx int) (Message, err
|
|||||||
}
|
}
|
||||||
return p.EnactPermanentActionUnchecked(actionIdx, choiceIdx)
|
return p.EnactPermanentActionUnchecked(actionIdx, choiceIdx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReportError adds an error to the temporary messages, depending on
|
||||||
|
// its severity and debug settings:
|
||||||
|
//
|
||||||
|
// - If the error is nil, this never does anything.
|
||||||
|
// - If the error is serious, this emits the error if the debug level is
|
||||||
|
// -1 or greater.
|
||||||
|
// - If the error is only a warning, this emits the error if the debug
|
||||||
|
// level is 0 or greater.
|
||||||
|
func (p *Player[C]) ReportError(e error) {
|
||||||
|
if e == nil || p.DebugLevel < -1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if p.DebugLevel < 0 && !IsSeriousError(e) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
p.ChapterBreak()
|
||||||
|
severity := "[Warning]"
|
||||||
|
if IsSeriousError(e) {
|
||||||
|
severity = "[ERROR]"
|
||||||
|
}
|
||||||
|
p.TemporaryMessages = append(p.TemporaryMessages, Msgf("%s: %v", severity, e))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CanAct returns whether the player has actions theoretically available.
|
||||||
|
func (p *Player[C]) CanAct() bool {
|
||||||
|
return p.ActionsRemaining > 0 && (len(p.Hand) > 0 || len(p.PermanentActions) > 0)
|
||||||
|
}
|
||||||
|
37
cardsim/terminalui.go
Normal file
37
cardsim/terminalui.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package cardsim
|
||||||
|
|
||||||
|
func RunSimpleTerminalUI[C StatsCollection](p *Player[C]) error {
|
||||||
|
for {
|
||||||
|
err := p.StartNextTurn()
|
||||||
|
if p.DebugLevel < 1 && IsSeriousError(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.ReportError(err)
|
||||||
|
|
||||||
|
for p.CanAct() {
|
||||||
|
isCard, cardIdx, choiceIdx := pickNextAction(p)
|
||||||
|
var msg Message
|
||||||
|
if isCard {
|
||||||
|
msg, err = p.EnactCard(cardIdx, choiceIdx)
|
||||||
|
} else {
|
||||||
|
msg, err = p.EnactPermanentAction(cardIdx, choiceIdx)
|
||||||
|
}
|
||||||
|
p.ReportError(err)
|
||||||
|
if p.DebugLevel < 1 && IsSeriousError(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
displayAndWait(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
review(p)
|
||||||
|
err = p.Simulate()
|
||||||
|
if p.DebugLevel < 1 && IsSeriousError(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if p.DebugLevel < 1 && p.State.Over() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user