diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-07-05 13:20:11 -0400 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:24 +0200 |
| commit | 91af2f3fe4a9b40093ea43c7c899f8281ee887f8 (patch) | |
| tree | 8e4206ddc695a27e8e311bd32ab3d0d5fa2261d5 | |
| parent | 0ea8d281ca4404a26f34404f3ae5b82b3517f941 (diff) | |
| download | muhqs-game-91af2f3fe4a9b40093ea43c7c899f8281ee887f8.tar.gz muhqs-game-91af2f3fe4a9b40093ea43c7c899f8281ee887f8.zip | |
make draft more flexible
Add more draft specific errors and a function to replace AI by a new player.
| -rw-r--r-- | go/game/draft.go | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/go/game/draft.go b/go/game/draft.go index 53090976..d698abce 100644 --- a/go/game/draft.go +++ b/go/game/draft.go @@ -20,8 +20,17 @@ type Draft struct { var ( ErrMissingDraftSets = errors.New("missing draft sets") + ErrInvalidDraft = errors.New("invalid draft") ) +type ErrParseDraftDesc struct { + err error +} + +func (err ErrParseDraftDesc) Error() string { + return err.err.Error() +} + func NewDraftFromDesc(players []*Player, desc string) (*Draft, error) { if !strings.ContainsRune(desc, ':') { return nil, ErrMissingDraftSets @@ -32,7 +41,6 @@ func NewDraftFromDesc(players []*Player, desc string) (*Draft, error) { if sets, err := SetListToSets(setList); err != nil { return nil, err } else { - return NewDraft(players, desc, sets) } } @@ -47,7 +55,10 @@ func NewDraft(players []*Player, desc string, sets []SetIdentifier) (*Draft, err func (d *Draft) parseDesc(desc string) error { // strings.ReplaceAll(desc, "P", fmt.Sprintf("%d", len(d.players))) _, err := fmt.Sscanf(desc, "%dx[%d;%d]", &d.packsPerPlayer, &d.cardsPerPack, &d.packSize) - return err + if err != nil { + return ErrParseDraftDesc{err} + } + return nil } func (d *Draft) Valid() bool { @@ -151,6 +162,23 @@ func (d *Draft) AddPlayer(p *Player) { d.players = append(d.players, p) } +// AddPlayerReplacingAI adds a player to t+e draft replacing the first encountered AI. +func (d *Draft) AddPlayerReplacingAI(new *Player) { + if new.Ctrl == nil { + log.Fatal("added player without control") + } + + // try to replace AI + for i, p := range d.players { + if _, ok := p.Ctrl.(*randomDraftAiCtrl); ok { + d.players[i] = new + return + } + } + + d.players = append(d.players, new) +} + func (d *Draft) Players() []*Player { return d.players } |
