aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-07-05 13:20:11 -0400
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:24 +0200
commit91af2f3fe4a9b40093ea43c7c899f8281ee887f8 (patch)
tree8e4206ddc695a27e8e311bd32ab3d0d5fa2261d5
parent0ea8d281ca4404a26f34404f3ae5b82b3517f941 (diff)
downloadmuhqs-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.go32
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
}