From 57348f7ebf14267888b3ced8bc750be324156ce4 Mon Sep 17 00:00:00 2001 From: Kistaro Windrider Date: Sun, 2 Apr 2023 19:33:44 -0700 Subject: [PATCH] Add a bunch of logging. --- cardsim/player.go | 7 +++++++ cardsim/rules.go | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/cardsim/player.go b/cardsim/player.go index 7a7defc..685162e 100644 --- a/cardsim/player.go +++ b/cardsim/player.go @@ -463,3 +463,10 @@ func (p *Player[C]) ReportError(e error) { func (p *Player[C]) CanAct() bool { return p.ActionsRemaining > 0 && (len(p.Hand) > 0 || len(p.PermanentActions) > 0) } + +func (p *Player[C]) Debug(minLevel int, msg Message) { + if p.DebugLevel < minLevel { + return + } + p.TemporaryMessages = append(p.TemporaryMessages, msg) +} diff --git a/cardsim/rules.go b/cardsim/rules.go index 1291d94..02d44e8 100644 --- a/cardsim/rules.go +++ b/cardsim/rules.go @@ -334,18 +334,21 @@ func (r *RuleCollection[C]) Run(p *Player[C]) error { r.steps = steps } + p.Debug(2, Msgf("Executing steps: %v", steps)) + var errs ErrorCollector for _, step := range steps { stepRules := r.byStep[step] - p.Rand.Shuffle(len(stepRules), func(i, j int) { - stepRules[i], stepRules[j] = stepRules[j], stepRules[i] - }) + p.Debug(3, Msgf("Executing step %d; length %d", step, len(stepRules))) + ShuffleAll(stepRules, p.Rand) var remove []RuleID halt := false for _, id := range stepRules { rule := r.rules[id] + p.Debug(4, Msgf("Executing rule %x (labeled %q)", id, rule.Label())) err := rule.Enact(p) if err != nil { + p.Debug(2, Msgf("Rule %x (%q): error: %v", id, rule.Label(), err)) ignore := false if errors.Is(err, ErrDeleteRule) { remove = append(remove, id) @@ -377,10 +380,14 @@ func (r *RuleCollection[C]) Run(p *Player[C]) error { } } if halt { - return errs.Emit() + ret := errs.Emit() + p.Debug(2, Msgf("Rules stopping early. Result: %v", ret)) + return ret } } - return errs.Emit() + ret := errs.Emit() + p.Debug(2, Msgf("Rules complete. Result: %v", ret)) + return ret } func (r *RuleCollection[C]) applyDelayedUpdates() {