aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
}